Hadoop技術內幕:深入解析MapReduce架構設計與實現原理 ( 簡體 字) |
作者:董西成 | 類別:1. -> 程式設計 -> 雲計算 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 35571 詢問書籍請說出此書號!【缺書】 NT售價: 345 元 |
出版日:5/1/2013 |
頁數:318 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111422266 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:為什么要寫這本書
突然之間,大數據一下子就“火”了,開源軟件Hadoop也因此水漲船高。得益于一些國際領先廠商,尤其是FaceBook、Yahoo!以及阿里巴巴等互聯網巨頭的現身說法,Hadoop被看成大數據分析的“神器”。IDC在對中國未來幾年的預測中就專門提到了大數據,其認為未來幾年,會有越來越多的企業級用戶試水大數據平臺和應用,而這之中,Hadoop將成為最耀眼的“明星”。
盡管Hadoop整個生態系統是開源的,但是,由于它包含的軟件種類過多,且版本升級過快,大部分公司,尤其是一些中小型公司,難以在有限的時間內快速掌握Hadoop蘊含的價值。此外,Hadoop自身版本的多樣化也給很多研發人員帶來了很大的學習負擔。盡管當前市面上已有很多參考書籍,比如《Hadoop: The Definitive Guide》、《Hadoop in Action》、《Pro Hadoop》、《Hadoop Operations》等,但是,至今還沒有一本書能夠深入地剖析Hadoop內部的實現細節,比如JobTracker實現、作業調度器實現等。也正因如此,很多Hadoop初學者和研發人員只能參考網絡上一些零星的源代碼分析的文章,自己一點一點地閱讀源代碼,緩慢地學習Hadoop。而本書正是為了解決以上各種問題而編寫的,它是國內第一本深入剖析Hadoop內部實現細節的書籍。
本書以Hadoop 1.0為基礎,深入剖析了Hadoop MapReduce中各個組件的實現細節,包括RPC框架、JobTracker實現、TaskTracker實現、Task實現和作業調度器實現等。書中不僅詳細介紹了MapReduce各個組件的內部實現原理,而且結合源代碼進行了深入的剖析,使讀者可以快速全面地掌握Hadoop MapReduce設計原理和實現細節。
讀者對象
(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架構設計和實現原理的方式也許值得所有開源軟件愛好者學習和借鑒。通過閱讀本書,這部分讀者不僅能領略到開源軟件的優秀思想,還可以掌握分析開源軟件源代碼的方法和技巧,從而進一步提高使用開源軟件的效率和質量。
如何閱讀本書
本書分為四大部分(不包括附錄):
第一部分為基礎篇,簡單地介紹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章的基礎理論知識開始學習。
勘誤和支持
由于筆者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,筆者特意創建了一個在線支持與應急方案的站點http://hadoop123.com。你可以將書中的錯誤發布在Bug勘誤表頁面中。如果你遇到問題,可以訪問Q&A頁面,我將盡量在線上為讀者提供最滿意的解答。如果你有什么寶貴意見,歡迎發送郵件至dongxicheng@yahoo.com,期待能夠得到你的真摯反饋。
致謝
感謝我的導師廖華明副研究員。在我讀研沒空顧及項目的時候,她給了我一次又一次的鼓勵,她甚至專門為我寫書留出空閑時間。在廖老師的身邊,我還學會了很多專業知識以外的東西。
感謝騰訊的蔡斌老師。正是由于他的推薦,才使本書的出版成為可能。
感謝機械工業出版社華章公司的楊福川老師和孫海亮老師。是他們在這一年多的時間中始終支持著我的寫作,是他們的鼓勵和幫助使我順利完成了本書的編寫工作。
感謝對本書部分章節提出改進建議的何鵬、姜冰、鄭偉偉等人。另外,感謝給我提供各種幫助的戰科宇、周禮、劉晏辰、孟椿智、王群、王穎、曹聰、朱雪峰等人。
最后,感謝我父母的養育之恩,感謝兄長的鼓勵和支持,感謝他們時時刻刻給我信心和力量!感謝我的女朋友顓悅對我生活的悉心照料與瑣事上的寬容。
謹以此書獻給我最親愛的家人,以及眾多熱愛Hadoop的朋友們!
董西成
于北京 |
內容簡介:“Hadoop技術內幕”共兩冊,分別從源代碼的角度對“Common+HDFS”和“MapReduce的架構設計和實現原理”進行了極為詳細的分析。本書由Hadoop領域資深的實踐者親自執筆,首先介紹了MapReduce的設計理念和編程模型,然后從源代碼的角度深入分析了RPC框架、客戶端、JobTracker、TaskTracker和Task等MapReduce運行時環境的架構設計與實現原理,最后從實際應用的角度深入講解了Hadoop的性能優化、安全機制、多用戶作業調度器和下一代MapReduce框架等高級主題和內容。本書適合Hadoop的二次開發人員、應用開發工程師、運維工程師閱讀。
本書共12章,分4個部分(不包括附錄):第一部分(第1∼2章),介紹了Hadoop源代碼的組織結構、獲取、編譯、調試、閱讀環境搭建,以及MapReduce的設計理念和基本架構;第二部分(第3章),著重講解了MapReduce的編程接口,主要包括舊API和新API兩套編程接口,以及Hadoop工作流;第三部分(第4∼8章)主要分析了MapReduce的運行時環境,包括RPC框架、客戶端、JobTracker、TaskTracker和Task等的內部實現細節和機制剖析;第四部分(第9∼12章)深入講解了Hadoop的性能優化、多用戶作業調度器、安全機制和下一代MapReduce框架等高級主題。
經過幾年的快速發展,Hadoop已經成為大數據時代存儲和處理海量數據的事實標準,具有高可靠性、高擴展性、高效性和高容錯性等許多優點,在學術界備受關注,在業界則更受歡迎。Hadoop的功能非常強大,與之相伴的是使用上的復雜性,如何才能更好地使用Hadoop、更好地對Hadoop進行性能優化、擴展和定制?通過閱讀和研究它的源代碼實現以上目標是一種不錯的選擇。“Hadoop技術內幕”這兩本書根據讀者的需求,對Common、HDFS和MapReduce等核心技術的架構設計和實現原理進行了深入且詳細的分析,對于想了解Hadoop工作機制的讀者來說,這兩本書應該是十分難得的,強烈推薦。 —— EasyHadoop開源技術社區(www.easyhadoop.com) 致力于Hadoop的易用和普及
Hadoop是近兩年來技術領域最熱門的話題,從媒體界到學術界,再到企業界,都給予了高度關注。在企業界,無論是在IT領域,還是在金融、電信、生物、醫藥、制造等傳統領域,Hadoop的應用都非常廣泛,可以說只要有海量數據需要處理的地方,就有Hadoop。尤其是在IT領域,從國外的Google、Yahoo!、Microsoft、Oracle、Facebook,到國內的阿里巴巴、淘寶、騰訊、百度、新浪、搜狐,都在Hadoop的研發和應用上投入了大量的人力和資金,并獲得了豐厚的收益。隨著Hadoop的普及,用戶遇到的問題會越來越多,也會越來越復雜。要解決實際生產環境中可能遇到的復雜問題,掌握Hadoop本身的設計和實現原理是根本之道。“Hadoop技術內幕”這兩本書就本著這個目標出發,從源代碼的角度對Hadoop的工作機制進行了深入的分析,并對實踐中可能會遇到的各種問題給出了解決方案。 —— 童小軍 資深Hadoop技術專家、企業級大數據解決方案RedHadoop創始人 本書主要內容: Hadoop源代碼的組織結構、獲取方法、編譯與調試,以及閱讀環境的搭建; MapReduce的設計目標和Hadoop的基本結構; MapReduce的編程模型、核心概念、新舊API的比較,以及Hadoop的工作流; Hadoop RPC框架的原理和機制分析; 作業提交與初始化過程詳細分析; JobTracker和TaskTracker的內部實現機制剖析; Task運行過程的深度分析; Hadoop的性能優化經驗總結; Hadoop多用戶作業調度器的實現原理; Hadoop的安全機制和原理; 下一代MapReduce框架的設計思想,以及YARN、Corona、Mesos等框架的介紹和比較。 |
目錄:前 言
第一部分 基礎篇
第1章 閱讀源代碼前的準備/ 2
1.1 準備源代碼學習環境/ 2
1.1.1 基礎軟件下載/ 2
1.1.2 如何準備Windows環境/ 3
1.1.3 如何準備Linux環境/ 6
1.2 獲取Hadoop源代碼/ 7
1.3 搭建Hadoop源代碼閱讀環境/ 8
1.3.1 創建Hadoop工程/ 8
1.3.2 Hadoop源代碼閱讀技巧/ 9
1.4 Hadoop源代碼組織結構/ 10
1.5 Hadoop初體驗/ 13
1.5.1 啟動Hadoop/ 13
1.5.2 Hadoop Shell介紹/ 15
1.5.3 Hadoop Eclipse插件介紹/ 15
1.6 編譯及調試Hadoop源代碼/ 19
1.6.1 編譯Hadoop源代碼/ 19
1.6.2 調試Hadoop源代碼/ 20
1.7 小結/ 23
第2章 MapReduce設計理念與基本架構/ 24
2.1 Hadoop發展史/ 24
2.1.1 Hadoop產生背景/ 24
2.1.2 Apache Hadoop新版本的特性/ 25
2.1.3 Hadoop版本變遷/ 26
2.2 Hadoop MapReduce設計目標/ 28
2.3 MapReduce編程模型概述/ 29
2.3.1 MapReduce編程模型簡介/ 29
2.3.2 MapReduce編程實例/ 31
2.4 Hadoop基本架構/ 32
2.4.1 HDFS架構/ 33
2.4.2 Hadoop MapReduce架構/ 34
2.5 Hadoop MapReduce作業的生命周期/ 36
2.6 小結/ 38
第二部分 MapReduce編程模型篇
第3章 MapReduce編程模型/ 40
3.1 MapReduce編程模型概述/ 40
3.1.1 MapReduce編程接口體系結構/ 40
3.1.2 新舊MapReduce API比較/ 41
3.2 MapReduce API基本概念/ 42
3.2.1 序列化/ 42
3.2.2 Reporter參數/ 43
3.2.3 回調機制/ 43
3.3 Java API解析/ 44
3.3.1 作業配置與提交/ 44
3.3.2 InputFormat接口的設計與實現/ 48
3.3.3 OutputFormat接口的設計與實現/ 53
3.3.4 Mapper與Reducer解析/ 55
3.3.5 Partitioner接口的設計與實現/ 59
3.4 非Java API解析/ 61
3.4.1 Hadoop Streaming的實現原理/ 61
3.4.2 Hadoop Pipes的實現原理/ 64
3.5 Hadoop工作流/ 67
3.5.1 JobControl的實現原理/ 67
3.5.2 ChainMapper/ChainReducer的實現原理/ 69
3.5.3 Hadoop工作流引擎/ 71
3.6 小結/ 73
第三部分 MapReduce核心設計篇
第4章 Hadoop RPC框架解析/ 76
4.1 Hadoop RPC框架概述/ 76
4.2 Java基礎知識/ 77
4.2.1 Java反射機制與動態代理/ 78
4.2.2 Java網絡編程/ 80
4.2.3 Java NIO/ 82
4.3 Hadoop RPC基本框架分析/ 89
4.3.1 RPC基本概念/ 89
4.3.2 Hadoop RPC基本框架/ 91
4.3.3 集成其他開源RPC框架/ 98
4.4 MapReduce通信協議分析/ 100
4.4.1 MapReduce 通信協議概述/ 100
4.4.2 JobSubmissionProtocol通信協議/ 102
4.4.3 InterTrackerProtocol通信協議/ 102
4.4.4 TaskUmbilicalProtocol通信協議/ 103
4.4.5 其他通信協議/ 104
4.5 小結/ 106
第5章 作業提交與初始化過程分析/ 107
5.1 作業提交與初始化概述/ 107
5.2 作業提交過程詳解/ 108
5.2.1 執行Shell命令/ 108
5.2.2 作業文件上傳/ 109
5.2.3 產生InputSplit文件/ 111
5.2.4 作業提交到JobTracker/ 113
5.3 作業初始化過程詳解/ 115
5.4 Hadoop DistributedCache原理分析/ 117
5.4.1 使用方法介紹/ 118
5.4.2 工作原理分析/ 120
5.5 小結/ 122
第6章 JobTracker內部實現剖析/ 123
6.1 JobTracker概述/ 123
6.2 JobTracker啟動過程分析/ 125
6.2.1 JobTracker啟動過程概述/ 125
6.2.2 重要對象初始化/ 125
6.2.3 各種線程功能/ 128
6.2.4 作業恢復/ 129
6.3 心跳接收與應答/ 129
6.3.1 更新狀態/ 131
6.3.2 下達命令/ 131
6.4 Job和Task運行時信息維護/ 134
6.4.1 作業描述模型/ 134
6.4.2 JobInProgress/ 136
6.4.3 TaskInProgress/ 137
6.4.4 作業和任務狀態轉換圖/ 139
6.5 容錯機制/ 141
6.5.1 JobTracker容錯/ 141
6.5.2 TaskTracker容錯/ 142
6.5.3 Job/Task容錯/ 145
6.5.4 Record容錯/ 147
6.5.5 磁盤容錯/ 151
6.6 任務推測執行原理/ 152
6.6.1 計算模型假設/ 153
6.6.2 1.0.0版本的算法/ 153
6.6.3 0.21.0版本的算法/ 154
6.6.4 2.0版本的算法/ 156
6.7 Hadoop資源管理/ 157
6.7.1 任務調度框架分析/ 159
6.7.2 任務選擇策略分析/ 162
6.7.3 FIFO調度器分析/ 164
6.7.4 Hadoop資源管理優化/ 165
6.8 小結/ 168
第7章 TaskTracker內部實現剖析/ 169
7.1 TaskTracker概述/ 169
7.2 TaskTracker啟動過程分析/ 170
7.2.1 重要變量初始化/ 171
7.2.2 重要對象初始化/ 171
7.2.3 連接JobTracker/ 172
7.3 心跳機制/ 172
7.3.1 單次心跳發送/ 172
7.3.2 狀態發送/ 175
7.3.3 命令執行/ 178
7.4 TaskTracker行為分析/ 179
7.4.1 啟動新任務/ 179
7.4.2 提交任務/ 179
7.4.3 殺死任務/ 181
7.4.4 殺死作業/ 182
7.4.5 重新初始化/ 184
7.5 作業目錄管理/ 184
7.6 啟動新任務/ 186
7.6.1 任務啟動過程分析/ 186
7.6.2 資源隔離機制/ 193
7.7 小結/ 195
第8章 Task運行過程分析/ 196
8.1 Task運行過程概述/ 196
8.2 基本數據結構和算法/ 197
8.2.1 IFile存儲格式/ 197
8.2.2 排序/ 198
8.2.3 Reporter/ 201
8.3 Map Task內部實現/ 204
8.3.1 Map Task整體流程/ 204
8.3.2 Collect過程分析/ 205
8.3.3 Spill過程分析/ 213
8.3.4 Combine過程分析/ 214
8.4 Reduce Task內部實現/ 214
8.4.1 Reduce Task整體流程/ 215
8.4.2 Shuffle和Merge階段分析/ 215
8.4.3 Sort和Reduce階段分析/ 218
8.5 Map/Reduce Task優化/ 219
8.5.1 參數調優/ 219
8.5.2 系統優化/ 220
8.6 小結/ 224
第四部分 MapReduce高級篇
第9章 Hadoop性能調優/ 228
9.1 概述/ 228
9.2 從管理員角度進行調優/ 229
9.2.1 硬件選擇/ 229
9.2.2 操作系統參數調優/ 229
9.2.3 JVM參數調優/ 230
9.2.4 Hadoop參數調優/ 230
9.3 從用戶角度進行調優/ 235
9.3.1 應用程序編寫規范/ 235
9.3.2 作業級別參數調優/ 235
9.3.3 任務級別參數調優/ 239
9.4 小結/ 240
第10章 Hadoop多用戶作業調度器/ 241
10.1 多用戶調度器產生背景/ 241
10.2 HOD/ 242
10.2.1 Torque資源管理器/ 242
10.2.2 HOD作業調度/ 243
10.3 Hadoop隊列管理機制/ 245
10.4 Capacity Scheduler實現/ 246
10.4.1 Capacity Scheduler功能介紹/ 247
10.4.2 Capacity Scheduler實現/ 249
10.4.3 多層隊列調度/ 254
10.5 Fair Scheduler實現/ 255
10.5.1 Fair Scheduler功能介紹/ 255
10.5.2 Fair Scheduler實現/ 258
10.5.3 Fair Scheduler與Capacity Scheduler對比/ 263
10.6 其他Hadoop調度器介紹/ 264
10.7 小結/ 265
第11章 Hadoop安全機制/ 266
11.1 Hadoop安全機制概述/ 266
11.1.1 Hadoop面臨的安全問題/ 266
11.1.2 Hadoop對安全方面的需求/ 267
11.1.3 Hadoop安全設計基本原則/ 267
11.2 基礎知識/ 268
11.2.1 安全認證機制/ 268
11.2.2 Kerberos介紹/ 270
11.3 Hadoop安全機制實現/ 273
11.3.1 RPC/ 273
11.3.2 HDFS/ 276
11.3.3 MapReduce/ 278
11.3.4 上層服務/ 280
11.4 應用場景總結/ 281
11.4.1 文件存取/ 281
11.4.2 作業提交與運行/ 282
11.4.3 上層中間件訪問Hadoop/ 282
11.5 小結/ 283
第12章 下一代MapReduce框架/ 284
12.1 第一代MapReduce框架的局限性/ 284
12.2 下一代MapReduce框架概述/ 284
12.2.1 基本設計思想/ 284
12.2.2 資源統一管理平臺/ 286
12.3 Apache YARN/ 287
12.3.1 Apache YARN基本框架/ 287
12.3.2 Apache YARN工作流程/ 290
12.3.3 Apache YARN設計細節/ 291
12.3.4 MapReduce與YARN結合/ 294
12.4 Facebook Corona / 298
12.4.1 Facebook Corona基本框架/ 298
12.4.2 Facebook Corona工作流程/ 300
12.4.3 YARN與Corona對比/ 303
12.5 Apache Mesos/ 304
12.5.1 Apache Mesos基本框架/ 304
12.5.2 Apache Mesos資源分配/ 305
12.5.3 MapReduce與Mesos結合/ 307
12.6 小結/ 309
附錄A 安裝Hadoop過程中可能存在的問題及解決方案/ 310
附錄B Hadoop默認HTTP端口號以及HTTP地址/ 312
參考資料/ 313 |
序: |