首页 首页 大数据 大数据入门 查看内容

学习Hadoop,如何才能快速高效阅读hadoop源代码?

木马童年 2018-9-10 18:43 437 0

作为认真阅读过hadoop源代码的人,我个人觉得有必要跟大家分享一下这方面的体会。首先,必须要说,对于互联网工程师而言,不管hadoop源代码质量怎么样,是好还是差,我们都不得不看,别无选择,因为hadoop已逐渐成为 ...

u=3816555642,1911725485&fm=26&gp=0.jpg

作为认真阅读过hadoop源代码的人,我个人觉得有必要跟大家分享一下这方面的体会。

首先,必须要说,对于互联网工程师而言,不管hadoop源代码质量怎么样,是好还是差,我们都不得不看,别无选择,因为hadoop已逐渐成为大数据代名词,成为互联网公司的基础设施和软件,和传统的操作系统一样基础而又重要。另外,有人会问,对于只是使用hadoop的人,有没有必要学习hadoop源代码?这个取决于你个人的兴趣,追求和工作内容。一般而言,hadoop职位分别内核开发工程师(修改hadoop源代码,打patch,加feature等),hadoop运维工程师(遇到hadoop服务问题,比如namenode挂了,主备切换失败,可以采取相应的措施快速解决),hadoop应用开发工程师(在hadoop基础上写一些app,比如写HQL生成报表,写一些数据挖掘算法等),对于前两个岗位,如果你是一个有追求的工程师的话,需要好好看源代码,尤其是运维工程师,不能仅仅依赖于搜索引擎和各种杂七杂八的文档,因为hadoop的很多东西,比如参数配置(hadoop中有几百个配置参数),跟hadoop版本相关,而hadoop版本迭代和发布频繁,很多文档和论坛里的帖子已经失效而无法及时更新,因此,一味的依赖这种二手资料,只会让你浪费更多时间。 这时候,最好的方式是查看源代码,找到相关的类,看一下怎么实现的,问题可以马上解决。你可以把hadoop源代码看成一本巨大的参考手册,遇到问题,就翻到能够给你带来答案的“页”中。

====================== hadoop源代码 ======================

理解了相关背景后,接下来聊聊hadoop源代码质量。

Hadoop源代码质量绝对是开源软件中的佼佼者,从代码规范,到代码组织,再到代码实现技巧。这一点,可以与各种杂七杂八的公司自己开发的软件作对比(提一点,即使是非常有名的公司,挂在自己名下的开源软件代码质量也不高,比如facebook的presto,比如linkedin的azkaban等,提高代码质量和发动更多人关注这些软件,最好的方式是加入apache基金会,成为它的顶级项目),很容易得知。hadoop专门的基金会组织管理和运营,有一整套完善的项目管理流程。可以这么说,如果你把hadoop源代码学到精通,那么学习其他开源软件,尤其是分布式系统,绝对是小case,另外,对你自己从头写一个分布式系统也有巨大帮助。

hadoop源代码中包含着很多有价值的,可以借鉴和学习的宝贵经验,比如:

(1)如果自己实现一个高效的RPC框架(hadoop自己实现了一个RPC框架,这个框架由HDFS,MAPREDUCE,YARN和HBASE公用)

(2)如何对单点的服务实现leader election(包括HDFS,YARN,HBase等都存在单点故障问题,均采用zookeeper实现了准备切换)

(3)如何实现一个分布式存储系统和分布式计算引擎

(4)如何设计一个极简且抽象度高的编程API(记得MapReduce刚刚发布时,很多公司对外公布说,自己公司内部早就有了类似于mapreduce的框架,一直在用。但mapreduce成熟之后,所有公司都弃掉了自己的框架,转而采用hadoop mapreduce,主要原因是他们的框架抽象度不高,使用起来比较麻烦。虽然现在大家使用mapreduce觉得这玩意非常简单,但是这是高度抽象后去繁留简的结果,如果你自己做一个分布式计算框架,能设计出这么精简的编程模型和编程API吗)

====================== hadoop现状 ======================

需要注意的是,hadoop从第一个原型开始,到现在已经有10年左右的时间。目前hadoop代码庞大,学习起来越来越困难,这个跟linux内核发展史差不多。由于hadoop源代码是很多人贡献的,里面多多少少存在代码冗余,且个别功能点的实现比较令人费解。此外,一些hadoop公司的的出现,比如cloudera,hortonworks(已经上市),使得hadoop更新频率越来越快,这些公司的绝大部分工程师每天的任务就是为hadoop贡献代码,全部贡献给社区,这推进了hadoop快速发展,但同时使得Hadoop学习成本越来越大,很多中小型公司无法找到合适的技术人员,不得不反过来向这些hadoop公司求助,给他们交比较昂贵的咨询费用。

现在每一行hadoop源代码的提交均要经过很多人的review,从代码规范到实现方式上,都会有很多人在jira(Hadoop YARN - ASF JIRA)上提出各种意见,估计要改上好几遍才可能被merge到主干上,整个流程很低效,但是这样可使hadoop源代码保持很高的水准。

尽管hadoop源代码非常庞大,但仍存在一些非常高效的阅读方式和技巧,但这个话题不是关于如何高效阅读hadoop源代码的,所有就不在这里回答了。

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

Hadoop 大数据 基础设施 操作系统 数据挖掘
0
为您推荐
什么样的人才是大数据人才呢?我们应该怎么定义和分类?

什么样的人才是大数据人才呢?我们应该怎么定义和分类

在未来世界,国家之间、区域之间甚至是公司之间的大数据人才的争夺战,将是愈演愈烈的…...

数据科学,数据分析和机器学习之间,有什么本质区别?

数据科学,数据分析和机器学习之间,有什么本质区别?

我们都知道机器学习,数据科学和数据分析是未来的发展方向。有些公司不仅利用大数据帮…...

大数据现在处于什么阶段,入行大数据,需要学习哪些基础知识?

大数据现在处于什么阶段,入行大数据,需要学习哪些基

大数据的发展历程总体上可以划分为三个重要阶段,萌芽期、成熟期和大规模应用期…...

大数据技术怎么学习,在学习大数据之前,需要具备什么基础?

大数据技术怎么学习,在学习大数据之前,需要具备什么

  大数据又称黑暗数据,是指人脑无法处理的海量数据聚合成的信息资产,在民生、IT、…...

对于大数据开发的学习,最经典的学习路线是什么?

对于大数据开发的学习,最经典的学习路线是什么?

对于现代社会,大数据开发的重要性不言而喻,通过大量的数据处理、分析获取有价值的信…...

大数据时代,主要需要什么类型的人才?

大数据时代,主要需要什么类型的人才?

什么是大数据,大数据是主要指的是,无法在可承受的时间范围内用常规软件工具进行捕捉…...