前言
我们处于一个数据大爆炸的时代。每时每刻、各行各业都在产生和积累海量的数据内容。这些数据中蕴含着进行业务活动、获取商业信息、做出管理决策的重要信息。如何处理这些数据并获取有价值的信息,是众多组织和单位面临的共同问题。而这个问题的解决又依赖两项技术,一是能够对产生的业务数据进行统一管理和综合,并且能够无限扩展存储空间;二是能够有效处理获得的海量数据,在限定时间内获得处理结果的处理程序。
因此,寻求一个合理可靠的大数据处理决方案是目前数据处理的热点与重点。很多行业领导者把对大数据的处理看成互联网之后又一个能够获得竞争优势的关键性因素,把大数据处理能力作为其核心商业竞争力加以发展。这更凸显了大数据的战略意义。
为什么要写本书
Hadoop作为应用范围最为广泛的大数据处理开源框架自然引起了广泛的关注,吸引了大量程序设计和开发人员进行相关内容的开发与学习。掌握Hadoop程序设计基本技能的程序设计人员成为当前各组织和单位热切追求的最热门人才。他们的主要工作就是利用存储和管理产生的海量数据编写相应的MapReduce程序对大数据进行处理,提取大数据中包含的潜在信息,进行数据资源的管理和对其价值进行进一步开发,为商业机会的获取、管理模式的创新、决策的制定提供相应的支持。随着越来越多的组织、单位和行业对大数据挖掘的重视,高层次的程序设计人才必将成为就业市场上抢手和紧俏的人才。
对Hadoop的掌握以掌握MapReduce程序设计为首要内容。但是由于国内翻译和知识传播的滞后性等多方面的原因,目前国内所有的关于MapReduce程序设计方面的书籍采用的依然是已经被 Hadoop 框架明确放弃使用的 MapReduce 1.0 的程序代码,缺少新一代的MapReduce 2.0程序设计的相关内容,从而造成了知识的延迟性。学习是为了掌握新知识获得新能力,不应该学习已经被摒弃的内容。
本书是为了满足广大MapReduce程序设计和开发人员学习最新的MapReduce 2.0的程序代码的要求而出版的。本书对MapReduce 2.0的组成结构与核心部分代码作了循序渐进的介绍与说明,以MapReduce 2.0源程序代码为依托,从最底层开始介绍了新一代的MapReduce 2.0程序设计模式,多角度、多方面地对MapReduce 2.0的源码和功能实现提供了翔实的分析,并结合实际案例编写了大量的应用程序设计,使得读者能够在开发者的层面掌握 MapReduce 2.0程序的设计方法和技巧,为开发出更强大的MapReduce 2.0应用打下扎实的基础。
本书的优势
本书并非单纯理论的讲解,而是笔者阅读和参考了大量最新文献作出的归纳总结,通过通俗易懂的语言对全部内容进行讲解,深入浅出地介绍了MapReduce 2.0理论体系的全部知识点,并在程序编写时使用官方推荐的最新MapReduce 2.0的新型API进行程序设计,摒弃了已经被明确放弃使用的MapReduce 1.0程序设计方法,这也是Hadoop程序设计的大势所趋。
本书通过深入分析MapReduce 2.0源码,从源头向读者展示了MapReduce 2.0程序设计的优雅,在此基础上进行相应代码的开发,更好地帮助读者理解和掌握MapReduce 2.0程序设计的精妙之处。
作者认为,大数据处理和分析人才应在掌握基本知识和理论的基础上,重视实际应用程序开发能力和解决问题能力的培养。因此,本书结合作者在实际工作中遇到的大量实际案例进行分析,抽象化核心模型并给出具体解决方案,全部程序例题均提供了相应代码供读者学习。
本书有什么内容
本书共分为 10章,所有代码均采用MapReduce 2.0版本。如果不作特别说明,本书所有MapReduce都指MapReduce 2.0。
第1章介绍了Hadoop的基础知识,初步介绍了其应用范围,旨在说明使用Hadoop对“大数据”进行处理是目前数据处理的方向,也是必然趋势,同时向读者展示了Hadoop能为使用者带来的解决方案和应用效果。
第2章介绍了HDFS概念、架构,说明了HDFS存储海量数据和对数据进行备份的方法,并通过多条程序代码说明了使用MapReduce 2.0自带的API进行编程的方法。读者在学习完第2章后可以使用提供的相关API进行针对HDFS的程序设计。
第3章全面介绍了MapReduce的基本IO系统,介绍了其数据传输压缩格式以及基本数据类型。通过源码分析向读者透彻而准确地展示了其基本数据结构的构成与应用方式,为实现自定义的MapReduce数据类型打下扎实的基础。同时,书中代码很好地演示了如何在自定义数据类型的基础上提供进阶比较方法的程序设计,为后文对数据排序提供帮助。
第4章开始进入MapReduce编程部分,也是本书核心内容的开始。该章详细介绍了MapReduce 的程序设计框架结构,从输入开始,循序渐进地介绍了各个部分处理过程,对核心源码展开分析,从专业开发者的视角向读者剖析了MapReduce运行框架结构,通过大量代码进行演示,为源码分析提供佐证,并将输入输出和运行分成若干部分进行详细讲解。在学完第4章后,读者可以编写一个简单的MapReduce数据处理程序。
第5章是对MapReduce测试方法的介绍,首先介绍了基于传统JUnit的MRUnit测试方法;其次着重讲解了基于本地系统的模拟集群环境的测试方法;最后向读者演示了将程序上传集群进行测试的方法。通过编写实例程序讲解了对集群环境下输出信息归类和整理的方法,以及通过Web接口查看最终内容的方法。
第6章介绍了MapReduce的运行流程,讲解了经典的MapReduce运行流程和新一代的YARN(MapReduce 2.0)运行流程,从加载任务的初始化开始,循序渐进地介绍了各部分运行流程和数据处理的方法,最后对异常结果的处理作了分析和总结。
第7章通过划分多个小节内容向读者介绍了MapReduce的高级程序设计内容。此部分主要是程序代码设计内容,旨在教会读者编写自定义的输入输出格式,并通过分析源码实现MapReduce程序设计中所涉及的必不可少的自定义输入输出格式的设计。
第8章介绍了更多MapReduce程序设计的细节和处理方法,从而能够实现更多的程序功能。从计数器开始到对输出值进行排序和查找,无一不是MapReduce程序设计的重要功能和应用。此部分对每个小细节都采用了大量的实例程序作为支撑,从而向读者解释和传授MapReduce程序设计的精髓。
第9章是展望内容,演示了使用 MapReduce 进行数据集之间连接处理的方法,说明MapReduce 不仅可以作为一个数据处理程序,同时还可以作为大数据挖掘的解决方案。此章的最后介绍了数据挖掘中最常用的Apriori的MapReduce程序设计解决方案。
最后一章通过大量的实例程序从多个角度向读者展示了 MapReduce 程序开发的实际案例。其中,“云存储模型”是现在最热点的存储解决方案;多文档关键字的提取和排序是目前文献程序开发中必不可少的应用;寻找共同转载微博是互联网应用热点;从数据库读取数据给读者一个完整的从现有数据库读取数据并进行处理的解决方案;学生成绩排序可作为毕业设计的一项思路。这些都是目前的MapReduce程序设计学习热点和研究重点。
本书适合人群
本书适合于学习MapReduce 2.0源码、MapReduce 2.0程序设计、数据挖掘、机器学习等相关内容的程序设计人员,也可以作为高等院校相关专业的教材。建议在学习本书内容的过程中,理论联系实际,独立进行一些代码的编写,采取开放式的实验方法,即读者自行准备实验数据和实验环境,解决实际问题,最终达到理论联系实际的目的。在学习过程中可以查看第10章相关内容进行学习。
本书作者现任计算机专业讲师,担负数据挖掘、Java 程序设计、数据结构等多项本科及研究生课程,研究方向为数据仓库与数据挖掘、人工智能、机器学习,在研和参研多项科研项目。本书在写作过程中得到了家人们的大力支持,在此对他们表示感谢。
由于编写水平有限,加之编写时间仓促,疏漏之处在所难免,欢迎广大读者批评指正。
王晓华
2013年6月