强推!华为内部都在用的 783 页大数据处理系统:Hadoop 源代码 pdf
前言
大数据处理系统:Hadoop 源代码情景分析,采用的是 Hadoop2.6。如果你有点野心,想对大数据处理系统有比较深入透彻的了解,特别是想有朝一日自己也设计一个这样的系统,甚至自己把它写出来,那么你真应该认真读一下这本文,以及 Hadoop 的源代码,看看人家是怎么设计怎么实现的。
然后,在最后一章,再看看 Spark 又是什么样的,有些什么改进。你将看到,在一个计算机集群上构筑一个大数据处理系统,哪些成分是必不可少的,哪些方面又是可以改进的,它与操作系统的关系怎样,而作为大规模计算机集群的“操作系统”又可以和应该是什么样的。
不过也尽力把它写成让非计算机专业的读者也能读懂,当然他们的困难会多一些,但也绝非无法理解。正因如此,本文叙述也许显得过于通俗直白,有时候可能还有点啰嗦。
![](https://static001.geekbang.org/infoq/a7/a706b71a92fcbed1abacbf96337d18f2.png)
学习目录
![](https://static001.geekbang.org/infoq/bc/bcd4275bef34ebded4e80cdd87f350f3.png)
主要内容
全文总共分为 20 章的内容,因为内容比较多,所以接下来我就给大家做个粗略的介绍,每一节都有更加细化的内容!
第 1 章大数据与 Hadoop,
![](https://static001.geekbang.org/infoq/95/950aa9b37ee5006caa32798ca1b20a6f.png)
第 2 章研究方法,我们的目的是要研究 Hadoop 的源代码,而研究必须有研究方法。这里所说的研究方法是指如何阅读、分析、理解各种计算机程序源代码的方法和手段。实际上对此并没有一种标准的或者公认的方法,各人所用的方法和手段可能都不一样,这里只是把我所用的方法介绍给读者,以期抛砖引玉
![](https://static001.geekbang.org/infoq/0f/0ff34732626c31106797b63068cb86e2.png)
第 3 章 Hadoop 集群和 YARN,虽然 Hadoop 也可以在单机上运行,但是这个平台的典型运行场景无疑是在多机的集群(Cluster)上。我们把运行着 Hadoop 平台的集群,就 Hadoop 平台的边界所及,称为“Hadoop 集群”。其中的每台机器都成为集群的一个“节点(node)”,节点之间连成一个局域网。这个局域网一般都是交换网,而不是路由网。这就是说,集群中只有交换机(switch),一般是二层交换机,也可能是三层交换机,但是没有普通的路由器,因为那些路由器引入的延迟太大了。不过这也不绝对,有时候可能确实需要将一个集群分处在不同网段中,而通过路由器相连,但是这并不影响 Hadoop 的运行(除性能降低之外)。就 Hadoop 而言,路由器与交换机在逻辑上是一样的。
![](https://static001.geekbang.org/infoq/56/56973a9138387f324a645b6fa3cf2669.png)
第 4 章 Hadoop 的 RPC 机制,RPC 是“RemoteProcedureCall”即“远地过程调用”的缩写。这个机制的目的,是让一台机器上的程序能像调用本地的“过程”那样来调用别的机器上的某些过程。这里所谓“过程”,在传统的 C 程序设计中统称为“函数”,在 Pascal 程序设计中既可以是 PROCEDURE 也可以是 FUNCTION,在 Java 等 OO 程序设计语言中就是 “方 法 (method)”。所 以,Java 传 统 的 RPC 机制称为 RMI,即“远地方法启用(RemoteMethodInvocation)”。
![](https://static001.geekbang.org/infoq/b2/b21dc6c274f39950704560f1dbdd1df4.png)
第 5 章 Hadoop 作业的提交,在计算机上启动运行一个应用,首先要把这个应用作为“作业(Job)”提交给计算机系统。
一般这是通过键入一个命令行或点击某个图标而实现的,操作很简单。但是,如果我们要考察在提交作业时系统内部的流程,那就比较复杂了。学过操作系统的人对单机上的作业提交过程会有比较深入的了解,不过那不是本书所要关注的问题。本书所关注的是,在通常运行于计算机集群的 Hadoop 系统上,作业是怎样提交的。
![](https://static001.geekbang.org/infoq/ec/ec9512baab1e55cb9f20a8df80fa3929.png)
第 6 章作业的调度与指派,
![](https://static001.geekbang.org/infoq/81/81c611247e9606f83e16ba69c21c57bd.png)
第 7 章 NodeManager 与任务投运,用户提交的作业为 ResourceManager 接受并得到调度运行之后,RM 会设法将其投入运行。但是一 个 作 业 (Job 或 App)通常都包含着很多任务,比方说 N 个 MapTask 和 1 个 ReduceTask,所以作业的投运终究会分解成许多任务的投运。
![](https://static001.geekbang.org/infoq/8d/8daa59f1359d64d355309b76500ee59c.png)
第 8 章 MRAppMaster 与作业投运,
![](https://static001.geekbang.org/infoq/2e/2e3715519aa5f98092c8fd29930d8e74.png)
第 9 章 YARN 子系统的计算框架,Hadoop 中 YARN 子系统的使命是为用户提供大数据的计算框架。早期的 Hadoop,甚至早期的 YARN 都只提供一种计算框架,那就是 MapReduce。如前所述,MapReduce 是一种极简的,然而在很多情况下颇为有效的计算模型和框架。
但是 Hadoop 的 MapReduce 框架要求使用者提供用 Java 语言编写的 Mapper 和 Reducer,而 App 本身则虽然简单但也要求用 Java 编写,这又使有些用户感到有点不便,而且 MapReduce 这个模式也过于简单和单调。所以 Hadoop 后来有了一些新的发展,除 MapReduce 外又提供了称为 Chain 和 Stream 的计算框架。一来使用户不必非得用 Java 编程;二来更允许用户利用 Linux 上的 Utility 工具软件搭建更像“数据流”的结构。本章介绍 YARN 子系统为用户提供的计算框架,当然主要还是传统的 MapReduce 框架。
![](https://static001.geekbang.org/infoq/e7/e720d192945cb1cae2115b4e57d5dc93.png)
第 10 章 MapReduce 框架中的数据流
![](https://static001.geekbang.org/infoq/bb/bb356d65ddb987ee8c1cb821633fea81.png)
第 11 章 Hadoop 的文件系统 HDFS
![](https://static001.geekbang.org/infoq/5a/5a578b88c106146a661b751b92cf566d.png)
第 12 章 HDFS 的 DataNode
![](https://static001.geekbang.org/infoq/89/897a3bb215bdc0f1e3ad237216b965ea.png)
第 13 章 DataNode 与 NameNode 的互动,数据节点 DataNode 在运行中会与三种对端有互动。
第一种是 NameNode,如前所述,对于数据块的存储地点,虽然最初是由 NameNode 分配和指定的,但相关的信息最终来自 DataNode 的报告。
第二种是用户的 App(包括 Shell),用户的 App 可以存在于集群内的任何节点上,不过那是在独立的 JVM 上,即使与 DataNode 同在-一个节点上也互相独立;然而真正把数据存储在 DataNode 上或从 DataNode 读取数据的却是 App(或 Shell)。
第三种是集群中别的 DataNode,就是说 DataNode 与 DataNode 之间也会有通信和互动,这主要来自数据块复份 replica 的传输和转储。
数据块在 HDFS 文件系统中的存储是“狡兔三窟”的,一个数据块要分别存储在若干不同的 DataNode.上,但是系统并不要求 App 把--个数据块分别发送给几个 DataNode,而只需发送给其中的一个,后面就是 DataNode 之间的事了。
![](https://static001.geekbang.org/infoq/3e/3e3ca61477531000e2bf16708cac2e00.png)
第 14 章 DataNode 间的互动
![](https://static001.geekbang.org/infoq/e6/e628f6b5a1578b343c2aadf8340a2df2.png)
第 15 章 HDFS 的文件访问
![](https://static001.geekbang.org/infoq/1b/1befdbf00a48e5800dd32f114fc6cefe.png)
第 16 章 Hadoop 的容错机制
![](https://static001.geekbang.org/infoq/ab/ab2c236e33099bcaaf42a1207009271d.png)
第 17 章 Hadoop 的安全机制
![](https://static001.geekbang.org/infoq/ca/cac2094f1f9a01d5cede16f8504f075f.png)
第 18 章 Hadoop 的人机界面,供人们直接使用的系统须提供人机交互的手段,或称“人机界面(UserInterface)”即 UI,更确切地说是“Man-MachineInterface”,使人们得以使用和管理这个系统或平台。比
![](https://static001.geekbang.org/infoq/99/9937efcb49bfcb2115e8e946e73e7999.png)
第 19 章 Hadoop 的部署和启动,系统的安装部署本来就不是小事,对于大规模的集群就更不用说了。Hadoop 一般都是在集群_上运行,但是要运维人员跑到每一台机器上去部署或启动却是不现实的,得要能在一个集中的控制台节点上完成 Hadoop 的部署和启动(还有关机)才好,这当然又会使整个过程增加许多技术上的复杂度。既然是在一个集中的控制台节点上部署和启动一个集群,那当然就离不开远程操作,所以 Linux 的远程操作工具 ssh 和 rsyne 就成了整个过程的基石。之所以是 ssh 和 rsync,而不是别的远程操作工具(比方说 Telnet),是因为这二者的安全性比较好,通信中采用了较强的加密手段。
![](https://static001.geekbang.org/infoq/67/678cdab9e17b0d85efb6b696b82b76d6.png)
第 20 章 Spark 的优化与改进
近年来, Hadoop 与 Spark 之间就像展开了一场你追我赶的竞赛。时至今日,Hadoop 和 Spark 已经成为大数据处理平台的两个“de facto standard”,即“事实标准”。
不过 Spark 之于 Hadoop 也并非完全是对立的两种平台或产品,在很大程度上倒是对于 Hadoop 的补充,而并不完全是作为对于 Hadoop 的替代。
事实上,Spark 虽然也能以“Stand alone"模式独立存在和运行,但是更多地还是利用 YARN,在 YARN 框架上运行。而且 Spark 也不提供自己的文件系统,大多只是直接利用 HDFS。虽然 Spark 并不要求必须使用 HDFS,但是在大规模集群的条件下要实现“数据在哪里,计算就去哪里”这个原则,而且还要容错,实际上也没有太多的选择。
所以从功能上看,Spark 的作用只是相当于一个更好的 YARN 子系统。
Hadoop 的不足是明摆着的,总而言之,一是不够灵活、比较死板,就是专门针对 MapReduce;二是性能不够好;三是使用不够方便,动不动就得写个 Java 程序。
那么 Spark 对此又有些什么样的改进呢?下面就作些介绍和评述,同时也对 Hadoop 和 Spark 做个粗泛的比较研究。
![](https://static001.geekbang.org/infoq/02/02a13bed68427ebff04611da807b7c34.png)
这份【 大数据处理系统: Hadoop 源代码情景分析】共有 783 页,已经整理打包好,需要完整版内容的朋友,可以添加小助理 vx:bjmsb0606006 即可免费获取!!
评论