Hadoop 2.X HDFS源码剖析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

今天Hadoop已经成为大数据处理中十分重要的平台,一个以Hadoop为基础的活跃的开源生态圈已经逐步形成,Hadoop的应用也由最初的互联网行业发展到金融行业、电信行业、IT设备商以及数以万计的中小企业。Hadoop的HDFS组件(Hadoop分布式文件系统)以及MapReduce组件分别为上层框架提供了分布式存储和计算的能力。

HDFS作为Hadoop中解决分布式存储的基础组件,最早是根据GFS(Google File System)论文的概念模型来设计实现的。然而,随着HDFS上层框架的丰富以及应用场景的扩展,用户对HDFS的功能、性能、稳定性、扩展性以及可靠性的要求越来越高,HDFS 2.X版本也就应运而生。相对于HDFS 1.X,HDFS 2.X版本提出了很多振奋人心的新特性,如Namenode HA、Federation Namenode、集中式缓存、快照等。但令人惋惜的是,至今还没有一本能够深入剖析HDFS 2.X内部实现细节,以及介绍HDFS 2.X新特性的书籍。本书的出现填补了上述空白,它是国内第一本深入剖析HDFS 2.X源码实现的书籍。

本书以Hadoop 2.6.0源码为基础,深入剖析了HDFS 2.X中各个模块的实现细节,包括RPC框架实现、Namenode实现、Datanode实现以及HDFS客户端实现等。阅读本书可以帮助读者从架构设计与源码实现角度了解HDFS 2.X,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧以及编程规范等。这些对于读者全面提高自己的技术水平有很大的帮助。

如何阅读本书

由于篇幅原因,本书并没有介绍HDFS实现中的一些基础知识,例如Java NIO、动态代理、protobuf等。而是直接切入源码分析HDFS的设计与实现,同时介绍了一些经典的设计模式、Java语言技巧在HDFS实现中的应用。希望读者在阅读本书之前,先搭建好源码环境,并了解相应的基础知识,这样学习效果会更好。

本书一共有5章,相互之间的联系比较紧密,有联系的小节都有注释标注,读者可以根据注释跳跃阅读。

第1章是HDFS概述,从总体上介绍了HDFS的组件、概念以及典型的流程,同时详细介绍了HDFS各个组件间RPC接口的定义。由于HDFS流程大都比较复杂,往往涉及多个组件的配合,读者在阅读后续的具体章节时,可以查阅本章内容获取某个流程的总体描述,以及RPC接口的具体定义。

第2章介绍了Hadoop RPC框架的实现,Hadoop RPC是HDFS各个组件间通信所依赖的底层框架,可以理解为HDFS的神经系统。通过阅读本章,读者可以学习到一个典型的分布式RPC框架的实现细节,在本章中会介绍较多的设计模式,编程模型以及语言技巧,请读者注重积累。

第3~5章分别介绍了Namenode、Datanode以及HDFS客户端这三个组件的实现细节,同时穿插介绍了HDFS 2.X的新特性,例如Namenode HA就放在Namenode章介绍,而Federation Namenode新特性对Datanode的修改比较多,所以就放在Datanode章介绍。

读者在阅读本书的过程中,如果发现有任何不当之处,烦请您将意见和建议发往邮箱xupeng.bupt@gmail.com,不胜感激。

本书代码

本书分析的代码版本为Hadoop 2.6.0,书中部分较长的代码做了省略,完整的代码请从官网http://hadoop.apache.org下载。

致谢

感谢互联网,感谢开源软件,感谢Hadoop社区,感谢本书引用文献的所有原作者,是你们为Hadoop爱好者打开了一扇大门。

感谢电子工业出版社博文视点的张春雨老师,是您的信任使得这本书的出版成为可能。同时还要感谢许多我不知道名字的编辑为本书最终出版所做的付出和努力。

感谢丁雷在百忙之中抽出时间对本书提出许多建设性意见,同时感谢左谱军、张德阳、闫飞翔以及张涛对本书的审阅。

2015年写这本书时正是自己很困难的一段时期,我很感恩有许多朋友在生活、工作上给我帮助以及包容。感谢吴佳宁、刘文博,你们一直是第一个伸出援手的哥们。感谢郑晓彤、袁玮、贺子昂、李强、和紫东、刘丹、何一舟为我引荐机会,谢谢你们。

特别感谢远见,书的撰写过程是如此漫长,是你在这段时间里把自信、阳光和快乐传播给我,让我更加积极、勇敢和有信心。没有你,这本书永远无法完成。

最后感谢我的父母和妹妹,谢谢你们默默为我做出的牺牲和付出,你们永远是我前进的动力。