大家好,我是凉糖。最近发现很多新人说想做算法工程师,但是对这个职位的要求和工作内容一无所知。本来以为学个Python,学点机器学习和深度学习模型就够了。工作是继续用Python编写模型。显然,这种思路是有问题的。如果真这么干,就算通过了面试,成功录用了,也是很痛苦的。因为你会发现你不知道这个,你也不知道那个。什么都做起来非常困难,而且需要很长时间才能学会。而这种为应付工作而局促的学习,往往难以深入,有种不断打补丁的感觉。今天就和大家聊一聊算法工程师的几个基本技能,看看除了算法和模型还需要学习什么。Hadoop当然首先是hadoop,但是hadoop不是一种技术,而是一种大数据框架。它的标志是一只黄色的小象,据说该项目的创建者以他女儿的玩具命名。经过多年的发展,Hadoop框架现在已经非常成熟,并且已经催生了一个庞大的家族。它有多大?我在谷歌上给大家找了一张图。你可以看一看,感受一下你知道多少,没听说过多少。当然,对于算法工程师来说,hadoop家族不需要全部了解,只需要关注其中的几个即可。HDFS首先是HDFS,HDFS是Hadoop框架中的分布式文件系统。因为在工业场景中,数据量非常大,往往是TB甚至PB量级。如此庞大的数据量显然不可能存在于一张磁盘上。一定要分布式存储,分成不同的部分,分开存储。我们可以通过hdfs很方便的实现这一点,我们可以使用一些简单的shell命令来管理大规模的数据。hdfs内部以块为单位存储,设计了严格的容错机制,尽可能保证数据的准确性。一般我们使用hdfs来存储一些离线数据,也就是对延迟要求不高的数据,比如模型训练数据。它的特点是存储能力强,但是读取速度很慢,中间的延迟很长。因为训练数据的规模往往非常大,而从用户在线的实时行为到模型需要的输入的转化,中间需要大量的计算步骤。这样会带来巨大的计算压力,所以对于这样的数据,我们往往会使用hdfs进行离线处理。设计一套数据处理流程,进行几步处理,每一步处理的中间数据都存储在hdfs上。模型训练时,也是通过挂载hdfs直接读取tensor进行训练。MapReducehdfs是Hadoop的存储系统,Hadoop也推出了一个计算系统,就是MapReduce。上一篇文章介绍了MapReduce的原理,其实很简单。它将数据的计算过程抽象为两个步骤。一步称为map,一步称为reduce。map这一步完成的数据映射,比如我们从一个很大的json文件中读取我们想要的字段。在这一步中,我们从json中获取了几个字段。reduce步骤所做的是总结。我们把刚才在map阶段得到的结果按照我们的想法进行汇总,比如计算平均值,中位数等等。这个想法的巧妙之处在于map和reduce都可以分布式。比如在map阶段,我们可以设置一个map,为hdfs中的每个文件读取文件进行处理。map阶段结束后,我们还可以设置多个reducer对map结果进行处理,这样整个过程尽可能并发执行,保证了数据处理速度。MapReduce虽然被提出十多年了,但是并没有被淘汰,在很多场景中仍然被广泛使用。Hivehive也是Hadoop家族的核心成员。它的想法也非常巧妙,它做了一件对程序员非常有益的事情。使用hdfs和MapReduce其实足以应对几乎所有的大数据计算场景,但足以应付并不代表应付自如。有些场景不是很好用。比如我们需要关联两条数据,一条是用户点击数据,一条是商品数据。我们要获取用户点击过的商品信息。你会发现用MapReduce做这样的事情是很痛苦的,需要写很多代码。于是有人突发奇想,我们是不是可以用hdfs和MapReduce做一个更容易使用的数据处理系统,比如把所有的数据格式化,然后像数据库一样用SQL查询和处理数据?所以有蜂巢。hive的底层计算框架是MapReduce,但是有了表结构,很多以前复杂的操作都大大简化了。尤其是数据表之间的join、groupby等操作,以前需要写很多MapReduce代码,现在几行SQL就可以搞定。不过hive毕竟不是数据库,其使用还是有一些独门绝技的。比如避免数据倾斜,比如设置合理的内存分片,比如udf的使用等等。只是如果你理解了SQL的语法,就写不好hive,还是需要在里面做一些-深入了解。Spark说到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的余地。毕竟数据量太大,放在内存中是存不下的。必须借助大数据计算平台来解决。好了,就这些了,感谢阅读。本文转载自微信公众号“码农”,可通过以下二维码关注。转载本文请联系编码员梁公众号。
