Hadoop实战第2版-陆嘉恒

            在线阅读                   百度网盘下载(jw3q)


image.png

书名:Hadoop实战第2版

作者:陆嘉恒

格式:EPUB, HTMLZ, PDF

路径:点击打开

排序作者:陆嘉恒

排序书名:Hadoop实战第2版

日期:08 12月 2018

uuid:cccb814c-9df1-44ab-b660-1d6e84eefdfe

id:471

出版日期:5月 2016

修改日期:08 12月 2018

大小:7.06MB

语言:中文


Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统;MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。所以用户可以利用Hadoop轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。经过业界和学术界长达10年的锤炼,目前的Hadoop 1.0.1已经趋于完善,在实际的数据处理和分析任务中担当着不可替代的角色。

计算技术已经改变了我们的工作、学习和生活。分布式的云计算技术是当下IT领域最热门的话题之一,它通过整合资源,为降低成本和能源消耗提供了一种简化、集中的计算平台。这种低成本、高扩展、高性能的特点促使其迅速发展,遍地开发,悄然改变着整个行业的面貌。社会各界对云计算的广泛研究和应用无疑证明了这一点:在学术界,政府和很多高校十分重视对云计算技术的研究和投入;在产业界,各大IT公司也在研究和开发相关的云计算产品上投入了大量的资源。这些研究和应用推动与云计算相关的新兴技术和产品不断涌现,传统的信息服务产品向云计算模式转型。

Hadoop作为Apache基金会的开源项目,是云计算研究和应用最具代表性的产品。Hadoop分布式框架为开发者提供了一个分布式系统的基础架构,用户可以在不了解分布式系统底层细节的情况下开发分布式的应用,充分利用由Hadoop统一起来的集群存储资源、网络资源和计算资源,实现基于海量数据的高速运算和存储。

在编写本书第一版时,鉴于Hadoop技术本身和应用环境较为复杂,入门和实践难度较大,而关于Hadoop的参考资料又非常少,笔者根据自己的实际研究和使用经历,理论与实践并重,从基础出发,为读者全面呈现了Hadoop的相关知识,旨在为Hadoop学习者提供一本工具书。但是时至今日,Hadoop的版本已从本书第一版介绍的0.20升级至正式版1.0,读者的需求也从入门发展到更加深入地了解Hadoop的实现细节,了解Hadoop的更新和发展的趋势,了解Hadoop在企业中的应用。Hadoop提供了一组shell命令在命令行终端对Hadoop进行操作。这些操作包括诸如格式化文件系统、上传和下载文件、启动DataNode、查看文件系统使用情况、运行JAR包等几乎所有和Hadoop相关的操作。本节将具体介绍HDFS的相关命令操作。

本章从MapReduce程序中的JobClient.runJob(conf)开始,给出了MapReduce执行的流程图,并分析了流程图中的四个核心实体,结合实际代码介绍了MapReduce执行的详细流程。MapReduce的执行流程简单概括如下:用户作业执行JobClient.runJob(conf)代码会在Hadoop集群上将其启动。启动之后JobClient实例会向JobTracker获取JobId,而且客户端会将作业执行需要的作业资源复制到HDFS上,然后将作业提交给JobTracker。JobTracker在本地初始化作业,再从HDFS作业资源中获取作业输入的分割信息,根据这些信息JobTracker将作业分割成多个任务,然后分配给在与JobTracker心跳通信中请求任务的TaskTracker。TaskTracker接收到新的任务之后会先从HDFS上获取作业资源,包括作业配置信息和本作业分片的输入,然后在本地启动一个JVM并执行任务。任务结束之后将结果写回HDFS。

介绍完MapReduce作业的详细流程后,本章还重点介绍了MapReduce中采用的两种机制,分别是错误处理机制和作业调度机制。在错误处理机制中,如果遇到硬件故障,MapReduce会将故障节点上的任务分配给其他节点处理。如果遇到任务失败,则会重新执行。在作业调度机制中,主要介绍了公平调度器。这种调度策略能够按照提交作业的用户数目将资源公平地分到用户的作业池中,以达到用户公平共享整个集群的目的。

本章最后介绍了MapReduce中两个流程的细节,分别是shuffle和任务执行。在shuffle中,从代码入手介绍了Map端和Reduce端的shuffle过程及shuffle的优化。shuffle的过程可以概括为:在Map端,当缓冲区内容达到阈值时Map写出内容。写出时按照key值对数据排序,再按照划分将数据写入文件,然后进行merge并将结果交给Reduce。在Reduce端,TaskTracker先从执行Map的TaskTracker节点上复制Map输出,然后对排序合并,最后进行Reduce处理。关于任务执行则主要介绍了三个任务执行的细节,分别是推测式执行、JVM重用和执行环境。推测式执行是指JobTracker在作业执行过程中,发现某个作业执行速度过慢,为了不影响整个作业的完成进度,会启动和这个作业完全相同的备份作业让TaskTracker执行,最后保留二者中较快完成的结果。JVM重用主要是针对比较零碎的任务,对于新任务不是启动新的JVM,而是在先前任务执行完毕的JVM上直接执行,这样节省了JVM启动的时间。在任务执行环境中主要介绍了任务执行参数的内容和任务目录结构,以及任务临时文件夹的使用情况。


当复制大规模数据到HDFS时,要考虑的一个重要因素是文件系统的平衡。当系统中的文件块能够很好地均衡分布到集群各节点时,HDFS才能够更好地工作,所以要保证distcp操作不会打破这个平衡。回到前面复制1000GB数据的例子,当设定-m为1,就意味着1个Map操作可以完成1000GB的操作。这样不仅会让复制操作非常慢,而且不能充分利用集群的性能。最重要的是复制文件的第一个块都要存储在执行Map任务的那个节点上,直到这个节点的磁盘被写满,显然这个节点是不平衡的。通常我们通过设置更多的、超过集群节点的Map任务数来避免不平衡情况的发生,所以最好的选择是刚开始还是使用的默认属性值,每个节点分配20个Map任务。

当然,我们不能保证集群总能够保持平衡,有时可能会限制Map的数量以便节点可以被其他任务使用,这样HDFS还提供了一个工具balancer(参见第10章)来改变集群中的文件块存储的平衡。ZooKeeper存储的是HBase中ROOT表和META表的位置。此外,ZooKeeper还负责监控各个机器的状态(每台机器到ZooKeeper中注册一个实例)。当某台机器发生故障的时候,ZooKeeper会第一时间感知到,并通知HBase Master进行相应的处理。同时,当HBase Master发生故障的时候,ZooKeeper还负责HBase Master的恢复工作,能够保证在同一时刻系统中只有一台HBase Master提供服务。

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1161

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
Logo

更多推荐