
前言
为什么写本书
互联网使得信息的采集、传播速度和规模达到空前的水平,实现了全球的信息共享与交互,它已经成为信息社会必不可少的基础设施,同时也带来了多方面的新挑战。2003年,Google发表了《Google File System》,介绍了Google海量数据处理使用的文件系统,使互联网时代的数据存储发生了革命性的变化。而Doug Cutting等人在Nutch项目上应用GFS和MapReduce思想,并演化为Hadoop项目,经过多年的发展,最终形成了包含多个相关项目的软件生态系统,开创了海量数据处理的新局面。
Hadoop正是为了解决互联网时代的海量数据存储和处理而设计、开发的。简单地讲,Hadoop是一个可以更容易开发和并行处理大规模数据的分布式计算平台,它的主要特点是:扩展能力强、成本低、高效率、可靠。目前,Hadoop的用户已经从传统的互联网公司,扩展到科学计算、电信行业、电力行业、生物行业以及金融公司,并得到越来越广泛的应用。
Hadoop作为一个优秀的开源项目,提供了一些文档和所有的源代码,但是,对于很多开发人员,仅仅通过一些简单的例子或教程学习使用Hadoop的基本功能是远远不够的。同时,随着云计算和大数据的发展,产业界正在经历一次重大变革,特别是基于云计算的海量数据处理,改变着我们思考的方式和习惯,开发者们越来越有必要去了解Hadoop的架构与设计原理。
本书从源代码的层面上对Hadoop的公共工具Common和Hadoop的分布式文件系统HDFS进行了介绍,帮助广大开发者从架构与设计原理的角度去理解Hadoop,从而为更好地使用和扩展Hadoop打下坚实的基础。同时,Hadoop是一个使用Java语言实现的优秀系统,从事Java和分布式计算相关技术的开发者们能从它的源码实现中看到许多优秀的设计思想、对各种设计模式的灵活运用、语言的使用技巧以及编程规范等。这些都有助于加深开发者们对Java相关技术,尤其是Hadoop的理解,从而提高自己的开发水平,拓展自己的技术视野,为工作带来帮助。
读者对象
□Hadoop开发人员
对这部分读者来说,本书的内容能够帮助他们加深对Hadoop的理解,通过全面了解Hadoop,特别是HDFS的实现原理,为进一步优化、定制和扩展Hadoop提供坚实基础。
□学习分布式技术的读者
Hadoop是一个得到广泛应用的大型分布式系统,开放的源代码中包含了大量分布式系统设计原理和实现,读者可以通过本书,充分学习、体验和实践分布式技术。
□学习Java语言的中高级读者
Hadoop使用Java语言实现,它充分利用了Java的语言特性,并使用了大量的标准库和开源工具,很多功能的设计和实现非常优秀,是极佳的学习Java技术的参考资料。
本书的主要内容
本书主要分为三个部分。
第一部分(第1章)对如何建立Hadoop的开发、分析环境做了简单的介绍。对于Hadoop这样复杂、庞大的项目,一个好的开发环境可以让读者事半功倍地学习、研究源代码。
第二部分(第2~5章)主要对Hadoop公共工具Common的实现进行研究。分别介绍了Hadoop的配置系统、面向海量数据处理的序列化和压缩机制、Hadoop使用的远程过程调用,以及满足Hadoop上各类应用访问数据的Hadoop抽象文件系统和部分具体文件系统。
第三部分(第6~9章)对Hadoop分布式文件系统进行了详细的分析。这部分内容采用总—分—总的结构,第6章介绍了HDFS各个实体和实体间接口,第7章和第8章分别详细地研究了数据节点和名字节点的实现原理,第9章通过对客户端的解析,回顾HDFS各节点间的配合,完整地介绍了一个大规模数据存储系统的实现。
通过本书,读者不仅能全面了解Hadoop的优秀架构和设计思想,而且还能从Hadoop,特别是HDFS的实现源码中一窥Java开发的精髓和分布式系统的精要。
勘误和支持
由于作者的水平有限,编写时间跨度较长,同时开源软件的演化较快,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果大家有和本书相关的内容需要探讨,或有更多的宝贵意见,欢迎通过caibinbupt@qq.com和我们联系,希望能结识更多的朋友,大家共同进步。书中的源代码文件可以从华章网站下载。
致谢
感谢机械工业出版社华章公司的编辑杨福川和白宇,杨老师的耐心和支持让本书最终得以出版,白老师的很多建议使本书的可读性更强。
感谢腾讯数据平台部的张文郁、赵重庆和徐钊,作为本书的第一批读者和Hadoop专家,他们的反馈意见让本书增色不少。
感谢和我们一起工作、研究和应用Hadoop的腾讯数据平台部,以及IBM中国研究中心和中山大学的领导和同事们,本书的很多内容是对实际项目的总结。
最后,作者向支持本书写作的家人深表谢意,感谢他们的耐心和理解。