編輯推薦
適讀人群 :本書主要適閤於以下讀者:1.想要學習Scala語言的開發人員2.想要學習Spark原理的數據開發人員3.服務器和分布式係統開發人員4.分布式係統架構師5.Spark集群運維、部署及性 多位專傢聯袂推薦,360大數據專傢撰寫,剖析Spark 2.1.0架構與實現精髓
細化到方法級,提煉齣多個流程圖,立體呈現架構、環境、調度、存儲、計算、部署、API七大核心設計
內容簡介
多位專傢聯袂推薦,360大數據專傢撰寫,剖析Spark 2.1.0架構與實現精髓。細化到方法級,提煉齣多個流程圖,立體呈現架構、環境、調度、存儲、計算、部署、API七大核心設計。本書一共有10章內容,主要包括以下部分。
準備部分:介紹Spark的環境搭建和基本原理,有效降低瞭讀者進入Spark世界的門檻,同時對Spark背景知識及整體設計能有宏觀的認識。
基礎部分:介紹Spark的基礎設施(包括配置、RPC、度量等)、初始化、執行環境等內容,使讀者深入理解RPC框架的設計、執行環境功能,是瞭解核心內容的前提。
核心部分:該部分是Spark*為核心的部分,涵蓋存儲體係、調度係統、計算引擎、部署模式等。讀者將充分瞭解Spark的數據處理與實現細節,透視本質,是進行定製化、性能優化、精準排查的基礎,學習和工作更加高效。
API部分:這部分主要對Spark的新老API進行對比,對新API進行簡單介紹。
作者簡介
耿嘉安 10餘年IT行業相關經驗。先後就職於阿裏巴巴、藝龍、360,專注於開源和大數據領域。在大量的工作實踐中,對J2EE、JVM、Tomcat、Spring、Hadoop、Spark、MySQL、Redis都有深入研究,尤其喜歡剖析開源項目的源碼實現。早期從事J2EE企業級應用開發,對Java相關技術有獨到見解。著有《深入理解Spark:核心思想與源碼分析》一書。
目錄
目錄 Contents
本書贊譽
前言
第1章 環境準備 1
1.1 運行環境準備 2
1.1.1 安裝JDK 2
1.1.2 安裝Scala 2
1.1.3 安裝Spark 3
1.2 Spark初體驗 4
1.2.1 運行spark-shell 4
1.2.2 執行word count 5
1.2.3 剖析spark-shell 9
1.3 閱讀環境準備 14
1.3.1 安裝SBT 15
1.3.2 安裝Git 15
1.3.3 安裝Eclipse Scala IDE插件 15
1.4 Spark源碼編譯與調試 17
1.5 小結 23
第2章 設計理念與基本架構 24
2.1 初識Spark 25
2.1.1 Hadoop MRv1的局限25
2.1.2 Spark的特點 26
2.1.3 Spark使用場景 28
2.2 Spark基礎知識 29
2.3 Spark基本設計思想 31
2.3.1 Spark模塊設計 32
2.3.2 Spark模型設計 34
2.4 Spark基本架構 36
2.5 小結 38
第3章 Spark基礎設施 39
3.1 Spark配置 40
3.1.1 係統屬性中的配置 40
3.1.2 使用SparkConf配置的API 41
3.1.3 剋隆SparkConf配置 42
3.2 Spark內置RPC框架 42
3.2.1 RPC配置TransportConf 45
3.2.2 RPC客戶端工廠Transport- ClientFactory 47
3.2.3 RPC服務端TransportServer 53
3.2.4 管道初始化 56
3.2.5 TransportChannelHandler詳解 57
3.2.6 服務端RpcHandler詳解 63
3.2.7 服務端引導程序Transport-ServerBootstrap 68
3.2.8 客戶端TransportClient詳解 71
3.3 事件總綫 78
3.3.1 ListenerBus的繼承體係 79
3.3.2 SparkListenerBus詳解 80
3.3.3 LiveListenerBus詳解 83
3.4 度量係統 87
3.4.1 Source繼承體係 87
3.4.2 Sink繼承體係 89
3.5 小結 92
第4章 SparkContext的初始化 93
4.1 SparkContext概述 94
4.2 創建Spark環境 97
4.3 SparkUI的實現 100
4.3.1 SparkUI概述 100
4.3.2 WebUI框架體係 102
4.3.3 創建SparkUI 107
4.4 創建心跳接收器 111
4.5 創建和啓動調度係統112
4.6 初始化塊管理器BlockManager 114
4.7 啓動度量係統 114
4.8 創建事件日誌監聽器115
4.9 創建和啓動ExecutorAllocation-Manager 116
4.10 ContextCleaner的創建與啓動 120
4.10.1 創建ContextCleaner 120
4.10.2 啓動ContextCleaner 120
4.11 額外的SparkListener與啓動事件總綫 122
4.12 Spark環境更新 123
4.13 SparkContext初始化的收尾 127
4.14 SparkContext提供的常用方法 128
4.15 SparkContext的伴生對象130
4.16 小結 131
第5章 Spark執行環境 132
5.1 SparkEnv概述 133
5.2 安全管理器SecurityManager 133
5.3 RPC環境 135
5.3.1 RPC端點RpcEndpoint 136
5.3.2 RPC端點引用RpcEndpointRef 139
5.3.3 創建傳輸上下文TransportConf 142
5.3.4 消息調度器Dispatcher 142
5.3.5 創建傳輸上下文Transport-Context 154
5.3.6 創建傳輸客戶端工廠Transport-ClientFactory 159
5.3.7 創建TransportServer 160
5.3.8 客戶端請求發送 162
5.3.9 NettyRpcEnv中的常用方法 173
5.4 序列化管理器SerializerManager 175
5.5 廣播管理器BroadcastManager 178
5.6 map任務輸齣跟蹤器 185
5.6.1 MapOutputTracker的實現 187
5.6.2 MapOutputTrackerMaster的實現原理 191
5.7 構建存儲體係 199
5.8 創建度量係統 201
5.8.1 MetricsCon?g詳解 203
5.8.2 MetricsSystem中的常用方法 207
5.8.3 啓動MetricsSystem 209
5.9 輸齣提交協調器 211
5.9.1 OutputCommitCoordinator-Endpoint的實現 211
5.9.2 OutputCommitCoordinator的實現 212
5.9.3 OutputCommitCoordinator的工作原理 216
5.10 創建SparkEnv 217
5.11 小結 217
第6章 存儲體係 219
6.1 存儲體係概述 220
6.1.1 存儲體係架構 220
6.1.2 基本概念 222
6.2 Block信息管理器 227
6.2.1 Block鎖的基本概念 227
6.2.2 Block鎖的實現 229
6.3 磁盤Block管理器 234
6.3.1 本地目錄結構 234
6.3.2 DiskBlockManager提供的方法 236
6.4 磁盤存儲DiskStore 239
6.5 內存管理器 242
6.5.1 內存池模型 243
6.5.2 StorageMemoryPool詳解 244
6.5.3 MemoryManager模型 247
6.5.4 Uni?edMemoryManager詳解 250
6.6 內存存儲MemoryStore 252
6.6.1 MemoryStore的內存模型 253
6.6.2 MemoryStore提供的方法 255
6.7 塊管理器BlockManager 265
6.7.1 BlockManager的初始化 265
6.7.2 BlockManager提供的方法 266
6.8 BlockManagerMaster對Block-Manager的管理 285
6.8.1 BlockManagerMaster的職責 285
6.8.2 BlockManagerMasterEndpoint詳解 286
6.8.3 BlockManagerSlaveEndpoint詳解 289
6.9 Block傳輸服務 290
6.9.1 初始化NettyBlockTransfer-Service 291
6.9.2 NettyBlockRpcServer詳解 292
6.9.3 Shuf?e客戶端 296
6.10 DiskBlockObjectWriter詳解 305
6.11 小結 308
第7章 調度係統 309
7.1 調度係統概述 310
7.2 RDD詳解 312
7.2.1 為什麼需要RDD 312
7.2.2 RDD
前言/序言
Preface 前 言為什麼寫這本書給本書寫前言時,讓我想起瞭兩年前給《深入理解Spark:核心思想與源碼分析》一書寫前言的經曆。我不禁想起崔護的《題都城南莊》這首詩,詩的內容是:
去年今日此門中,人麵桃花相映紅。
人麵不知何處去,桃花依舊笑春風。
從核心思想和架構來看,Spark依然是那個Spark,但是我已經找瞭一個新的“東傢”。我的年齡不知不覺中又長瞭兩歲,Spark也在大數據領域從“新貴”變成瞭“老人”。Spark的版本從0.x.x到2.x.x基本上也是用瞭兩年時間。
自從《深入理解Spark:核心思想與源碼分析》一書齣版後,引起瞭一些市場反響,更難得的是得到瞭很多讀者的反饋。一些熱心的讀者通過微信或者郵件嚮我指齣瞭書中內容的很多不足之處,包括錯彆字、錯誤的描述、代碼分析有點像流水賬、提綱挈領的內容偏少、代碼版本過低等。一些錯誤在修訂的版本中得到瞭解決,有些修正的內容則通過單獨寫博客來補充。在與讀者的溝通過程中,也糾正瞭我對一些問題的理解偏差。再次深深地感謝廣大讀者的支持與幫助!
一些讀者對《深入理解Spark:核心思想與源碼分析》一書的內容非常肯定,希望能夠齣第2版,高婧雅編輯也一再“慫恿”我,但是我一直沒有寫第2版的打算。我當時希望有人能夠以更好的方式寫一本介紹和分析Spark 2.0版本的源碼分析書籍,因為我感覺之前的寫作方式的確不是很好。在我心中一直有個矛盾:如果源碼太少,源碼分析的書籍將退化成單純講原理的書籍,對於想深入理解Spark實現的讀者來說這是不夠的;如果源碼太多,又讓人有堆砌代碼或者“混”篇幅的感覺。很多源碼分析的書隻是簡單說說接口或者方法的功能,讓人始終有種“霧裏看花”的感覺。所以我一直很期待能有更好的方式來寫作源碼分析類的書。
在一年多的等待中,我始終沒有發現類似書籍的齣現,於是我打算再做一次嘗試。這次擯棄瞭《深入理解Spark:核心思想與源碼分析》一書中按照代碼執行流程分析的方式,改為先從整體上介紹一個係統,然後逐個分析每個組件的功能,最後將這些組件之間的關係用流程圖的方式串聯起來。本書的寫作方式依然犯有代碼過多的“毛病”,但我還是期待本書能帶來一些新的氣象。
本書的主要特色按照源碼分析的習慣設計,從腳本分析到初始化,再到核心內容。整個過程遵循由淺入深的基本思路。
每一章先對本章的內容有個總體介紹,然後深入分析各個組件的實現原理,最後將各個組件之間的關係通過執行流程來展現。
本書盡可能地用圖來展示原理,以加速讀者對內容的掌握。
本書講解的很多實現及原理都值得藉鑒,可以幫助讀者提升架構設計、程序設計等方麵的能力。
本書盡可能保留較多的源碼,以便於初學者能夠在脫離辦公環境的地方(如地鐵、公交等),也能輕鬆閱讀。
讀者對象源碼閱讀是一項苦差事,人力和時間成本都很高,尤其對於剛剛接觸Spark的人來說更是如此。本書盡可能保留源碼,使得分析過程不至於産生跳躍感,目的是降低大多數人的學習門檻。如果你是從事IT工作1~3年的新人或者希望開始學習Spark的核心知識,本書非常適閤你。如果你已經對Spark有所瞭解或者已經使用它,還想進一步提高自己,那麼本書更適閤你。如果你是一個開發新手,對Java、Linux等基礎知識還不是很瞭解的話,本書可能不太適閤你。如果你已經對Spark有深入的研究,本書也許可以作為你的參考資料。
總體來說,本書適閤以下人群:
已經瞭解過Spark,但還想深入理解Spark實現原理的人;大數據技術愛好者;對性能優化和部署方案感興趣的運維工程師與架構師;開源代碼愛好者,喜歡研究源碼的同學可以通過本書學到一些閱讀源碼的方式、方法。
本書不會教你如何開發Spark應用程序,而隻拿word count的經典例子做演示。本書會簡單介紹Hadoop MapReduce、Hadoop YARN、Mesos、Alluxio(Tachyon)、ZooKeeper、HDFS、Akka、Jetty、Netty,但不會過多介紹這些框架的使用,因為市場上已經有豐富的書籍供讀者挑選。本書也不會過多介紹Scala、Java、Shell的語法,讀者可以在市場上選擇適閤自己的書籍閱讀。本書將無比適閤那些想要破解“潘多拉魔盒”的人!
如何閱讀本書本書一共有10章內容,主要包括以下部分。
準備部分(第1~2章):簡單介紹瞭Spark的環境搭建和基本原理,幫助讀者瞭解一些背景知識。
基礎部分(第3~5章):介紹Spark的基礎設施、SparkContext的初始化、Spark執行環境等內容。
核心部分(第6~9章):這是Spark最為核心的部分,包括存儲體係、調度係統、計算引擎、部署模式等。
API部分(第10章):這部分主要對Spark的新舊API進行對比,對新API進行介紹。
本書最後的附錄中還包括一些內容:附錄A介紹的是Spark中最常用的工具類Utils;附錄B是Akka的簡介;附錄C為Jetty的簡介和工具類JettyUtils的介紹;附錄D為Metrics庫的簡介和Metrics中部分API的介紹;附錄E演示瞭Hadoop 1.0版本中的word count例子;附錄F
Spark內核設計的藝術:架構設計與實現 下載 mobi epub pdf txt 電子書 格式