《Apache Spark源碼剖析》是2015年電子工業出版社出版的圖書,作者是許鵬。
基本介紹
- 中文名:Apache Spark源碼剖析
- 作者:許鵬
- 類別:網路與網際網路
- 出版社:電子工業出版社
- 出版時間:2015年03月
- 頁數:304 頁
- 定價:68 元
- 開本:16 開
- 裝幀:平裝
- ISBN: 9787121254208
內容簡介,書籍概要,編輯推薦,內容提要,圖書目錄,作者簡介,媒體評論,前言,
內容簡介
《Apache Spark源碼剖析》以Spark 1.02版本源碼為切入點,著力於探尋Spark所要解決的主要問題及其解決辦法,通過一系列精心設計的小實驗來分析每一步背後的處理邏輯。
《Apache Spark源碼剖析》第3~5章詳細介紹了Spark Core中作業的提交與執行,對容錯處理也進行了詳細分析,有助讀者深刻把握Spark實現機理。第6~9章對Spark Lib庫進行了初步的探索。在對源碼有了一定的分析之後,讀者可儘快掌握Spark技術。
《Apache Spark源碼剖析》對於Spark套用開發人員及Spark集群管理人員都有極 好的學習價值;對於那些想從源碼學習而又不知如何入手的讀者,也不失為一種借鑑。
書籍概要
Apache Spark源碼剖析(全面系統介紹Spark源碼,提供分析源碼的實用技巧和合理的閱讀順序,充分了解Spark的設計思想和運行機理)
編輯推薦
Spark Contributor,Databricks工程師連城,華為大數據平台開發部部長陳亮,網易杭州研究院副院長汪源,TalkingData首席數據科學家張夏天聯袂力薦
1.本書全面、系統地介紹了Spark源碼,深入淺出,細緻入微
2.提供給讀者一系列分析源碼的實用技巧,並給出一個合理的閱讀順序
3.始終抓住資源分配、訊息傳遞、容錯處理等基本問題,抽絲撥繭
4.一步步尋找答案,所有問題迎刃而解,使讀者知其然更知其所以然
內容提要
《Apache Spark源碼剖析》以Spark 1.02版本源碼為切入點,著力於探尋Spark所要解決的主要問題及其解決辦法,通過一系列精心設計的小實驗來分析每一步背後的處理邏輯。
《Apache Spark源碼剖析》第3~5章詳細介紹了Spark Core中作業的提交與執行,對容錯處理也進行了詳細分析,有助讀者深刻把握Spark實現機理。第6~9章對Spark Lib庫進行了初步的探索。在對源碼有了一定的分析之後,讀者可儘快掌握Spark技術。
《Apache Spark源碼剖析》對於Spark套用開發人員及Spark集群管理人員都有極 好的學習價值;對於那些想從源碼學習而又不知如何入手的讀者,也不失為一種借鑑。
圖書目錄
第一部分Spark概述1
第1章初識Spark 3
1.1 大數據和Spark 3
1.1.1 大數據的由來4
1.1.2 大數據的分析4
1.1.3 Hadoop 5
1.1.4 Spark簡介6
1.2 與Spark的第一次親密接觸7
1.2.1 環境準備7
1.2.2 下載安裝Spark 8
1.2.3 Spark下的WordCount 8
第二部分Spark核心概念13
第2章Spark整體框架 15
2.1 編程模型15
2.1.1 RDD 17
2.1.2 Operation 17
2.2 運行框架18
2.2.1 作業提交18
2.2.2 集群的節點構成18
2.2.3 容錯處理19
2.2.4 為什麼是Scala 19
2.3 源碼閱讀環境準備19
2.3.1 源碼下載及編譯19
2.3.2 源碼目錄結構21
2.3.3 源碼閱讀工具21
2.3.4 本章小結22
第3章SparkContext初始化 23
3.1 spark-shell 23
3.2 SparkContext的初始化綜述27
3.3 Spark Repl綜述30
3.3.1 Scala Repl執行過程31
3.3.2 Spark Repl 32
第4章Spark作業提交 33
4.1 作業提交33
4.2 作業執行38
4.2.1 依賴性分析及Stage劃分39
4.2.2 Actor Model和Akka 46
4.2.3 任務的創建和分發47
4.2.4 任務執行53
4.2.5 Checkpoint和Cache 62
4.2.6 WebUI和Metrics 62
4.3 存儲機制71
4.3.1 Shuffle結果的寫入和讀取71
4.3.2 Memory Store 80
4.3.3 存儲子模組啟動過程分析81
4.3.4 數據寫入過程分析82
4.3.5 數據讀取過程分析84
4.3.6 TachyonStore 88
第5章部署方式分析 91
5.1 部署模型91
5.2 單機模式local 92
5.3 偽集群部署local-cluster 93
5.4 原生集群Standalone Cluster 95
5.4.1 啟動Master 96
5.4.2 啟動Worker 97
5.4.3 運行spark-shell 102
5.4.4 容錯性分析106
5.5 Spark On YARN 112
5.5.1 YARN的編程模型112
5.5.2 YARN中的作業提交112
5.5.3 Spark On YARN實現詳解113
5.5.4 SparkPi on YARN 122
第三部分Spark Lib 129
第6章Spark Streaming 131
6.1 Spark Streaming整體架構131
6.1.1 DStream 132
6.1.2 編程接口133
6.1.3 Streaming WordCount 134
6.2 Spark Streaming執行過程135
6.2.1 StreamingContext初始化過程136
6.2.2 數據接收141
6.2.3 數據處理146
6.2.4 BlockRDD 155
6.3 視窗操作158
6.4 容錯性分析159
6.5 Spark Streaming vs. Storm 165
6.5.1 Storm簡介165
6.5.2 Storm和Spark Streaming對比168
6.6 套用舉例168
6.6.1 搭建Kafka Cluster 168
6.6.2 KafkaWordCount 169
第7章SQL 173
7.1 SQL語句的通用執行過程分析175
7.2 SQL On Spark的實現分析178
7.2.1 SqlParser 178
7.2.2 Analyzer 184
7.2.3 Optimizer 191
7.2.4 SparkPlan 192
7.3 Parquet 檔案和JSON數據集196
7.4 Hive簡介197
7.4.1 Hive 架構197
7.4.2 HiveQL On MapReduce執行過程分析199
7.5 HiveQL On Spark詳解200
7.5.1 Hive On Spark環境搭建206
7.5.2 編譯支持Hadoop 2.x的Spark 211
7.5.3 運行Hive On Spark測試用例213
第8章GraphX 215
8.1 GraphX簡介215
8.1.1 主要特點216
8.1.2 版本演化216
8.1.3 套用場景217
8.2 分散式圖計算處理技術介紹218
8.2.1 屬性圖218
8.2.2 圖數據的存儲與分割219
8.3 Pregel計算模型220
8.3.1 BSP 220
8.3.2 像頂點一樣思考220
8.4 GraphX圖計算框架實現分析223
8.4.1 基本概念223
8.4.2 圖的載入與構建226
8.4.3 圖數據存儲與分割227
8.4.4 操作接口228
8.4.5 Pregel在GraphX中的源碼實現230
8.5 PageRank 235
8.5.1 什麼是PageRank 235
8.5.2 PageRank核心思想235
第9章MLLib 239
9.1 線性回歸239
9.1.1 數據和估計240
9.1.2 線性回歸參數求解方法240
9.1.3 正則化245
9.2 線性回歸的代碼實現246
9.2.1 簡單示例246
9.2.2 入口函式train 247
9.2.3 最最佳化算法optimizer 249
9.2.4 權重更新update 256
9.2.5 結果預測predict 257
9.3 分類算法257
9.3.1 邏輯回歸258
9.3.2 支持向量機260
9.4 擬牛頓法261
9.4.1 數學原理261
9.4.2 代碼實現265
9.5 MLLib與其他套用模組間的整合268
第四部分附錄271
附錄A Spark源碼調試 273
附錄B 源碼閱讀技巧 283
作者簡介
許鵬長期致力於電信領域和網際網路的軟體研發,在數據處理方面積累了大量經驗,對系統的可擴展性、可靠性方面進行過深入學習和研究。因此,累積了大量的源碼閱讀和分析的技巧與方法。目 前在杭州同盾科技擔任大數據平台架構師一職。對於Linux核心,作者也曾進行過深入的分析。
媒體評論
與Hadoop、Hive、Storm等老牌大數據系統相比,Spark的代碼體積要小得多。然而這樣一套精簡的系統卻同時承載了批處理、流處理、疊代計算、關係查詢、圖計算等多種計算範式,再加上Scala和函式式編程並不為普通程式設計師所熟悉,閱讀和分析Spark源碼並不是一件特別輕鬆的事情。本書記錄了一系列分析Spark源碼的實用技巧,並給出了一個合理的閱讀順序,相信可以令學習Spark的讀者們事半功倍。
——Spark Contributor,Databricks工程師 連城
介紹Spark的書籍很多,但一般不夠全面,而這本書非常系統全面地介紹了Spark源碼,深入淺出、細緻入微,把Spark的由來、Spark整體框架、Spark各軟體棧、Spark環境搭建、Spark部署模式等從源碼角度一步步剖析得非常清楚。作者有很強的系統設計、軟體工程功底,讀者不僅可以從書中學到Spark知識,還可以學習到作者對新技術研究、源碼研究很多好的方法和技巧。授人以魚不如授人以漁,對在校大學生、Spark初學者、大數據開發工程師來說,這本書非常值得擁有。
——華為大數據平台開發部部長 陳亮
難以置信,薄薄的一本書可以兼具如此的廣度與深度。除了Spark核心繫統,本書還介紹了Streaming、SQL、GraphX、MLLib等擴展庫,內容相當全面。但更“贊”的是本書對Spark及各擴展庫的運行機理,無不提綱挈領,一一闡明,讓讀者不但知其然,還能知其所以然。如果想在生產環境中用好Spark,本書值得細讀。
——網易杭州研究院副院長 汪源
Spark目 前正在蓬勃發展,越來越多的公司把大數據計算任務遷移到Spark平台上來。Spark開發的學習曲線並不陡峭。但是處理大數據,需要的不僅是邏輯正確的程式,還需要高性能的程式。如果想把Spark的性能挖掘到極致,那就需要深入了解Spark的設計思想和運行機制,而要了解這些,沒有比讀原始碼更直接的了。許鵬老師的這本書,對於那些沒有時間、精力直接啃原始碼或者對Scala語言還不太精通的讀者來說是一個福音。
——TalkingData首席數據科學家 張夏天
前言
筆者接觸Spark時間不算很長,而本書之所以能夠出版,憑藉的是濃厚的興趣和執著之心。
這一切還要從Storm說起。筆者一直在做網際網路相關工作,但接觸大數據的時間並不長,當時Hadoop和Storm等非常紅火,引起了筆者的“窺視”之心。從2013年開始,筆者打算看看Hadoop的源碼實現,觀察其代碼規模,發覺所花時間可能會很長。恰好其時Storm風頭正勁,於是轉向Storm源碼,0.8版的Storm代碼規模不過20 000行左右,感覺還是比較好入手的。
Storm源碼分析期間,筆者還學習了Clojure、ZeroMQ、Thrift、ZooKeeper、LMAX Disruptor等新技術,對於實時流數據處理算是有了一個大概的了解。由於聽說在實時流數據處理領域Spark技術也很強悍,而且在容錯性方面具有天生的優勢,更引發了筆者的興趣,為了弄清楚究竟,於是開始了Spark的源碼走讀過程。
筆者是以讀Spark論文開始的,說老實話覺得晦澀難懂,因為無法將其映射到記憶體使用、進程啟動、執行緒運行、訊息傳遞等基本問題上。或許換個方法會更好,故筆者選擇直接從源碼入手,如此一來事情反而變簡單了。在源碼分析的過程中,筆者始終抓住資源分配、訊息傳遞、容錯處理等基本問題設問,然後一步步努力尋找答案,所有的問題漸漸迎刃而解。
筆者關於源碼分析有一個心得,就是要緊緊把握住計算的基本模型,然後結合新分析問題的業務領域,將業務上的新問題轉換到計算處理的老套路上來,然後就可以以不變應萬變,而不被一些新技術名詞晃花了眼。這裡所說的老套路是指從作業系統的角度來看,如果能事先深度了解作業系統,將對分析一些新應用程式大有裨益。
Spark源碼採用Scala語言編寫,那么閱讀Spark源碼之前,是否一定要先學Scala呢,筆者個人以為不必,只要你有一些Java或C++程式語言的基礎,就可以開始看Spark源碼,遇到不懂的地方再去學習,效率反而會大大提高,做到有的放矢。將學習中遇到的知識點,從函式式編程、泛型編程、面向對象、並行編程等幾個方面去整理歸納,這樣能夠快速將Scala語言的框架勾勒出來。
本書第1章和第2章簡要介紹了大數據分析技術的產生背景和演進過程;第3~5章詳細分析了Spark Core中的作業規劃、提交及任務執行等內容,對於要深刻把握Spark實現機理的讀者來說,這幾章值得反覆閱讀;第6~9章就Spark提供的高級Lib庫進行了簡要的分析,分析的思路是解決的主要問題是什麼、解決的方案是如何產生的,以及方案是如何通過代碼來具體實現的。
在對源碼有了一定的分析和掌握之後,再回過頭來看一下Spark相關的論文,這時候對論文的理解可能會更順暢。
Spark的整體框架非常龐大,涵蓋的範圍也很廣,隨著筆者在工作中使用得越來越具體,這樣的感受也越來越深。另外,必須要說對於Spark來說,筆者所做的分析實在有限,箇中錯誤在所難免,讀者諸君還請多多諒解。
在本書成稿期間,電子工業出版社的付睿編輯和李雲靜編輯給出了極為詳細的改進意見,在這裡表示衷心的感謝。最後感謝家人的支持和鼓勵,親愛的老婆和懂事的兒子給了筆者堅持的理由和勇氣。
許 鵬
2015年2月