Hadoop、spark、hive到底是什么,做算法要不要学?

作者 | 梁唐

出品 | 公众号:Coder梁(ID:Coder_LT)

大家好,我是梁唐。

最近我发现,很多萌新说着想要做算法工程师,但是却对这个岗位的要求以及工作内容一无所知。以为学一个Python,再学一些机器学习、深度学习的模型就可以胜任了。工作就是用Python不停地写模型。

显然,这样的想法是有问题的,如果真这么干,即使通过了面试成功入职,也会干得非常痛苦。因为你会发现这也不知道那也不知道,做啥都很吃力,需要一段很长的时间学习。而这种为了应付工作临时抱佛脚的学习往往很难深入,有种不停打补丁的感觉。

今天就和大家聊聊算法工程师的几项基本功,看看除了算法和模型之外,还需要学些什么。

hadoop

首先当然是hadoop,不过hadoop不是一门技术,而是一个大数据框架。它的logo是一只黄色的小象,据说是这个项目的创建者用女儿的玩具命名的。

经过了很多年的发展,现在hadoop框架已经非常成熟,衍生出了一个庞大的家族。有多庞大呢,我在google里给大家找了一张图,大家可以看看感受一下,这里面有多少是自己知道的,有多少没听说过。

当然对于算法工程师来说,hadoop家族并不需要全部了解,只需要着重关注几个就可以了。

hdfs

首先是hdfs,hdfs是hadoop框架中的分布式文件系统。因为在工业场景当中,数据量是非常庞大的,动辄TB甚至是PB量级。如此庞大的数据,显然不可能存在一块磁盘里,必须要分布式存储,分成不同的部分,不同的部分分开存储。通过hdfs我们可以很方便地实现这一点,可以使用一些简单的shell命令管理大规模的数据。

hdfs的内部是分片(block)存储的,并且设计了严谨的容错机制,尽可能地保证了数据的准确性。一般我们用hdfs存储一些离线数据,也就是对延迟要求不高的数据,比如模型的训练数据。它的特点是存储能力很强,但是读取速度很慢,中间的延迟很长。

因为训练数据的规模往往也非常庞大,并且从用户线上的实时行为转化成模型需要的输入,中间需要大量的计算步骤。这会带来巨大的计算压力,因此对于这样的数据,我们往往都是借助于hdfs做离线处理。设计一套数据处理流程,进行若干步骤的处理,每一步处理的中间数据都存储在hdfs上。

模型训练的时候,也通过挂载hdfs的方式直接读取tensor进行训练。

MapReduce

hdfs是hadoop的存储系统,hadoop同样也推出过一套计算系统,就是MapReduce。

我在之前的文章曾经介绍过MapReduce的原理,其实非常简单,它将数据的计算过程抽象成了两个步骤。一个步骤叫map,一个步骤叫reduce。

map步骤做的数据的映射,比如我们从一个很大的json文件当中读取出我们想要的字段,在这个步骤当中,我们从json获得了几个字段。

reduce步骤做的是汇总,我们把刚刚map阶段得到的结果,按照我们的想法汇聚在一起,比如计算平均数、中位数等等。

这个想法巧妙的地方在于map和reduce都是可以分布式进行的,比如map阶段,我们可以对hdfs里的每一个文件都设置一个map读取文件进行处理。map阶段结束之后,我们也可以起多个reducer对map的结果进行加工,尽可能导致了整个过程都是并发进行的,也就保证了数据的处理速度。

虽然MapReduce的提出到现在已经十多年了,但仍然没有淘汰,还在很多场景当中广泛使用。

hive

hive也是hadoop家族核心的一员,它的思想也很巧妙,做了一件非常有利于程序员的事情。

使用hdfs以及MapReduce其实就足够应付几乎所有大数据计算的场景了,但是足够应付并不代表应付起来很舒服。有些场景使用起来就不是很顺手,比如说我们要把两份数据关联在一起,一份是用户点击数据,一份是商品数据,我们想要得到用户点过的商品信息。

你会发现使用MapReduce去做这样一件事情会非常蛋疼,要写很多代码。所以有人突发奇想,我们能不能利用hdfs以及MapReduce做一套好用一点的数据处理系统,比如说将数据全部格式化,然后像是数据库一样使用SQL来进行数据的查询和处理?于是就有了hive。

hive底层的运算框架就是MapReduce,只不过有了表结构之后,很多之前很复杂的操作被大大简化了。尤其是数据表之间的join、group by等操作,之前需要写大量MapReduce的代码,现在几行SQL就搞定了。

不过hive毕竟不是数据库,它的使用还是有一些它自己专属的奇淫技巧。比如说避免数据倾斜的情况,比如说设置合理的内存分片,比如说udf的使用等等。

只是懂SQL的语法是写不好hive的,多少还需要做一些深入的了解。

spark

说到spark相信很多同学也是久仰大名,它是一个非常著名的开源集群计算框架,也可以理解成一个分布式计算框架。

spark在MapReduce的基础上对MapReduce当中的一些问题进行了优化,比如MapReduce每次运算结束之后都会把数据存储在磁盘上,这会带来巨大的IO开销。

而spark使用了存储器内运算技术,可以尽量减少磁盘的写入。这其中的技术细节看不懂没有关系,我们只需要知道它的运算性能比MapReduce快很多就可以了,一般来说运算速度是MapReduce的十倍以上。并且spark原生支持hdfs,所以大部分公司都是使用hdfs做数据存储,spark来进行数据运算。

在hadoop推出了hive之后,spark也推出了自己的spark SQL。不过后来hive也支持使用spark作为计算引擎代替MapReduce了,这两者的性能上差异也就很小了,我个人还是更喜欢hive一点,毕竟写起来方便。

另外spark除了计算框架之外,当中也兼容了一些机器学习的库,比如MLlib,不过我没有用过,毕竟现在机器学习的时代都快结束了。很少再有使用场景了,大家感兴趣也可以了解一下。

总结

最后做一个简单的总结,总体上来说想要成为一名合格的算法工程师,hadoop、MapReduce、hive这些或多或少都需要有所了解。不说能够精通到原理级,但至少需要会用,大概知道里面怎么回事。

这也是工业界和实验室里的最大区别,毕竟学校里的实验数据量也不会很大,直接放在内存里就完事了。所以数据处理一般都是numpy + pandas什么的,但是在公司里,几乎没有pandas的用武之地,毕竟数据量太大了,不可能都放内存里,必须要借助大数据计算平台来解决。

好了,就说这么多吧,感谢大家的阅读。

(0)

相关推荐

  • 大数据开发之Hadoop生态6 大核心组件

    Hadoop 第一代分布式存储计算框架 Hadoop是一个分布式系统基础架构,由Apache基金会开发,它允许用户在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储.Ha ...

  • 大数据平台常用工具集介绍

    提起大数据,不得不提由IBM提出的关于大数据的5V特点:Volume(大量).Velocity(高速).Variety(多样).Value(低价值密度).Veracity(真实性),而对于大数据领域的 ...

  • 放弃一个人,到底应该怎么做!

    看那熟悉的字句,冷漠一个人的誓言,多少读懂,伤害一个人的情,唯一的错,唯一的思念,凋零来世的坎坷,缘散了,人走了,情断了. 爱恨两难,故事只是一种风景,爱慕是一种繁华,凋零是一种思念,喧闹的解释,藏着 ...

  • 行业观察:小程序热度这么高,到底该怎么做定位?

    诸葛君说:上周,诸葛io正式发布了<小程序运营实战指南>,截止到目前,共计通过20个互联网行业平台推送相关消息,推文累计阅读量将近10万,收到了20000多个有效邮箱申请获取这本手册. & ...

  • “旅游地图做得太漂亮了,到底是怎么做的”?分享我做地图的过程

    曾经,我和大家一样,对于自驾游线路一头雾水,想自驾西藏.新疆.川西.青海这些地方,然而实际上落实到线路真正该怎么走时,却如坠五里云雾. 直到一次偶然,我看到以下一幅图,恍然明白,原来成都自驾川藏线到西 ...

  • 中考一个月倒计时,我们到底该怎么做,才能做到有的放矢

    各个学校的中考模拟考试陆续公布成绩后 几家欢喜几家愁! 成绩好:学校抬分,分数虚高? 成绩差:学校压分,故弄玄虚? 成绩中:学不动,打击很大~ 都,都,都完全没有必要~ 成绩高低不是重点 继续有效的复 ...

  • 养老:在开干前,你想清楚了到底要怎么做吗?

    在写这个标题之前我犹豫了很久,之所以犹豫很久,是因为我更想表达的是:我认为我们做养老服务的更需要重视自己的价值观和经营理念. 先举一个例子吧: 我大概是在2012年的时候就给自己定位未来只往社区居家养 ...

  • 高端养老院我们到底要怎么做?

    这两年来越来越多的大企业开始涉足养老服务业,也有不少高端的养老机构出现在我们的城市里.不过有些意外的是这些高端机构的入住率似乎并不好,反而那些在我们眼里实在不怎么样的养老机构里往往一床难求. 但这也阻 ...

  • 神族清除计划!老祖宗黄帝到底为人族做了些什么。

    神族清除计划!老祖宗黄帝到底为人族做了些什么。

  • 十四五要来了,政府汇报PPT到底该怎么做?

    这些年,锐普为政府机关单位做了1700 的项目. 这里面有高级保密的军事项目.公安汇报项目,也有国家级进博会这种大项目. 我们曾连续7年为海安制作招商PPT,连续2年为安徽涡阳制作招商PPT,也曾把一 ...

  • 一个普通人想通过互联网赚钱,到底应该怎么做?

    大家好,我是黄宇风. 很多人都想在网上做个兼职,赚点零花钱,那么怎样才能赚到钱呢? 其实最重要的就是:坚持. 比如网赚圈有很多人专门搞培训,因为培训很赚钱呀. 但是,如果你也想搞培训,你得先问问自己: ...