新書推薦:
《
量子网络的构建与应用
》
售價:HK$
112.7
《
拍电影的热知识:126部影片里的创作技巧(全彩插图版)
》
售價:HK$
112.7
《
大唐名城:长安风华冠天下
》
售價:HK$
89.7
《
情绪传染(当代西方社会心理学名著译丛)
》
售價:HK$
90.9
《
中国年画 1950-1990 THE NEW CHINA: NEW YEAR PICTURE 英文版
》
售價:HK$
236.0
《
革命与反革命:社会文化视野下的民国政治(近世中国丛书)
》
售價:HK$
93.2
《
画楼:《北洋画报》忆旧(年轮丛书)
》
售價:HK$
337.5
《
大国脊梁:漫画版
》
售價:HK$
80.2
編輯推薦:
全球首部Hadoop
YARN专著,资深Hadoop技术专家根据最新版本撰写,ChinaHadoop和51CTO等专业技术社区联袂推荐!
从应用角度系统讲解YARN的基本库和组件用法、应用程序设计方法、YARN上流行的各种计算框架,以及多个类YARN的开源资源管理系统。
从源代码角度深入分析YARN的设计理念与基本架构、各个组件的实现原理,以及各种计算框架的实现细节。
內容簡介:
本书是“Hadoop技术内幕”系列的第3本书,前面两本分别对Common、HDFS和MapReduce进行了深入分析和讲解,赢得了极好的口碑,Hadoop领域几乎人手一册,本书则对YARN展开了深入的探讨,是首部关于YARN的专著。仍然由资深Hadoop技术专家董西成执笔,根据最新的Hadoop
2.0版本撰写,权威社区ChinaHadoop鼎力推荐。
本书从应用角度系统讲解了YARN的基本库和组件用法、应用程序设计方法、YARN上流行的各种计算框架(MapReduce、Tez、Storm、Spark),以及多个类YARN的开源资源管理系统(Corona和Mesos);从源代码角度深入分析YARN的设计理念与基本架构、各个组件的实现原理,以及各种计算框架的实现细节。
全书共四部分13章:第一部分(第1~2章)主要介绍了如何获取、阅读和调试Hadoop的源代码,以及YARN的设计思想、基本架构和工作流程;第二部分(第3~7章)结合源代码详细剖析和讲解了YARN的第三方开源库、底层通信库、服务库、事件库的基本使用和实现细节,详细讲解了YARN的应用程序设计方法,深入讲解和分析了ResourceManager、资源调度器、NodeManager等组件的实现细节;第三篇(第8~10章)则对离线计算框架MapReduce、DAG计算框架Tez、实时计算框架Storm和内存计算框架Spark进行了详细的讲解;第四部分(第11~13章)首先对Facebook
Corona和Apache
Mesos进行了深入讲解,然后对YARN的发展趋势进行了展望。附录部分收录了YARN安装指南、YARN配置参数以及Hadoop
Shell命令等非常有用的资料。
關於作者:
董西成 资深Hadoop技术实践者和研究者,对Hadoop技术有非常深刻的认识和理解,有着丰富的实践经验。曾经参与了商用Hadoop原型的研发,以及人民搜索的分布式日志系统、全网图片搜索引擎、Hadoop调度器等多个项目的设计与研发,实践经验非常丰富。对Hadoop的源代码有深入的研究,能通过修改Hadoop的源代码来完成二次开发和解决各种复杂的问题。热衷于分享,撰写了大量关于Hadoop的技术文章并分享在自己的博客上,由于文章技术含量高,所以非常受欢迎,这使得他在Hadoop技术圈内颇具知名度和影响力。
出版有Hadoop领域负有盛名的专著:《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》。
目錄 :
前 言
第一部分 准备篇
第1章 环境准备
1.1 准备学习环境
1.1.1 基础软件下载
1.1.2 如何准备Linux环境
1.2 获取Hadoop源代码
1.3 搭建Hadoop源代码阅读环境
1.3.1 创建Hadoop工程
1.3.2 Hadoop源代码阅读技巧
1.4 Hadoop源代码组织结构
1.5 Hadoop初体验
1.5.1 搭建Hadoop环境
1.5.2 Hadoop Shell介绍
1.6 编译及调试Hadoop源代码
1.6.1 编译Hadoop源代码
1.6.2 调试Hadoop源代码
1.7 小结
第2章 YARN设计理念与基本架构
2.1 YARN产生背景
2.1.1 MRv1的局限性
2.1.2 轻量级弹性计算平台
2.2 Hadoop基础知识
2.2.1 术语解释
2.2.2 Hadoop版本变迁
2.3 YARN基本设计思想
2.3.1 基本框架对比
2.3.2 编程模型对比
2.4 YARN 基本架构
2.4.1 YARN基本组成结构
2.4.2 YARN通信协议
2.5 YARN工作流程
2.6 多角度理解YARN
2.6.1 并行编程
2.6.2 资源管理系统
2.6.3 云计算
2.7 本书涉及内容
2.8 小结
第二部分 YARN核心设计篇
第3章 YARN基础库
3.1 概述
3.2 第三方开源库
3.2.1 Protocol Buffers
3.2.2 Apache Avro
3.3 底层通信库
3.3.1 RPC通信模型
3.3.2 Hadoop RPC的特点概述
3.3.3 RPC总体架构
3.3.4 Hadoop RPC使用方法
3.3.5 Hadoop RPC类详解
3.3.6 Hadoop RPC参数调优
3.3.7 YARN RPC实现
3.3.8 YARN RPC应用实例
3.4 服务库与事件库
3.4.1 服务库
3.4.2 事件库
3.4.3 YARN服务库和事件库的使用方法
3.4.4 事件驱动带来的变化
3.5 状态机库
3.5.1 YARN状态转换方式
3.5.2 状态机类
3.5.3 状态机的使用方法
3.5.4 状态机可视化
3.6 源代码阅读引导
3.7 小结
3.8 问题讨论
第4章 YARN应用程序设计方法
4.1 概述
4.2 客户端设计
4.2.1 客户端编写流程
4.2.2 客户端编程库
4.3 ApplicationMaster设计
4.3.1 ApplicationMaster编写流程
4.3.2 ApplicationMaster编程库
4.4 YARN 应用程序实例
4.4.1 DistributedShell
4.4.2 Unmanaged AM
4.5 源代码阅读引导
4.6 小结
4.7 问题讨论
第5章 ResourceManager剖析
5.1 概述
5.1.1 ResourceManager基本职能
5.1.2 ResourceManager内部架构
5.1.3 ResourceManager事件与事件处理器
5.2 用户交互模块
5.2.1 ClientRMService
5.2.2 AdminService
5.3 ApplicationMaster管理
5.4 NodeManager管理
5.5 Application管理
5.6 状态机管理
5.6.1 RMApp状态机
5.6.2 RMAppAttempt状态机
5.6.3 RMContainer状态机
5.6.4 RMNode状态机
5.7 几个常见行为分析
5.7.1 启动ApplicationMaster
5.7.2 申请与分配Container
5.7.3 杀死Application
5.7.4 Container超时
5.7.5 ApplicationMaster超时
5.7.6 NodeManager超时
5.8 安全管理
5.8.1 术语介绍
5.8.2 Hadoop认证机制
5.8.3 Hadoop授权机制
5.9 容错机制
5.9.1 Hadoop HA基本框架
5.9.2 YARN HA实现
5.10 源代码阅读引导
5.11 小结
5.12 问题讨论
第6章 资源调度器
6.1 资源调度器背景
6.2 HOD调度器
6.2.1 Torque资源管理器
6.2.2 HOD作业调度
6.3 YARN资源调度器的基本架构
6.3.1 基本架构
6.3.2 资源表示模型
6.3.3 资源调度模型
6.3.4 资源抢占模型
6.4 YARN层级队列管理机制
6.4.1 层级队列管理机制
6.4.2 队列命名规则
6.5 Capacity Scheduler
6.5.1 Capacity Scheduler的功能
6.5.2 Capacity Scheduler实现
6.6 Fair Scheduler
6.6.1 Fair Scheduler功能介绍
6.6.2 Fair Scheduler实现
6.6.3 Fair Scheduler与Capacity Scheduler对比
6.7 其他资源调度器介绍
6.8 源代码阅读引导
6.9 小结
6.10 问题讨论
第7章 NodeManager剖析
7.1 概述
7.1.1 NodeManager基本职能
7.1.2 NodeManager内部架构
7.1.3 NodeManager事件与事件处理器
7.2 节点健康状况检测
7.2.1 自定义Shell脚本
7.2.2 检测磁盘损坏数目
7.3 分布式缓存机制
7.3.1 资源可见性与分类
7.3.2 分布式缓存实现
7.4 目录结构管理
7.4.1 数据目录管理
7.4.2 日志目录管理
7.5 状态机管理
7.5.1 Application状态机
7.5.2 Container状态机
7.5.3 LocalizedResource状态机
7.6 Container生命周期剖析
7.6.1 Container资源本地化
7.6.2 Container运行
7.6.3 Container资源清理
7.7 资源隔离
7.7.1 Cgroups介绍
7.7.2 内存资源隔离
7.7.3 CPU资源隔离
7.8 源代码阅读引导
7.9 小结
7.10 问题讨论
第三部分 计算框架篇
第8章 离线计算框架MapReduce
8.1 概述
8.1.1 基本构成
8.1.2 事件与事件处理器
8.2 MapReduce客户端
8.2.1 ApplicationClientProtocol协议
8.2.2 MRClientProtocol协议
8.3 MRAppMaster工作流程
8.4 MR作业生命周期及相关状态机
8.4.1 MR作业生命周期
8.4.2 Job状态机
8.4.3 Task状态机
8.4.4 TaskAttempt状态机
8.5 资源申请与再分配
8.5.1 资源申请
8.5.2 资源再分配
8.6 Container启动与释放
8.7 推测执行机制
8.7.1 算法介绍
8.7.2 推测执行相关类
8.8 作业恢复
8.9 数据处理引擎
8.10 历史作业管理器
8.11 MRv1与MRv2对比
8.11.1 MRv1 On YARN
8.11.2 MRv1与MRv2架构比较
8.11.3 MRv1与MRv2编程接口兼容性
8.12 源代码阅读引导
8.13 小结
8.14 问题讨论
第9章 DAG计算框架Tez
9.1 背景
9.2 Tez数据处理引擎
9.2.1 Tez编程模型
9.2.2 Tez数据处理引擎
9.3 DAG Master实现
9.3.1 DAG编程模型
9.3.2 MR到DAG转换
9.3.3 DAGAppMaster
9.4 优化机制
9.4.1 当前YARN框架存在的问题
9.4.2 Tez引入的优化技术
9.5 Tez应用场景
9.6 与其他系统比较
9.7 小结
第10章 实时内存计算框架StormSpark
10.1 Hadoop MapReduce的短板
10.2 实时计算框架Storm
10.2.1 Storm编程模型
10.2.2 Storm基本架构
10.2.3 Storm On YARN
10.3 内存计算框架Spark
10.3.1 Spark编程模型
10.3.2 Spark基本架构
10.3.3 Spark On YARN
10.3.4 SparkStorm On YARN比较
10.4 小结
第四部分 高级篇
第11章 Facebook Corona剖析
11.1 概述
11.1.1 Corona的基本架构
11.1.2 Corona的RPC协议与序列化框架
11.2 Corona设计特点
11.2.1 推式网络通信模型
11.2.2 基于Hadoop 0.20版本
11.2.3 使用Thrift
11.2.4 深度集成Fair Scheduler
11.3 工作流程介绍
11.3.1 作业提交
11.3.2 资源申请与任务启动
11.4 主要模块介绍
11.4.1 ClusterManager
11.4.2 CoronaJobTracker
11.4.3 CoronaTaskTracker
11.5 小结
第12章 Apache Mesos剖析
12.1 概述
12.2 底层网络通信库
12.2.1 libprocess基本架构
12.2.2 一个简单示例
12.3 Mesos服务
12.3.1 SchedulerProcess
12.3.2 Mesos Master
12.3.3 Mesos Slave
12.3.4 ExecutorProcess
12.4 Mesos工作流程
12.4.1 框架注册过程
12.4.2 Framework Executor注册过程
12.4.3 资源分配到任务运行过程
12.4.4 任务启动过程
12.4.5 任务状态更新过程
12.5 Mesos资源分配策略
12.5.1 Mesos资源分配框架
12.5.2 Mesos资源分配算法
12.6 Mesos容错机制
12.6.1 Mesos Master容错
12.6.2 Mesos Slave容错
12.7 Mesos应用实例
12.7.1 Hadoop On Mesos
12.7.2 Storm On Mesos
12.8 Mesos与YARN对比
12.9 小结
第13章 YARN总结与发展趋势
13.1 资源管理系统设计动机
13.2 资源管理系统架构演化
13.2.1 集中式架构
13.2.2 双层调度架构
13.2.3 共享状态架构
13.3 YARN发展趋势
13.3.1 YARN自身的完善
13.3.2 以YARN为核心的生态系统
13.3.3 YARN周边工具的完善
13.4 小结
附录A YARN安装指南
附录B YARN配置参数介绍
附录C Hadoop Shell命令介绍
附录D 参考资料
內容試閱 :
第一部分
准 备 篇
由于MRv1(MapReduce version
1)在扩展性、可靠性、资源利用率和多框架等方面存在明显不足,故Apache开始尝试对MapReduce进行升级改造,进而诞生了下一代MapReduce计算框架MRv2(MapReduce
version
2)。由于MRv2将资源管理模块构建成了一个独立的通用系统YARN,这使得MRv2的核心从单一计算框架MapReduce转移为通用资源管理系统YARN。本书第一部分将介绍学习MRv2前的准备工作,并给出MRv2和YARN的基本概念和架构。
第1章 环 境 准 备
一般而言,在深入研究一个系统的技术细节之前,先要进行一些基本的准备工作,比如准备源代码阅读环境,搭建运行环境并尝试使用该系统等。然而,对于Hadoop而言,由于它是一个分布式系统,由多种守护进程组成,具有一定的复杂性,如果想深入学习其设计原理,仅仅进行以上几项准备工作是不够的,还要学习一些调试工具的使用方法,以便对Hadoop源代码进行调试、跟踪,边用边学,这样才能事半功倍。
本章编写目的是帮助读者构建一个“高效”的Hadoop源代码学习环境,包括Hadoop源代码阅读环境、Hadoop使用环境和Hadoop源代码编译调试环境等,主要涉及如下内容:
在Linux环境下搭建Hadoop源代码阅读环境;
在Linux环境下搭建一个Hadoop集群(包括YARN和HDFS两个系统);
Hadoop的基本使用方法,主要涉及Hadoop Shell和Eclipse插件两种工具的使用;
Hadoop源代码编译和调试方法,其中调试方法包括使用Eclipse远程调试和打印调试日志两种。
考虑到大部分用户在单机上学习Hadoop源代码,所以本章内容均是基于单机环境的。本章大部分内容较为基础,已经掌握这部分内容的读者可以直接跳过本章。
1.1 准备学习环境
对于大部分公司而言,实验和生产环境中的服务器集群部署的是Linux操作系统,考虑到Linux在服务器市场中具有统治地位,Hadoop从一开始便是基于Linux操作系统开发的,因而对Linux有非常完美的支持。尽管Hadoop采用了具有跨平台特性的Java作为主要编程语言,但由于它的一些功能实现用到了Linux操作系统相关的技术,因而对其他平台支持不够友好,且没有进行过严格测试。换句话说,其他操作系统(如Windows)仅可作为开发环境,不可作为生产环境。对于学习源代码而言,操作系统的选择显得不是非常重要,读者可根据个人爱好自行决定。本节以64
bit Linux为例,介绍如何在单机上准备Hadoop源代码学习环境。
1.1.1 基础软件下载
前面提到Hadoop采用的开发语言主要是Java,因而搭建Hadoop环境所需的最基础软件首先应该包括Java基础开发包JDK和Java项目管理工具Maven,考虑到源代码阅读和调试的便利性,本书采用功能强大的集成开发环境Eclipse。搭建Hadoop阅读环境需要的各种软件以及下载方式如表1-1所示。
表1-1 搭建Hadoop阅读环境所需的软件
1.1.2 如何准备Linux环境
本节主要介绍如何准备Linux下Hadoop学习环境。搭建Linux学习环境需要安装JDK和Eclipse等软件。为了方便1.6节介绍Hadoop源代码编译方法,本节顺便安装Hadoop项目管理工具Maven。本文以64
bit Ubuntu为例,介绍安装这些软件的方法,最终安装完成的目录结构为:
ROOT
├─home
│ └─dong
│ └─eclipse
└─usr
└─lib
├─apache-maven-3.0.5
└─jvm
└─jdk1.6.0_25