Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书)-董西成著
在线阅读 百度网盘下载(ihhy)
书名:Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书)
作者:董西成著
格式:EPUB, HTMLZ, PDF
路径:点击打开
出版:机械工业出版社
排序作者:董西成著
排序书名:Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书)
日期:08 12月 2018
uuid:95f0678a-bb37-488a-9800-cfbb94b5470d
id:462
出版日期:5月 2013
修改日期:08 12月 2018
大小:12.28MB
语言:中文
如何阅读本书
本书分为四大部分(不包括附录):
第一部分为基础篇,简单地介绍Hadoop的阅读环境搭建和基本设计架构,帮助读者了解一些基础背景知识。
第二部分为MapReduce编程模型篇,着重讲解MapReduce编程接口,主要包括两套编程接口,分别是旧API和新API。
第三部分为MapReduce核心设计篇,主要讲解Hadoop MapReduce的运行时环境,包括RPC框架、客户端、JobTracker、TaskTracker和Task等内部实现细节。
第四部分为MapReduce高级篇,主要讲解Hadoop MapReduce中的一些高级特性和未来发展趋势,包括多用户作业调度器、安全机制和下一代MapReduce框架等。
另外,本书最后还添加了几个附录:附录A为安装Hadoop过程中可能存在的问题及解决方案;附录B为Hadoop默认HTTP端口号以及HTTP地址。参考资料中包括了本书写作过程中参考的书籍、论文、Hadoop Jira和网络资源。
如果你是一名经验丰富的资深用户,能够理解Hadoop的相关基础知识和使用技巧,那么你可以直接阅读第三部分和第四部分。但是,如果你是一名初学者,请一定从第1章的基础理论知识开始学习。
读者对象
(1)Hadoop二次开发人员
Hadoop由于在扩展性、容错性和稳定性等方面的诸多优点,已被越来越多的公司采用。而为了减少开发成本,大部分公司在Hadoop基础上进行了二次开发,以打造属于公司内部的Hadoop平台。对于Hadoop二次开发人员来说,深入而又全面地了解Hadoop的设计原理与实现细节是修改Hadoop内核的前提,而本书可帮助这部分读者快速而又全面地了解Hadoop实现细节。
(2)Hadoop应用开发人员
如果要利用Hadoop进行高级应用开发,仅掌握Hadoop基本使用方法是远远不够的,必须对Hadoop框架的设计原理、架构和运作机制有一定的了解。对这部分读者而言,本书将带领他们全面了解Hadoop的设计和实现原理,加深对Hadoop框架的理解,提高开发水平,从而编写出更加高效的MapReduce应用程序。
(3)Hadoop运维工程师
对于一名合格的Hadoop运维工程师而言,适当地了解Hadoop框架的设计原理、架构和运作机制是十分有帮助的。这不仅可以使Hadoop运维人员更快地排除各种可能的Hadoop故障,还可以让Hadoop运维人员与研发人员进行更有效的沟通。通过阅读这本书,Hadoop运维人员可以了解到很多其他书中无法获取的Hadoop实现细节。
(4)开源软件爱好者
Hadoop是开源软件中的佼佼者。它在实现的过程中吸收了很多开源领域的优秀思想,同时有很多值得学习的创新。尤为值得一提的是,本书分析Hadoop架构设计和实现原理的方式也许值得所有开源软件爱好者学习和借鉴。通过阅读本书,这部分读者不仅能领略到开源软件的优秀思想,还可以掌握分析开源软件源代码的方法和技巧,从而进一步提高使用开源软件的效率和质量。
1.7 小结
搭建一个高效的源代码学习环境是深入学习Hadoop的良好开端,本章主要内容正是帮助读者搭建一个这样的学习环境。在作者看来,一个高效的Hadoop学习环境至少应该包括源代码阅读环境、Hadoop使用环境和源代码编译调试环境,而本章正是围绕这三个环境的搭建方法编写的。
本章首先分别介绍了在Linux和Windows环境下搭建Hadoop源代码阅读环境的方法;在此基础上,进一步介绍了Hadoop的基本使用方法,主要涉及Hadoop Shell和Eclipse插件两种工具的使用;最后介绍了Hadoop源代码编译和调试方法,其中,调试方法主要介绍了使用Eclipse远程调试和打印调试日志两种。
2.6 小结
Hadoop MapReduce直接诞生于搜索领域,以易于编程、良好的扩展性和高容错性为设计目标。它主要由两部分组成:编程模型和运行时环境。其中,编程模型为用户提供了5个可编程组件,分别是InputFormat、Mapper、Partitioner、Reducer和OutputFormat;运行时环境则将用户的MapReduce程序部署到集群的各个节点上,并通过各种机制保证其成功运行。
Hadoop MapReduce处理的数据一般位于底层分布式文件系统中。该系统往往将用户的文件切分成若干个固定大小的block存储到不同节点上。默认情况下,MapReduce的每个Task处理一个block。MapReduce主要由四个组件构成,分别是Client、JobTracker、TaskTracker和Task,它们共同保障一个作业的成功运行。一个MapReduce作业的运行周期是,先在Client端被提交到JobTracker上,然后由JobTracker将作业分解成若干个Task,并对这些Task进行调度和监控,以保障这些程序运行成功,而TaskTracker则启动JobTracker发来的Task,并向JobTracker汇报这些Task的运行状态和本节点上资源的使用情况。
3.6 小结
MapReduce编程模型直接决定了MapReduce的易用性。本章从简单地使用实例、设计原理以及调用时机等方面介绍了MapReduce编程模型中的各个组件。
从整个体系结构上看,整个编程模型位于应用程序层和MapReduce执行器之间,可以分为两层:第一层是最基本的Java API,第二层构建于Java API之上,添加了几个方便用户编写复杂的MapReduce程序和利用其他语言编写MapReduce程序的工具。
Java API分为新旧两套API。新API在旧API基础上封装而来,在易用性和扩展性方面更好。
为了方便用户采用非Java语言编写MapReduce程序,Hadoop提供了Hadoop Streaming和Hadoop Pipes两个工具。它们本质上都是一个MapReduce作业,区别在于Java语言与非Java语言之间的通信机制。
考虑到实际应用中,用户有时不只是编写单一的MapReduce作业,而是存在复杂依赖关系的DAG作业(工作流),Hadoop MapReduce提供了JobControl和ChainMapper/ChainReducer两个工具。
4.5 小结
Hadoop RPC是Hadoop多个子系统公用的网络通信模块。其性能和可扩展性直接影响其上层系统的性能和可扩展性,因此扮演着极其重要的角色。
Hadoop RPC分为两层:上层是直接供外面使用的公共RPC接口;下层是一个客户机/服务器模型,该模型在实现过程中用到了Java自带的多个工具包,包括java.lang.reflect(反射机制和动态代理相关类)、java.net(网络编程库)和java.nio(NIO)等。
Hadoop RPC主要由三个大类组成,分别是RPC、Client和Server,分别对应对外编程接口、客户端实现和服务器端实现。其中,Server具有高性能和良好的可扩展性等特点,在具体实现时采用了线程池、事件驱动和Reactor设计模式等机制。
Hadoop MapReduce基于RPC框架实现了6个通信协议,分别是JobSubmissionsProtocol, RefreshUserMappingsProtocol, RefreshAuthorizationPolicyProtocol, AdminOperationsProtocol, InterTrackerProtocol和TaskUmbilicalProtocol。这些协议像是系统的“骨架”,支撑起整个MapReduce系统。
5.5 小结
作业提交与初始化过程是指从用户输入提交作业命令到作业初始化的整个过程。该过程涉及Hadoop三个非常重要的组件,即JobClient、JobTracker和TaskScheduler。
作业提交主要是为后续作业执行准备环境,涉及创建目录、上传文件等操作。
作业初始化的主要工作是根据输入数据量和作业配置参数将作业分解成若干个Map Task以及Reduce Task,并添加到相关数据结构中,以等待后续被调度执行。
Hadoop DistributedCache是Hadoop为方便用户进行应用程序开发而设计的数据分发工具。它能够将只读的大文件自动分发到各个节点上进行本地缓存,以便Task运行时加载使用。它将待分发的文件根据可见级别分为public级别和private级别两种。其中,public级别文件允许同一个TaskTracker上所有用户共享,而private级别文件只允许某个用户的所有作业共享。
作业在JobTracker端经初始化后,会被存放到相关数据结构中等待被调度执行。在下一章中,我们将重点分析JobTracker和任务调度的相关原理及实现。
6.8 小结
本章介绍了Hadoop MapReduce最核心的服务JobTracker的实现。
JobTracker是整个MapReduce计算框架中的主服务,相当于集群的“管理者”,负责整个集群的作业控制和资源管理。本章重点围绕这两个方面讲解JobTracker。
JobTracker启动过程涉及三个方面:重要对象初始化、工作线程初始化和作业恢复。启动之后,将开启RPC server以等待来自各个TaskTracker的心跳请求。
JobTracker的主要功能之一是作业控制,包括作业的分解和状态监控。其中,最重要的是状态监控,包括TaskTracker状态监控、作业状态监控和任务状态监控,其中,作业状态监控采用了“三层多叉树”模型,该模型分为三层,从高到低依次为JobInProgress、TaskInProgress和Task Attempt三种对象集合。状态监控的一个目的是容错,Hadoop设计了各个级别的容错机制,包括JobTracker容错、TaskTracker容错、Job/Task容错、Record容错和磁盘容错等。
JobTracker另外一个功能是资源管理,它由两部分组成:资源表示模型和资源分配模型。Hadoop采用了基于slot的资源表示模型,而资源分配模型实际上是任务调度模型,它由可插拔的任务调度器完成。当前大部分调度器采用了三级调度架构,即当一个TaskTracker出现空闲资源时,调度器会依次选择一个队列、(选中队列中的)作业和(选中作业中的)任务,并最终将这个任务分配给TaskTracker。本章以Hadoop默认的FIFO调度器为例讲解了一个简单调度器的实现原理。
7.7 小结
本章从TaskTracker架构、TasTracker行为、作业目录管理等几个方面深入分析了TaskTracker工作原理及其实现。
TaskTracker以服务的形式存在,通过心跳机制向JobTracker汇报任务运行状态,并索取来自JobTracker的各种命令。
TaskTracker收到的命令包括启动任务(LaunchTaskAction)、提交任务(CommitTaskAction)、杀死任务(KillTaskAction)、杀死作业(KillJobAction)和重新初始化(TaskTrackerReinitAction)五种。TaskTracker收到这些命令后,会按照要求执行相应的操作。
TaskTracker最重要的功能之一是启动新任务。一个任务的启动过程大体包括两步:作业本地化和任务启动。为了进行资源隔离,TaskTracker为每个任务启动独立的Java虚拟机。此外,TaskTracker启动了一个额外的内存监控进程以防止任务滥用内存资源。
总体上说,TaskTracker扮演着“通信枢纽”的角色,是JobTracker与Task之间的“沟通桥梁”。
至此,我们已经剖析了JobTracker和TaskTracker两个重要服务的实现。接下来,我们将介绍Task实现,包括Map Task和Reduce Task两种Task的内部实现细节。
8.6 小结
本章通过将任务进行阶段细分,详细介绍了Map Task和Reduce Task内部实现原理。
本章将Map Task分解成Read、Map、Collect、Spill和Combine五个阶段,并详细介绍了后三个阶段:map()函数处理完结果后,Map Task会将处理结果存放到一个内存缓冲区中(Collect阶段),待缓冲区使用率达到一定阈值后,再将数据溢写到磁盘上(Spill阶段),而当所有数据处理完后,Map Task会将磁盘上所有文件合并成一个大文件(Combine阶段)。
9.4 小结
Hadoop性能调优是一项工程浩大的工作。它不仅涉及Hadoop本身的性能调优,还涉及更底层的硬件、操作系统和Java虚拟机等系统的调优。本章从硬件、操作系统、Java虚拟机和Hadoop参数调优等四个方面介绍了Hadoop性能调优的方法。
10.7 小结
本章介绍了几种常见的多用户作业调度器。相比于FIFO调度器,多用户调度器能够更好地满足不同应用程序的服务质量要求。
当前主要有两种多用户作业调度器的设计思路:第一种是在一个物理集群上虚拟多个Hadoop集群,这些集群各自拥有全套独立的Hadoop服务,比如JobTracker、TaskTracker等,典型的代表是HOD(Hadoop On Demand)调度器;另一种是扩展Hadoop调度器,使之支持多个队列多用户,典型的代表是Yahoo!的Capacity Scheduler和Facebook的Fair Scheduler。本章分别对这两种调度器进行了介绍。
HOD调度器是一个在共享物理集群上管理若干个Hadoop集群的工具,它可以帮助用户在一个共享物理集群上快速搭建若干个独立的虚拟Hadoop集群。由于该调度器会产生多个独立的小集群,因此会增加集群运维成本和降低资源利用率。
为了克服HOD的缺点,Capacity Scheduler和Fair Scheduler出现了。它们通过扩展调度器功能,在不拆分集群的前提下,将集群中的资源和用户分成若干个队列,并为每个队列分配一定量的资源,同时添加各种限制以防止用户或者队列独占资源。由于这种方式能够保证只有一个Hadoop集群,因此可大大降低运维成本,同时很容易实现资源共享,进而可明显提高资源利用率。
11.5 小结
本章概括了旧版本(1.0之前版本)中Hadoop存在的安全问题,以及对安全的需求,并介绍了Hadoop 1.0中新加入的安全机制实现方案。
Hadoop 1. 0加入了Kerberos与令牌相结合的身份认证和基于ACL(Access Control List)的服务访问控制机制。客户端第一次访问服务器端时需进行Kerberos身份认证,待通过认证后,服务器端会为之生成一个令牌,之后客户端只需凭借令牌便可以访问该服务器端;而ACL是Hadoop中采用的授权机制,管理员可为Hadoop中的任何服务配置允许访问的用户列表,以决定哪些用户可以访问对应的服务。
Hadoop安全机制是Hadoop 1.0中最重要的功能之一。它的引入标志着Hadoop已经真正成熟了。
12.6 小结
本章介绍了下一代MapReduce的基本设计思想以及常见的三个实现:YARN、Corona和Mesos。
YARN是Apache的下一代MapReduce框架。它的基本设计思想是将JobTracker拆分成两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中,ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster则负责单个应用程序的管理。
与YARN一样,Corona也是将JobTracker拆分成了两个独立的服务:一个全局的资源管理器ClusterManager和每个应用程序特有的CoronaJobTracker。其中,ClusterManager负责整个系统的资源管理和分配,而CoronaJobTracker则负责单个应用程序的管理。
Mesos诞生于UC Berkeley的一个研究项目。它的设计动机是解决编程模型和计算框架在多样化的环境下的框架间资源隔离和共享问题。尽管它不是直接从MRv 1衍化而来的,但它具备了下一代MapReduce的基本特征。
参考资料
【参考书籍】
[1]Tom White. Hadoop权威指南[M].2版.周敏奇,王晓玲,金澈清,钱卫宁,译.北京:清华大学出版社,2011.
[2]Chuck Lam. Hadoop实战[M].韩冀中.北京:人民邮电出版社,2011.
[3]Eric Sammer. Hadoop Operations.O'Reilly Media,2012.
[4]孙玉琴.Java网络编程精解[M].北京:电子工业出版社,2007.
[5]Ron Hitchens. Java NIO.O'Reilly Media,2002.
[6]George Coulouris, Jean Dollimore, Tim Kindberg.分布式系统概念与设计[M].金蓓弘,等译.北京:机械工业出版社,2004.
[7]Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.设计模式:可复用面向对象软件的基础[M].李英军,等译.北京:机械工业出版社,2000.
[8]Eric Freeman, Elisabeth Freeman, Kathy Sterra, Bert Bates. O'Reilly公司.Head First设计模式[M].北京:中国电力出版社,2007.
【参考论文】
[1]J. Dean and S.Ghemawat,“Mapreduce:simplified data processing on large clusters,”in Proceedings of the 6th conference on Symposium on Opearting Systems Design&Implementation-Volume 6.Berkeley, CA, USA:USENIX Association,2004,pp.107-113.
[2]Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung. The Google file system.In 19th Symposium on Operating Systems Principles, pages 29-43,Lake George, New York,2003.
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=1170