前 言
第一部分 準備篇
第1章 環境準備 2
1.1 準備學習環境 2
1.1.1 基礎軟件下載 2
1.1.2 如何準備Linux環境 3
1.2 獲取Hadoop源代碼 5
1.3 搭建Hadoop源代碼閱讀環境 5
1.3.1 創建Hadoop工程 5
1.3.2 Hadoop源代碼閱讀技巧 8
1.4 Hadoop源代碼組織結構 10
1.5 Hadoop初體驗 12
1.5.1 搭建Hadoop環境 12
1.5.2 Hadoop Shell介紹 15
1.6 編譯及調試Hadoop源代碼 16
1.6.1 編譯Hadoop源代碼 17
1.6.2 調試Hadoop源代碼 18
1.7 小結 20
第2章 YARN設計理念與基本架構 21
2.1 YARN産生背景 21
2.1.1 MRv1的局限性 21
2.1.2 輕量級彈性計算平颱 22
2.2 Hadoop基礎知識 23
2.2.1 術語解釋 23
2.2.2 Hadoop版本變遷 25
2.3 YARN基本設計思想 29
2.3.1 基本框架對比 29
2.3.2 編程模型對比 30
2.4 YARN 基本架構 31
2.4.1 YARN基本組成結構 32
2.4.2 YARN通信協議 34
2.5 YARN工作流程 35
2.6 多角度理解YARN 36
2.6.1 並行編程 36
2.6.2 資源管理係統 36
2.6.3 雲計算 37
2.7 本書涉及內容 38
2.8 小結 38
第二部分 YARN核心設計篇
第3章 YARN基礎庫 40
3.1 概述 40
3.2 第三方開源庫 41
3.2.1 Protocol Buffers 41
3.2.2 Apache Avro 43
3.3 底層通信庫 46
3.3.1 RPC通信模型 46
3.3.2 Hadoop RPC的特點概述 48
3.3.3 RPC總體架構 48
3.3.4 Hadoop RPC使用方法 49
3.3.5 Hadoop RPC類詳解 51
3.3.6 Hadoop RPC參數調優 57
3.3.7 YARN RPC實現 57
3.3.8 YARN RPC應用實例 61
3.4 服務庫與事件庫 65
3.4.1 服務庫 66
3.4.2 事件庫 66
3.4.3 YARN服務庫和事件庫的使用方法 68
3.4.4 事件驅動帶來的變化 70
3.5 狀態機庫 72
3.5.1 YARN狀態轉換方式 72
3.5.2 狀態機類 73
3.5.3 狀態機的使用方法 73
3.5.4 狀態機可視化 76
3.6 源代碼閱讀引導 76
3.7 小結 77
3.8 問題討論 77
第4章 YARN應用程序設計方法 78
4.1 概述 78
4.2 客戶端設計 79
4.2.1 客戶端編寫流程 80
4.2.2 客戶端編程庫 84
4.3 ApplicationMaster設計 84
4.3.1 ApplicationMaster編寫流程 84
4.3.2 ApplicationMaster編程庫 92
4.4 YARN 應用程序實例 95
4.4.1 DistributedShell 95
4.4.2 Unmanaged AM 99
4.5 源代碼閱讀引導 100
4.6 小結 100
4.7 問題討論 100
第5章 ResourceManager剖析 102
5.1 概述 102
5.1.1 ResourceManager基本職能 102
5.1.2 ResourceManager內部架構 103
5.1.3 ResourceManager事件與事件處理器 106
5.2 用戶交互模塊 108
5.2.1 ClientRMService 108
5.2.2 AdminService 109
5.3 ApplicationMaster管理 109
5.4 NodeManager管理 112
5.5 Application管理 113
5.6 狀態機管理 114
5.6.1 RMApp狀態機 115
5.6.2 RMAppAttempt狀態機 119
5.6.3 RMContainer狀態機 123
5.6.4 RMNode狀態機 127
5.7 幾個常見行為分析 129
5.7.1 啓動ApplicationMaster 129
5.7.2 申請與分配Container 132
5.7.3 殺死Application 134
5.7.4 Container超時 135
5.7.5 ApplicationMaster超時 138
5.7.6 NodeManager超時 138
5.8 安全管理 139
5.8.1 術語介紹 139
5.8.2 Hadoop認證機製 139
5.8.3 Hadoop授權機製 142
5.9 容錯機製 144
5.9.1 Hadoop HA基本框架 145
5.9.2 YARN HA實現 148
5.10 源代碼閱讀引導 149
5.11 小結 151
5.12 問題討論 152
第6章 資源調度器 153
6.1 資源調度器背景 153
6.2 HOD調度器 154
6.2.1 Torque資源管理器 154
6.2.2 HOD作業調度 155
6.3 YARN資源調度器的基本架構 157
6.3.1 基本架構 157
6.3.2 資源錶示模型 160
6.3.3 資源調度模型 161
6.3.4 資源搶占模型 164
6.4 YARN層級隊列管理機製 169
6.4.1 層級隊列管理機製 169
6.4.2 隊列命名規則 171
6.5 Capacity Scheduler 172
6.5.1 Capacity Scheduler的功能 172
6.5.2 Capacity Scheduler實現 176
6.6 Fair Scheduler 179
6.6.1 Fair Scheduler功能介紹 180
6.6.2 Fair Scheduler實現 182
6.6.3 Fair Scheduler與Capacity Scheduler對比 183
6.7 其他資源調度器介紹 184
6.8 源代碼閱讀引導 185
6.9 小結 186
6.10 問題討論 187
第7章 NodeManager剖析 188
7.1 概述 188
7.1.1 NodeManager基本職能 188
7.1.2 NodeManager內部架構 190
7.1.3 NodeManager事件與事件處理器 193
7.2 節點健康狀況檢測 194
7.2.1 自定義Shell腳本 194
7.2.2 檢測磁盤損壞數目 196
7.3 分布式緩存機製 196
7.3.1 資源可見性與分類 198
7.3.2 分布式緩存實現 200
7.4 目錄結構管理 203
7.4.1 數據目錄管理 203
7.4.2 日誌目錄管理 203
7.5 狀態機管理 206
7.5.1 Application狀態機 207
7.5.2 Container狀態機 210
7.5.3 LocalizedResource狀態機 213
7.6 Container生命周期剖析 214
7.6.1 Container資源本地化 214
7.6.2 Container運行 218
7.6.3 Container資源清理 222
7.7 資源隔離 224
7.7.1 Cgroups介紹 224
7.7.2 內存資源隔離 228
7.7.3 CPU資源隔離 230
7.8 源代碼閱讀引導 234
7.9 小結 235
7.10 問題討論 236
第三部分 計算框架篇
第8章 離綫計算框架MapReduce 238
8.1 概述 238
8.1.1 基本構成 238
8.1.2 事件與事件處理器 240
8.2 MapReduce客戶端 241
8.2.1 ApplicationClientProtocol協議 242
8.2.2 MRClientProtocol協議 243
8.3 MRAppMaster工作流程 243
8.4 MR作業生命周期及相關狀態機 246
8.4.1 MR作業生命周期 246
8.4.2 Job狀態機 249
8.4.3 Task狀態機 253
8.4.4 TaskAttempt狀態機 255
8.5 資源申請與再分配 259
8.5.1 資源申請 259
8.5.2 資源再分配 262
8.6 Container啓動與釋放 263
8.7 推測執行機製 264
8.7.1 算法介紹 265
8.7.2 推測執行相關類 266
8.8 作業恢復 267
8.9 數據處理引擎 269
8.10 曆史作業管理器 271
8.11 MRv1與MRv2對比 273
8.11.1 MRv1 On YARN 273
8.11.2 MRv1與MRv2架構比較 274
8.11.3 MRv1與MRv2編程接口兼容性 274
8.12 源代碼閱讀引導 275
8.13 小結 277
8.14 問題討論 277
第9章 DAG計算框架Tez 278
9.1 背景 278
9.2 Tez數據處理引擎 281
9.2.1 Tez編程模型 281
9.2.2 Tez數據處理引擎 282
9.3 DAG Master實現 284
9.3.1 DAG編程模型 284
9.3.2 MR到DAG轉換 286
9.3.3 DAGAppMaster 288
9.4 優化機製 291
9.4.1 當前YARN框架存在的問題 291
9.4.2 Tez引入的優化技術 292
9.5 Tez應用場景 292
9.6 與其他係統比較 294
9.7 小結 295
第10章 實時/內存計算框架Storm/Spark 296
10.1 Hadoop MapReduce的短闆 296
10.2 實時計算框架Storm 296
10.2.1 Storm編程模型 297
10.2.2 Storm基本架構 302
10.2.3 Storm On YARN 304
10.3 內存計算框架Spark 307
10.3.1 Spark編程模型 308
10.3.2 Spark基本架構 312
10.3.3 Spark On YARN 316
10.3.4 Spark/Storm On YARN比較 317
10.4 小結 317
第四部分 高級篇
第11章 Facebook Corona剖析 320
11.1 概述 320
11.1.1 Corona的基本架構 320
11.1.2 Corona的RPC協議與序列化框架 322
11.2 Corona設計特點 323
11.2.1 推式網絡通信模型 323
11.2.2 基於Hadoop 0.20版本 324
11.2.3 使用Thrift 324
11.2.4 深度集成Fair Scheduler 324
11.3 工作流程介紹 324
11.3.1 作業提交 325
11.3.2 資源申請與任務啓動 326
11.4 主要模塊介紹 327
11.4.1 ClusterManager 327
11.4.2 CoronaJobTracker 330
11.4.3 CoronaTaskTracker 333
11.5 小結 335
第12章 Apache Mesos剖析 336
12.1 概述 336
12.2 底層網絡通信庫 337
12.2.1 libprocess基本架構 338
12.2.2 一個簡單示例 338
12.3 Mesos服務 340
12.3.1 SchedulerProcess 341
12.3.2 Mesos Master 342
12.3.3 Mesos Slave 343
12.3.4 ExecutorProcess 343
12.4 Mesos工作流程 344
12.4.1 框架注冊過程 344
12.4.2 Framework Executor注冊過程 345
12.4.3 資源分配到任務運行過程 345
12.4.4 任務啓動過程 347
12.4.5 任務狀態更新過程 347
12.5 Mesos資源分配策略 348
12.5.1 Mesos資源分配框架 349
12.5.2 Mesos資源分配算法 349
12.6 Mesos容錯機製 350
12.6.1 Mesos Master容錯 350
12.6.2 Mesos Slave容錯 351
12.7 Mesos應用實例 352
12.7.1 Hadoop On Mesos 352
12.7.2 Storm On Mesos 353
12.8 Mesos與YARN對比 354
12.9 小結 355
第13章 YARN總結與發展趨勢 356
13.1 資源管理係統設計動機 356
13.2 資源管理係統架構演化 357
13.2.1 集中式架構 357
13.2.2 雙層調度架構 358
13.2.3 共享狀態架構 358
13.3 YARN發展趨勢 359
13.3.1 YARN自身的完善 359
13.3.2 以YARN為核心的生態係統 361
13.3.3 YARN周邊工具的完善 363
13.4 小結 363
附錄A YARN安裝指南 364
附錄B YARN配置參數介紹 367
附錄C Hadoop Shell命令介紹 371
附錄D 參考資料 374
· · · · · · (
收起)