怎样才能高效阅读Hadoop源代码

我的谈谈阅读hadoop源代码的经验。首先,不得不说,Hadoop发展到如今这个阶段,代码已经变得很是庞大臃肿,若是你直接阅读最新版本的源代码,难度比较大,须要足够的耐心和时间,因此,若是你以为认真一次,认真阅读一次hadoop源代码,必定要有足够的心理准备和时间预期。
其次,须要注意,阅读Hadoop源代码的效率,因人而异,若是你有足够的分布式系统知识储备,看过相似的系统,则可以很快地读它的源代码进行通读,并快速切入你最关注的局部细节,好比你以前看过某个分布式数据库的源代码,对分布式系统的网络通讯模块,调度模块等有必定了解,这对阅读hadoop源代码有极大帮助;若是你是一个初学者,对hadoop一无所知,只了解一些Java语法,那阅读hadoop源代码是极具挑战的一件事情,尤为是从无到开始入门的过程,是极度煎熬和困惑的,这时候须要你在阅读代码过程当中,不断补充缺少的相关知识(好比RPC,NIO,设计模式等),按部就班,直到入门。
接下来进入主题,说一下阅读源代码的我的经验。因为我也是从无到入门,再到修改源代码,逐步过渡的,因此,对于不少人而言,具备借鉴意义。
第一个阶段:学习hadoop基本使用和基本原理,从应用角度对hadoop进行了解和学习
这是第一个阶段,你开始尝试使用hadoop,从应用层面,对hadoop有必定了解,好比你可使用hadoop shell对hdfs进行操做,使用hdfs API编写一些程序上传,下载文件;使用MapReduce API编写一个数据处理程序。一旦你对hadoop的基本使用方法比较熟悉了,接下来能够尝试了解它的内部原理,注意,不须要经过阅读源代码了解内部原理,只需看一些博客,对于HDFS而言,你应该知道它的基本架构以及各个模块的功能;对于MapReduce而言,你应该知道其具体的工做流程,知道partition,shuffle,sort等工做原理,能够本身在纸上完整个画完mapreduce的流程,越详细越好。
若是你有实际项目驱动,那是再好不过了,理论联系实际是最好的hadoop学习方法;若是你没有项目驱动,那建议你不要本身一我的闷头学,多跟别人交流,多主动给别人讲讲,最好的学习方式仍是“讲给别人听”。
第二个阶段:从无到入门,开始阅读hadoop源代码
这个阶段是最困苦和漫长的,尤为对于那些没有任何分布式经验的人。 不少人这个阶段没有走完,就放弃了,最后停留在hadoop应用层面。
这个阶段,第一件要作的事情是,选择一个hadoop组件。若是你对分布式存储感兴趣,那么你能够选择HDFS,若是你读分布式计算感兴趣,你能够选择MapReduce,若是你对资源管理系统感兴趣,你能够选择YARN。
选择好系统后,接下来的经历是最困苦的。当你把hadoop源代码导入eclipse或intellij idea,沏上一杯茶,开始准备优哉游哉地看hadoop源代码时,你懵逼了:你展开那数不尽的package和class,以为无从下手,好不容易找到了入口点,而后你屁颠屁颠地经过eclipse的查找引用功能,顺着类的调用关系一层层找下去,最后迷失在了代码的海洋中,如同你在不尽的压栈,最后栈溢出了,你忘记在最初的位置。不少人经历过上面的过程,最后没有顺利逃出来,而放弃。
若是你正在经历这个过程,个人经验以下:首先,你要摸清hadoop的代码模块,知道client,master,slave各自对应的模块(hadoop中核心系统都是master/slave架构,很是相似),并在阅读源代码过程当中,时刻谨记你当前阅读的代码属于哪个模块,会在哪一个组件中执行;以后你须要摸清各个组件的交互协议,也就是分布式中的RPC,这是hadoop本身实现的,你须要对hadoop RPC的使用方式有所了解,而后看各模块间的RPC protocol,到此,你把握了系统的骨架,这是接下来阅读源代码的基础;接着,你要选择一个模块开始阅读,我通常会选择Client,这个模块相对简单些,会给本身增长信心,为了在阅读代码过程当中,不至于迷失本身,建议在纸上画出类的调用关系,边看边画,我记得我阅读hadoop源代码时,花了一叠纸。注意,看源代码过程当中,很容易烦躁不安,建议常常起来走走,不要把本身逼得太紧。
在这个阶段,建议你们多看一些源代码分析博客和书籍,借助这些博客和书籍,你能够在前人的帮助下,更快地学习hadoop源代码,节省大量时间,注意,目前博客和书籍不少,建议你们普遍收集资料,找出最适合本身的参考资料。
这个阶段最终达到的目的,是对hadoop源代码总体架构和局部的不少细节,有了必定的了解。好比你知道MapReduce Scheduler是怎样实现的,MapReduce shuffle过程当中,map端作了哪些事情,reduce端作了哪些事情,是如何实现的,等等。这个阶段完成后,当你遇到问题或者困惑点时,能够迅速地在Hadoop源代码中定位相关的类和具体的函数,经过阅读源代码解决问题,这时候,hadoop源代码变成了你解决问题的参考书。
第三个阶段:根据需求,修改源代码。
这个阶段,是验证你阅读源代码成效的时候。你根据leader给你的需求,修改相关代码完成功能模块的开发。在修改源代码过程当中,你发现以前阅读源代码仍过于粗糙,这时候你再进一步深刻阅读相关代码,弥补第二个阶段中薄弱的部分。固然,不少人不须要经历第三个阶段,仅仅第二阶段就够了:一来可以经过阅读代码解决本身长久以来的技术困惑,知足本身的好奇心,二来从根源上解决解决本身遇到的各类问题。 这个阶段,没有太多的参考书籍或者博客,多跟周围的同事交流,经过代码review和测试,证实本身的正确性。
阅读hadoop源代码的目的不必定非是工做的须要,你能够把他当作一种修养,经过阅读hadoop源代码,加深本身对分布式系统的理解,培养本身踏实作事的心态。
 shell

相关文章
相关标签/搜索