大家好,我是梁唐。
最近我发现,很多萌新说着想要做算法工程师,然而却对这个岗位的要求以及上班内容无所不知。认为学一个Python,再学一些机器学习、深度学习的模型就可以胜任了。上班就是用Python不停地写模型。
显然,这样的想法是有疑问的,假设真这么干,即使经过了面试成功入职,也会干得十分痛苦。由于你会发现这也不知道那也不知道,做啥都很费力,要求一段很长的期间学习。而这种为了接待上班暂时抱佛脚的学习往往很难深化,有种不停打补丁的觉得。
当天就和大家聊聊算法工程师的几项基本功,看看除了算法和模型之外,还要求学些什么。
首先当然是hadoop,不过hadoop不是一门技术,而是一个大数据框架。它的logo是一只黄色的小象,听说是这个名目的创立者用女儿的玩具命名的。
经过了很多年的开展,如今hadoop框架曾经十分红熟,衍生出了一个庞大的家族。有多庞大呢,我在google里给大家找了一张图,大家可以看看感触一下,这外面有多少是自己知道的,有多少没听说过。
当然关于算法工程师来说,hadoop家族并不要求所有了解,只有要着重关注几个就可以了。
首先是hdfs,hdfs是hadoop框架中的散布式文件系统。由于在工业场景当中,数据量是十分庞大的,动辄TB甚至是PB量级。如此庞大的数据,显然无法能存在一块磁盘里,必定要散布式存储,分红不同的局部,不同的局部分开存储。经过hdfs咱们可以很繁难地成功这一点,可以经常使用一些繁难的shell命令治理大规模的数据。
hdfs的外部是分片(block)存储的,并且设计了谨严的容错机制,尽或许地保障了数据的准确性。普通咱们用hdfs存储一些离线数据,也就是对提前要求不高的数据,比如模型的训练数据。它的特点是存储才干很强,然而读取速度很慢,两边的提前很长。
由于训练数据的规模往往也十分庞大,并且从用户线上的实时行为转化成模型要求的输入,两边要求少量的计算步骤。这会带来渺小的计算压力,因此关于这样的数据,咱们往往都是借助于hdfs做离线处置。设计一套数据处置流程,启动若干步骤的处置,每一步处置的两边数据都存储在hdfs上。
模型训练的时刻,也经过挂载hdfs的方式间接读取tensor启动训练。
hdfs是hadoop的存储系统,hadoop雷同也推出过一套计算系统,就是MapReduce。
我在之前的文章曾经引见过MapReduce的原理,其实十分繁难,它将数据的计算环节形象成了两个步骤。一个步骤叫map,一个步骤叫reduce。
map步骤做的数据的映射,比如咱们从一个很大的json文件当中读取出咱们想要的字段,在这个步骤当中,咱们从json取得了几个字段。
reduce步骤做的是汇总,咱们把刚刚map阶段获取的结果,依照咱们的想法会聚在一同,比如计算平均数、中位数等等。
这个想法奇妙的中央在于map和reduce都是可以散布式启动的,比如map阶段,咱们可以对hdfs里的每一个文件都设置一个map读取文件启动处置。map阶段完结之后,咱们也可以起多个reducer对map的结果启动加工,尽或许造成了整个环节都是并发启动的,也就保障了数据的处置速度。
只管MapReduce的提出到如今曾经十多年了,但依然没有淘汰,还在很多场景当中宽泛经常使用。
hive也是hadoop家族外围的一员,它的思维也很奇妙,做了一件十分无利于程序员的事件。
经常使用hdfs以及MapReduce其实就足够接待简直一切大数据计算的场景了,然而足够接待并不代表接待起来很舒适。有些场景经常使用起来就不是很随手,比如说咱们要把两份数据关联在一同,一份是用户点击数据,一份是商品数据,咱们想要获取用户点过的商品消息。
你会发现经常使用MapReduce去做这样一件事件会十分蛋疼,要写很多代码。所以有人突发奇想,咱们能不能应用hdfs以及MapReduce做一套好用一点的数据处置系统,比如说将数据所有格局化,而后像是数据库一样经常使用SQL来启动数据的查问和处置?于是就有了hive。
hive底层的运算框架就是MapReduce,只不过有了表结构之后,很多之前很复杂的操作被大大简化了。尤其是数据表之间的join、groupby等操作,之前要求写少量MapReduce的代码,如今几行SQL就搞定了。
不过hive毕竟不是数据库,它的经常使用还是有一些它自己专属的奇淫技巧。比如说防止数据歪斜的状况,比如说设置正当的内存分片,比如说udf的经常使用等等。
只是懂SQL的语法是写不好hive的,多少还要求做一些深化的了解。
说到spark置信很多同窗也是久仰小名,它是一个十分驰名的开源集群计算框架,也可以了解成一个散布式计算框架。
spark在MapReduce的基础上对MapReduce当中的一些疑问启动了优化,比如MapReduce每次运算完结之后都会把数据存储在磁盘上,这会带来渺小的IO开支。
而spark经常使用了存储器内运算技术,可以尽量缩小磁盘的写入。这其中的技术细节看疑问没有相关,咱们只有要知道它的运算性能比MapReduce快很多就可以了,普通来说运算速度是MapReduce的十倍以上。并且spark原生允许hdfs,所以大局部公司都是经常使用hdfs做数据存储,spark来启动数据运算。
在hadoop推出了hive之后,spark也推出了自己的sparkSQL。不过起初hive也允许经常使用spark作为计算引擎替代MapReduce了,这两者的性能上差异也就很小了,我团体还是更青睐hive一点,毕竟写起来繁难。
另外spark除了计算框架之外,当中也兼容了一些机器学习的库,比如MLlib,不过我没有用过,毕竟如今机器学习的时代都快完结了。很少再有经常使用场景了,大家感兴味也可以了解一下。
最后做一个繁难的总结,总体过去说想要成为一名合格的算法工程师,hadoop、MapReduce、hive这些或多或少都要求有所了解。不说能够知晓到原理级,但至少要求会用,大略知道外面怎样回事。
这也是工业界和试验室里的最大区别,毕竟学校里的试验数据量也不会很大,间接放在内存里就完事了。所以数据处置普通都是numpy +pandas什么的,然而在公司里,简直没有pandas的用武之地,毕竟数据量太大了,无法能都放内存里,必定要借助大数据计算平台来处置。
好了,就说这么多吧,感谢大家的阅读。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8324.html