發表於2024-11-05
阿裏巴巴集團專傢鼎力推薦,阿裏巴巴資深Java開發和大數據專傢撰寫
結閤大量圖和示例,對Spark的核心模塊、部署和協作模塊的實現原理與使用技巧進行瞭深入的剖析與解讀
本書特色:
按照源碼分析的習慣設計,條分縷析。
多圖、多示例,幫讀者快速在頭腦中“建模”。
原理與實現剖析,幫助讀者提升架構設計、程序設計等方麵的能力。
盡可能保留較多的源碼,方便離綫和移動環境的閱讀。
本書對Spark源代碼進行瞭全麵而深入的分析,旨在為Spark的優化、定製和擴展提供原理性的指導。阿裏巴巴集團專傢鼎力推薦,阿裏巴巴資深Java開發和大數據專傢撰寫。本書對Spark的核心模塊、部署和協作模塊的實現原理與使用技巧進行瞭深入的剖析與解讀。
本書分為三篇:
準備篇(第1~2章),介紹瞭Spark的環境搭建、設計理念與基本架構,幫助讀者瞭解一些背景知識。
核心設計篇(第3~7章),著重講解SparkContext的初始化、存儲體係、任務提交與執行、計算引擎及部署模式的原理和源碼分析。通過這部分的內容,讀者可以通過源碼剖析更加深入理解Spark的核心設計與實現,以便在實際使用中能夠快速解決綫上問題並對性能進行調優。
擴展篇(第8~11章),主要講解基於Spark核心的各種擴展及應用,包括SQL處理引擎、Hive處理、流式計算框架Spark Streaming、圖計算框架GraphX、機器學習庫MLlib等內容。通過閱讀這部分內容,讀者可以擴展實際項目中對Spark的應用場景,讓Spark煥發活力。
耿嘉安,10年IT行業相關經驗。就職於阿裏巴巴商傢業務事業部,任資深Java工程師,專注於開源和大數據領域,目前與小夥伴們基於ODPS構建阿裏的大數據商業解決方案——禦膳房。在大量的工作實踐中,對J2EE、JVM、Tomcat、Spring、Hadoop、Spark、MySQL、Redis都有深入研究,尤其喜歡剖析開源項目的源碼實現。早期從事J2EE企業級應用開發,對Java相關技術有獨到見解。業餘時間喜歡研究中國古代曆史,古詩詞,旅遊,足球等。
伴隨著互聯網的不斷演進,人類所麵臨的數據在體量,産生速度和多樣性方麵階躍性發展,隨之而來的是數據計算和處理方式的多樣化,目前越來越多的數據處理鏈路是通過多種計算組閤而成,例如批量與流式計算,圖計算,交互式查詢等。而以往幾個獨立計算係統“物理”拼裝組閤成的復雜係統在處理這些問題時,往往在成本和效率上産生瓶頸。Spark從迭代計算的數據復用切入,底層一個runtime來支撐多種計算模型,越來越受到業界的重視,社區發展非常迅速。而本書從源碼分析角度深入剖析係統,希望讀者不僅做到知其然,更要知其所以然,對Spark有更加深入的研究。本書作者在相關領域有多年豐富的實踐和應用經驗,相信通過研讀本書必定可以給讀者帶來事半功倍的效果。
——強琦 阿裏雲計算平颱資深技術專傢
這是一本不錯的Spark的入門書籍,完全從工程師的視角齣發,從安裝到使用再到高階應用。有些時候甚至有些囉嗦,但這不正是我們讀者需要的麼?作者用他專一的一綫工程師視角與在阿裏麵臨的場景結閤,寫作的落筆相當接地氣。這是一本難得的工程師參考用書。
——張茂森 阿裏巴巴商傢業務事業部資深數據挖掘專傢
前言
準 備 篇
第1章 環境準備2
1.1 運行環境準備2
1.1.1 安裝JDK3
1.1.2 安裝Scala3
1.1.3 安裝Spark4
1.2 Spark初體驗4
1.2.1 運行spark-shell4
1.2.2 執行word count5
1.2.3 剖析spark-shell7
1.3 閱讀環境準備11
1.4 Spark源碼編譯與調試13
1.5 小結17
第2章 Spark設計理念與基本架構18
2.1 初識Spark18
2.1.1 Hadoop MRv1的局限18
2.1.2 Spark使用場景20
2.1.3 Spark的特點20
2.2 Spark基礎知識20
2.3 Spark基本設計思想22
2.3.1 Spark模塊設計22
2.3.2 Spark模型設計24
2.4 Spark基本架構25
2.5 小結26
核心設計篇
第3章 SparkContext的初始化28
3.1 SparkContext概述28
3.2 創建執行環境SparkEnv30
3.2.1 安全管理器SecurityManager31
3.2.2 基於Akka的分布式消息係統ActorSystem31
3.2.3 map任務輸齣跟蹤器mapOutputTracker32
3.2.4 實例化ShuffleManager34
3.2.5 shuffle綫程內存管理器ShuffleMemoryManager34
3.2.6 塊傳輸服務BlockTransferService35
3.2.7 BlockManagerMaster介紹35
3.2.8 創建塊管理器BlockManager36
3.2.9 創建廣播管理器Broadcast-Manager36
3.2.10 創建緩存管理器CacheManager37
3.2.11 HTTP文件服務器HttpFile-Server37
3.2.12 創建測量係統MetricsSystem39
3.2.13 創建SparkEnv40
3.3 創建metadataCleaner41
3.4 SparkUI詳解42
3.4.1 listenerBus詳解43
3.4.2 構造JobProgressListener46
3.4.3 SparkUI的創建與初始化47
3.4.4 Spark UI的頁麵布局與展示49
3.4.5 SparkUI的啓動54
3.5 Hadoop相關配置及Executor環境變量54
3.5.1 Hadoop相關配置信息54
3.5.2 Executor環境變量54
3.6 創建任務調度器TaskScheduler55
3.6.1 創建TaskSchedulerImpl55
3.6.2 TaskSchedulerImpl的初始化57
3.7 創建和啓動DAGScheduler57
3.8 TaskScheduler的啓動60
3.8.1 創建LocalActor60
3.8.2 ExecutorSource的創建與注冊62
3.8.3 ExecutorActor的構建與注冊64
3.8.4 Spark自身ClassLoader的創建64
3.8.5 啓動Executor的心跳綫程66
3.9 啓動測量係統MetricsSystem69
3.9.1 注冊Sources70
3.9.2 注冊Sinks70
3.9.3 給Sinks增加Jetty的Servlet-ContextHandler71
3.10 創建和啓動ExecutorAllocation-Manager72
3.11 ContextCleaner的創建與啓動73
3.12 Spark環境更新74
3.13 創建DAGSchedulerSource和BlockManagerSource76
3.14 將SparkContext標記為激活77
3.15 小結78
第4章 存儲體係79
4.1 存儲體係概述79
4.1.1 塊管理器BlockManager的實現79
4.1.2 Spark存儲體係架構81
4.2 shuffle服務與客戶端83
4.2.1 Block的RPC服務84
4.2.2 構造傳輸上下文Transpor-tContext85
4.2.3 RPC客戶端工廠Transport-ClientFactory86
4.2.4 Netty服務器TransportServer87
4.2.5 獲取遠程shuffle文件88
4.2.6 上傳shuffle文件89
4.3 BlockManagerMaster對Block-Manager的管理90
4.3.1 BlockManagerMasterActor90
4.3.2 詢問Driver並獲取迴復方法92
4.3.3 嚮BlockManagerMaster注冊BlockManagerId93
4.4 磁盤塊管理器DiskBlockManager94
4.4.1 DiskBlockManager的構造過程94
4.4.2 獲取磁盤文件方法getFile96
4.4.3 創建臨時Block方法create-TempShuffleBlock96
4.5 磁盤存儲DiskStore97
4.5.1 NIO讀取方法getBytes97
4.5.2 NIO寫入方法putBytes98
4.5.3 數組寫入方法putArray98
4.5.4 Iterator寫入方法putIterator98
4.6 內存存儲MemoryStore99
4.6.1 數據存儲方法putBytes101
4.6.2 Iterator寫入方法putIterator詳解101
4.6.3 安全展開方法unrollSafely102
4.6.4 確認空閑內存方法ensureFreeSpace105
4.6.5 內存寫入方法putArray107
4.6.6 嘗試寫入內存方法tryToPut108
4.6.7 獲取內存數據方法getBytes109
4.6.8 獲取數據方法getValues110
4.7 Tachyon存儲TachyonStore110
4.7.1 Tachyon簡介111
4.7.2 TachyonStore的使用112
4.7.3 寫入Tachyon內存的方法putIntoTachyonStore113
4.7.4 獲取序列化數據方法getBytes113
4.8 塊管理器BlockManager114
4.8.1 移齣內存方法dropFrom-Memory114
4.8.2 狀態報告方法reportBlockStatus116
4.8.3 單對象塊寫入方法putSingle117
4.8.4 序列化字節塊寫入方法putBytes118
4.8.5 數據寫入方法doPut118
4.8.6 數據塊備份方法replicate121
4.8.7 創建DiskBlockObjectWriter的方法getDiskWriter125
4.8.8 獲取本地Block數據方法getBlockData125
4.8.9 獲取本地shuffle數據方法doGetLocal126
4.8.10 獲取遠程Block數據方法doGetRemote127
4.8.11 獲取Block數據方法get128
4.8.12 數據流序列化方法dataSerializeStream129
4.9 metadataCleaner和broadcastCleaner129
4.10 緩存管理器CacheManager130
4.11 壓縮算法133
4.12 磁盤寫入實現DiskBlockObjectWriter133
4.13 塊索引shuffle管理器IndexShuffleBlockManager135
4.14 shuffle內存管理器ShuffleMemoryManager137
4.15 小結138
第5章 任務提交與執行139
5.1 任務概述139
5.2 廣播Hadoop的配置信息142
5.3 RDD轉換及DAG構建144
5.3.1 為什麼需要RDD144
5.3.2 RDD實現分析146
5.4 任務提交152
5.4.1 任務提交的準備152
5.4.2 finalStage的創建與Stage的劃分157
5.4.3 創建Job163
5.4.4 提交Stage164
5.4.5 提交Task165
5.5 執行任務176
5.5.1 狀態更新176
5.5.2 任務還原177
5.5.3 任務運行178
5.6 任務執行後續處理179
5.6.1 計量統計與執行結果序列化179
5.6.2 內存迴收180
5.6.3 執行結果處理181
5.7 小結187
第6章 計算引擎188
6.1 迭代計算188
6.2 什麼是shuffle192
6.3 map端計算結果緩存處理194
6.3.1 map端計算結果緩存聚閤195
6.3.2 map端計算結果簡單緩存200
6.3.3 容量限製201
6.4 map端計算結果持久化204
6.4.1 溢齣分區文件205
6.4.2排序與分區分組207
6.4.3 分區索引文件209
6.5 reduce端讀取中間計算結果210
6.5.1 獲取map任務狀態213
6.5.2 劃分本地與遠程Block215
6.5.3 獲取遠程Block217
6.5.4 獲取本地Block218
6.6 reduce端計算219
6.6.1 如何同時處理多個map任務的中間結果219
6.6.2 reduce端在緩存中對中間計算結果執行聚閤和排序220
6.7 map端與reduce端組閤分析221
6.7.1 在map端溢齣分區文件,在reduce端閤並組閤221
6.7.2 在map端簡單緩存、排序分組,在reduce端閤並組閤222
6.7.3 在map端緩存中聚閤、排序分組,在reduce端組閤222
6.8 小結223
第7章 部署模式224
7.1 local部署模式225
7.2 local-cluster部署模式225
7.2.1 LocalSparkCluster的啓動226
7.2.2 CoarseGrainedSchedulerBackend的啓動236
7.2.3 啓動AppClient237
7.2.4 資源調度242
7.2.5 local-cluster模式的任務執行253
7.3 Standalone部署模式255
7.3.1 啓動Standalone模式255
7.3.2 啓動Master分析257
7.3.3 啓動Worker分析259
7.3.4 啓動Driver Application分析261
7.3.5 Standalone模式的任務執行263
7.3.6 資源迴收263
7.4 容錯機製266
7.4.1 Executor異常退齣266
7.4.2 Worker異常退齣268
7.4.3 Master異常退齣269
7.5 其他部署方案276
7.5.1 YARN277
7.5.2 Mesos280
7.6 小結282
擴 展 篇
第8章 Spark SQL284
8.1 Spark SQL總體設計284
8.1.1 傳統關係型數據庫SQL運行原理285
8.1.2 Spark SQL運行架構286
8.2 字典錶Catalog288
8.3 Tree和TreeNode289
8.4 詞法解析器Parser的設計與實現293
8.4.1 SQL語句解析的入口294
8.4.2 建錶語句解析器DDLParser295
8.4.3 SQL語句解析器SqlParser296
8.4.4 Spark代理解析器SparkSQLParser299
8.5 Rule和RuleExecutor300
8.6 Analyzer與Optimizer的設計與實現302
8.6.1 語法分析器Analyzer304
8.6.2 優化器Optimizer305
8.7 生成物理執行計劃306
8.8 執行物理執行計劃308
8.9 Hive311
8.9.1 Hive SQL語法解析器311
8.9.2 Hive SQL元數據分析313
8.9.3 Hive SQL物理執行計劃314
8.10 應用舉例:JavaSparkSQL314
8.11 小結320
第9章 流式計算321
9.1 Spark Streaming總體設計321
9.2 StreamingContext初始化323
9.3 輸入流接收器規範Receiver324
9.4 數據流抽象DStream325
9.4.1 Dstream的離散化326
9.4.2 數據源輸入流InputDStream327
9.4.3 Dstream轉換及構建DStream Graph329
9.5 流式計算執行過程分析330
9.5.1 流式計算例子CustomReceiver331
9.5.2 Spark Streaming執行環境構建335
9.5.3 任務生成過程347
9.6 窗口操作355
9.7 應用舉例357
9.7.1 安裝mosquitto358
9.7.2 啓動mosquitto358
9.7.3 MQTTWordCount359
9.8 小結361
第10章 圖計算362
10.1 Spark GraphX總體設計362
10.1.1 圖計算模型363
10.1.2 屬性圖365
10.1.3 GraphX的類繼承體係367
10.2 圖操作368
10.2.1 屬性操作368
10.2.2 結構操作368
10.2.3 連接操作369
10.2.4 聚閤操作370
10.3 Pregel API371
10.3.1 Dijkstra算法373
10.3.2 Dijkstra的實現376
10.4 Graph的構建377
10.4.1 從邊的列錶加載Graph377
10.4.2 在Graph中創建圖的方法377
10.5 頂點集閤抽象VertexRDD378
10.6 邊集閤抽象EdgeRDD379
10.7 圖分割380
10.8 常用算法382
10.8.1 網頁排名382
10.8.2 Connected Components的應用386
10.8.3 三角關係統計388
10.9 應用舉例390
10.10 小結391
第11章 機器學習392
11.1機器學習概論392
11.2 Spark MLlib總體設計394
11.3 數據類型394
11.3.1 局部嚮量394
11.3.2標記點395
11.3.3局部矩陣396
11.3.4分布式矩陣396
11.4基礎統計398
11.4.1摘要統計398
11.4.2相關統計399
11.4.3分層抽樣401
11.4.4假設檢驗401
11.4.5隨機數生成402
11.5分類和迴歸405
11.5.1數學公式405
11.5.2綫性迴歸407
11.5.3分類407
深入理解Spark:核心思想與源碼分析 下載 mobi epub pdf txt 電子書 格式
深入理解Spark:核心思想與源碼分析 下載 mobi pdf epub txt 電子書 格式 2024
深入理解Spark:核心思想與源碼分析 下載 mobi epub pdf 電子書很不錯的一本書,對研究代碼很有幫助!
評分Spark技術很好的參考書,尤其是對於進階階段的Spark編程人員。推薦購買。
評分這本書終於看完瞭,內容還可以,有用推薦購買
評分公司統一買的書,公司統一買的書,公司統一買的書,公司統一買的書。公司統一買的書,公司統一買的書,公司統一買的書,公司統一買的書。
評分值得一看。。。。
評分學習spark的一本好書,一把利器!
評分還不錯。價錢便宜,速度快。。。。。。
評分為瞭學習spark大數據買的。書的內容很不錯。
評分前兩天入手瞭這本書,翻閱瞭兩天,內容非常不錯,對新手非常友好,對java或者scala語言不是特彆瞭解的我看起來也不費力,同時對於spark的核心設計思想也進行瞭深入的講解,並結閤源碼對思想進行解釋,講解非常清晰,書最後還包含瞭大數據知識方麵的擴展。總體來說非常不錯,希望深入瞭解spark的同學可以考慮入手
深入理解Spark:核心思想與源碼分析 mobi epub pdf txt 電子書 格式下載 2024