編輯推薦
Life is short, you need Spark!
Spark是當今大數據領域最活躍最熱門的高效的大數據通用計算平臺。基於RDD,Spark成功地構建起了一體化、多元化的大數據處理體系。
雅虎、Conviva、淘寶、網易、大衆點評、優酷土豆、騰訊、華爲等公司均在生產環境中部署了大規模的Spark。
本書徹底從企業處理大數據業務場景的角度出發,徹底基於實戰代碼來組織內容,從零起步,不準任何基礎,徹底無痛地掌握Spark大數據處理實戰技術,源碼解析:
Spark集羣的動手構建
Spark架構
Spark內核的深刻解析
Spark四大子框架的細緻剖析和實戰
Tachyon文件系統揭祕
Spark多語言編程
SparkR
Spark性能調優和最佳實踐
一站式實現Spark企業級開發實戰! html
內容簡介
書籍
計算機書籍
Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺,是Apache軟件基金會下全部開源項目中三大頂級開源項目之一。
在"One Stack to rule them all"理念的指引下,Spark基於RDD成功地構建起了大數據處理的一體化解決方案,將MapReduce、Streaming、SQL、 Machine Learning、Graph Processing等大數據計算模型統一到一個技術堆棧中,開發者使用一致的API操做Spark中的全部功能;更爲重要的是Spark的Spark SQL、MLLib、GraphX、Spark Streaming等四大子框架之間能夠在內存中完美的無縫集成並能夠互相操做彼此的數據,這不只打造了Spark在當今大數據計算領域其餘任何計算框架 都無可匹敵的優點,更使得Spark正在加速成爲大數據處理中心首選的和惟一的計算平臺。
《大數據Spark企業級實戰》詳細解析了企業級Spark開發所需的幾乎全部技術內容,涵蓋Spark的架構設計、Spark的集羣搭建、Spark內 核的解析、Spark SQL、MLLib、GraphX、Spark Streaming、Tachyon、SparkR、Spark多語言編程、Spark常見問題及調優等,而且結合Spark源碼細緻的解析了Spark 內核和四大子框架,最後在附錄中提供了的Spark的開發語言Scala快速入門實戰內容,學習完此書便可勝任絕大多數的企業級Spark開發須要。
《大數據Spark企業級實戰》從零起步,徹底從企業處理大數據業務場景的角度出發,基於實戰代碼來組織內容,對於一名大數據愛好者來講,《大數據Spark企業級實戰》內容能夠幫助您一站式地完成從零起步到進行Spark企業級開發所須要的所有核心內容和實戰須要。
做譯者
Spark亞太研究院首席專家,中國移動互聯網和雲計算大數據集大成者。在Spark、Hadoop、Android等方面有豐富的源碼、實務和性能優化 經驗。完全研究了Spark從0.5.0到0.9.1共13個版本的Spark源碼,並已完成2014年5月31日發佈的Spark1.0源碼研究。
Hadoop源碼級專家,曾負責某知名公司的類Hadoop框架開發工做,專一於Hadoop一站式解決方案的提供,同時也是雲計算分佈式大數據處理的最先實踐者之一。
Android架構師、高級工程師、諮詢顧問、培訓專家。
通曉Spark、Hadoop、Android、HTML5,迷戀英語播音和健美。
目錄
第1章 Spark編程模型
1
1.1 Spark:一體化、多元化的高速
大數據通用計算平臺和庫
1
1.1.1 爲何須要使用Spark
5
1.1.2 Spark技術生態系統簡介
9
1.2 Spark大數據處理框架
20
1.2.1 Spark速度爲什麼如此之快
20
1.2.2 RDD:分佈式函數式編程
24
1.3 Spark子框架解析
28
1.3.1 圖計算框架Spark GraphX
28
1.3.2 實時流處理框架(Spark Streaming)
41
1.3.3 交互式SQL處理框架Spark SQL
46
1.3.4 機器學習框架(Spark MLlib)
49
第2章 構建Spark分佈式集羣
55
2.1 搭建Hadoop單機版本和僞分佈式開發環境
55
2.1.1 開發Hadoop須要的基本軟件
56
2.1.2 安裝每一個軟件
58
2.1.3 配置Hadoop單機模式並運行Wordcount示例
76
2.1.3 配置Hadoop僞分佈模式並運行Wordcount示例
84
2. 2 搭建 Hadoop分佈式集羣的
92
2.2.1 在VMWare 中準備第2、第三臺運行Ubuntu系統的機器
92
2.2.2 按照配置僞分佈式模式的方式配置新建立運行Ubuntu系統的機器
93
2.2.3 配置Hadoop分佈式集羣環境
94
2.2.4 測試Hadoop分佈式集羣環境
105
2.3 Spark集羣的動手搭建
108
2.3.1 Spark集羣須要的軟件
108
2.3.2 安裝每一個軟件
110
2.3.3 啓動並查看集羣的情況
116
2.4 構建Hadoop單機版本和僞分佈式環境
120
2.4.1 經過Spark的shell測試Spark的工做
121
2.4.2 使用Spark的cache機制觀察一下效率的提高
125
第3章 Spark開發環境及其測試
129
3.1 搭建和設置IDEA開發環境
129
3.1.1 構建Spark的IDE開發環境
129
3.1.2 配置Spark的IDE開發環境
132
3.2 測試IDEA環境
146
3.3 實戰:在IDEA中開發代碼,並運行在Spark集羣中
148
第4章 Spark RDD與編程API實戰
159
4.1 深度解析Spark RDD
159
4.2 Transformation Operations動手實戰
165
4.3 Action Operations動手實戰
175
4.4 Spark API綜合實戰
179
第5章 Spark運行模式深刻解析
191
5.1 Spark運行模式概述
192
5.1.1 Spark的運行模式列表
196
5.1.2 Spark的基本工做流程
197
5.2 Standalone模式
201
5.2.1 部署及程序運行
202
5.2.2 內部實現原理
206
5.3 Yarn-Cluster模式
234
5.3.1 部署及程序運行
235
5.3.2 內部實現原理
237
5.4 Yarn-Client模式
243
5.4.1 部署及運行程序
243
5.4.2 內部實現原理
244
第6章 Spark內核解析
247
6.1 Spark內核初探
247
6.1.1 Spark內核核心術語解析
247
6.1.2 Spark集羣概覽
250
6.1.3 Spark核心組件
251
6.1.4 Spark任務調度系統初見
252
6.2 Spark內核核心源碼解讀
256
6.2.1 SparkContext核心源碼解析初體驗
256
6.2.2 TaskSceduler啓動源碼解析初體驗
260
6.2.3 DAGScheduler源碼解讀初體驗
261
6.2.4 Spark的Web監控頁面
262
6.3 以RDD的count操做爲例觸發Job全生命週期源碼研究
263
6.4 Akka驅動下的Driver、Master、Worker
276
6.4.1 Driver中的AppClient源碼解析
276
6.4.2 AppClient註冊Master
279
6.4.3 Worker中Executor啓動過程源代碼解析
282
第7章 GraphX大規模圖計算與圖挖掘實戰
287
7.1 Spark GraphX概覽
288
7.2 Spark GraphX設計實現的核心原理
291
7.3 Table operator和Graph Operator
295
7.4 Vertices、edges、triplets
296
7.5 以最原始的方式構建graph
299
7.6 動手編寫第一個Graph代碼實例並進行Vertices、edges、triplets操做
299
7.7 在Spark集羣上使用文件中的數據加載成爲graph並進行操做
310
7.8 在Spark集羣上掌握比較重要的圖操做
320
7.9 Spark GraphX圖算法
342
7.10 淘寶對Spark GraphX的大規模使用
347
第8章 Spark SQL原理與實戰
349
8.1 爲何使用Spark SQL
349
8.1.1 Spark SQL的發展歷程
349
8.1.2 Spark SQL的性能
351
8.2 Spark SQL運行架構
355
8.2.1 Tree和Rule
357
8.2.2 sqlContext的運行過程
360
8.2.3 hiveContext的運行過程
362
8.2.4 catalyst優化器
365
8.3 解析Spark SQL組件
367
8.3.1 LogicalPlan
367
8.3.2 SqlParser
370
8.3.3 Analyzer
378
8.3.4 Optimizer
381
8.4 深刻了解Spark SQL運行的計劃
383
8.4.1 hive/console的安裝過程和原理
383
8.4.2 經常使用操做
386
8.4.3 不一樣數據源的運行計劃
388
8.4.4 不一樣查詢的運行計劃
391
8.4.5 查詢的優化
393
8.5 搭建測試環境
396
8.5.1 搭建虛擬集羣(Hadoop一、Hadoop二、Hadoop3)
397
8.5.2 搭建客戶端
398
8.5.3 文件數據的準備工做
399
8.5.4 Hive數據的準備工做
399
8.6 Spark SQL之基礎應用
400
8.6.1 sqlContext的基礎應用
402
8.6.2 hiveContext的基礎應用
405
8.6.3 混合使用
408
8.6.4 緩存的使用
409
8.6.5 DSL的使用
410
8.7 ThriftServer和CLI
411
8.7.1 使人驚訝的CLI
411
8.7.2 ThriftServer
414
8.8 Spark SQL之綜合應用
418
8.8.1 店鋪分類
419
8.8.2 PageRank
421
8.9 Spark SQL之調優
424
8.9.1 並行性
424
8.9.2 高效的數據格式
425
8.9.3 內存的使用
427
8.9.4 合適的Task
428
8.9.5 其餘的一些建議
428
第9章 Machine Learning on Spark
431
9.1 Spark MLlib機器學習
431
9.1.1 機器學習快速入門
432
9.1.2 Spark MLlib介紹
442
9.1.3 Spark MLlib架構解析
447
9.1.4 Spark Mllib核心解析
458
9.2 MLlib經典算法解析和案例實戰
462
9.2.1 Linear Regression解析和實戰
462
9.2.2 K-Means解析和實戰
484
9.2.3 協同過濾算法分析和案例實戰
502
9.3 MLLib其餘經常使用算法解析和代碼實戰
552
9.3.1 Basic Statics解析和實戰
553
9.3.2 MLlib樸素貝葉斯解析和實戰
560
9.3.3 MLlib決策樹解析和實戰
562
第10章 Tachyon文件系統
565
10.1 Tachyon文件系統概述
565
10.1.1 Tachyon文件系統簡介
565
10.1.2 HDFS與Tachyon
566
10.1.3 Tachyon設計原理
568
10.2 Tachyon入門
568
10.2.1 Tachyon部署
568
10.2.2 Tachyon API的使用
570
10.2.3 在MapReduce、Spark上使用Tachyon
572
10.3 Tachyon深度解析
573
10.3.1 Tachyon總體設計概述
573
10.3.2 Tachyon Master啓動流程分析
574
10.3.3 Tachyon Worker啓動流程分析
577
10.3.4 客戶端讀寫文件源碼分析
577
10.4 Tachyon配置參數一覽
579
10.5 小結
580
第11章 Spark Streaming原理與實戰
581
11.1 Spark Streaming原理
581
11.1.1 原理和運行場景
581
11.1.2 編程模型DStream
584
11.1.3 持久化、容錯和優化
588
11.2 Spark Streaming實戰
589
11.2.1 源碼解析
589
11.2.2 Spark Streaming實戰案例
600
第12章 Spark多語言編程
605
12.1 Spark多語言編程的特色
605
12.2 Spark編程模型
609
12.3 深刻Spark多語言編程
611
12.4 Spark多語言編程綜合實例
622
第13章 R語言的分佈式編程之SparkR
627
13.1 R語言快速入門
627
13.1.1 R語言是什麼
627
13.1.2 R語言的特色
629
13.1.3 R語言的安裝
630
13.1.4 R的核心概念
630
13.1.5 R動手實戰
631
13.2 使用SparkR
661
13.2.1 SparkR的安裝
661
13.2.2 使用SparkR編寫WordCount
662
13.2.3 使用SparkR的更多代碼示例
662
第14章 Spark性能調優和最佳實踐
665
14.1 Spark性能調優
665
14.1.1 Spark性能優化的12大問題及其解決方法
665
14.1.2 Spark內存優化
669
14.1.3 RDD分區
672
14.1.4 Spark性能優化實例
674
14.2 Spark性能調優細節
675
14.2.1 broadcast和accumulator
675
14.2.2 reduce 和 reduceByKey
676
14.2.3 深刻reduceByKey
677
第15章 Spark源碼解析
679
15.1 BlockManager源碼解析
679
15.2 Cache源碼解析
707
15.3 Checkpoint源碼解析
725
附錄A 動手實戰Scala三部曲
733
第一部動手體驗Scala
735
第二部 動手實戰Scala面向對象編程
746
第三部動手實戰Scala函數式編程
761
前言
誕生於伯克利大學AMPLab的Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺。基於RDD,Spark成功地構建起了一體 化、多元化的大數據處理體系。在任何規模的數據計算中,Spark在性能和擴展性上都更具優點。攜帶先天學術基因優點的Spark在整個發展過程當中都深深 的打上了學術研究的烙印,在"One Stack to rule them all"思想的引領下,Spark成功地使用Spark SQL、Spark Streaming、MLLib、GraphX近乎完美地解決了大數據中的Batch Processing、Streaming Processing、Ad-hoc Query等三大核心問題。在"Full Stack"理想的指引下,Spark中的Spark SQL、Spark Streaming、MLLib、GraphX四大子框架和庫之間能夠無縫地共享數據和操做,這不只打造了Spark在當今大數據計算領域其餘計算框架都 無可匹敵的優點,並且使得Spark正在加速成爲大數據處理中心首選計算平臺。
爲何寫做本書
Spark + Hadoop = A Winning Combination !
Hadoop和Spark聯合構成了當今的大數據世界,而這個世界正在悄悄發生變化,這種變化是Hadoop負責數據存儲和資源管理,Spark負責一體化、多元化的不一樣規模的數據計算,而計算正是大數據的精髓之所在!
在Spark官方公佈的世界上明確在實際生產環境中使用Spark的公司可見https://cwiki. apache.org/confluence/display/SPARK/Powered+By+Spark。在實際的生產環境中世界上已經出現不少一 千個以上節點的Spark集羣,以eBay爲例,eBay的Spark集羣節點已經超過2000個,Yahoo!等公司也在大規模地使用Spark,國內 的淘寶、騰訊、百度、網易、京東、華爲、大衆點評、優酷土豆等也在生產環境下深度使用Spark。2014 Spark Summit上的信息顯示,Spark已經得到世界20家頂級公司的支持,這些公司中包括Intel、IBM等,同時更重要的是,最大的4個Hadoop 發行商都提供了對Spark很是強有力的支持。
不得不提的是, DataBricks和AWS聯合所作的Sort Benchmark測試代表,Spark在只用Hadoop 1/10的計算資源且基於磁盤計算的狀況下卻只用了1/3時間,完全顛覆了Hadoop保持的排序記錄,成爲開源軟件領域在TB和PB數量級別排序最快的 計算引擎。這代表在任意大小的數據規模下,Spark在性能和擴展性上都更具優點。
與Spark火爆程度造成鮮明對比的是Spark人才的嚴重稀缺,這一狀況在中國尤爲嚴重,這種人才的稀缺一方面是因爲Spark技術在201三、 2014年纔在國內流行,另外一方面是因爲匱乏Spark相關的中文資料和系統化的培訓。爲此,Spark亞太研究院和51CTO聯合推出了"Spark亞 太研究院決勝大數據時代100期公益大講堂",共同推進Spark技術的普及。具體視頻信息請參考http://edu.51cto.com /course/course_id-1659.html。
與此同時,爲了更好地知足廣大大數據愛好者系統學習Spark的迫切需求,咱們基於最新的Spark 1.1版本編寫了《大數據Spark企業級實戰》一書,本着從企業級實際開發須要的Spark技能的角度出發,《大數據Spark企業級實戰》一書全面覆 蓋了Spark集羣的動手構建、Spark架構、內核的深刻解析、Spark四大子框架的細緻剖析和實戰、Tachyon文件系統揭祕、Spark多語言 編程、SparkR、Spark性能調優和最佳實踐、Spark核心源碼解析等內容。考慮到Spark框架和開發語言使用Scala,而不少朋友可能對 Scala不是太熟悉,因此在本書的附錄中加入了動手實戰Scala三部曲來幫助沒有使用過Scala語言的學習者快速掌握Scala編程。對於一名大數 據愛好者來講,本書內容能夠幫助他們一站式地完成從零起步到進行Spark企業級開發所須要的所有核心內容和實戰方法。
關於本書做者
本書做者王家林是Spark亞太研究院首席專家,中國移動互聯網和雲計算大數據技術領域的集大成者。在Spark、Hadoop、Android等方面有豐富的源碼、實務和性能優化經驗,完全研究了Spark從0.5到1.1共18個版本的Spark源碼。
做者是Hadoop源碼級專家,曾負責某知名公司的類Hadoop框架開發工做,專一於提供Hadoop一站式解決方案,同時也是雲計算分佈式大數據處理的最先實踐者之一。
做者是Android架構師、高級工程師、諮詢顧問、培訓專家,爲超過50家公司提供了基於Linux和Android的軟/硬整合解決方案。
本書主要內容
本書共包括14章,每章的主要內容以下。
第1章回答了Spark爲什麼是大數據處理平臺的必然選擇?Spark速度如此之快的緣由是什麼?Spark的理論基石是什麼?Spark具體是如何僅僅使用一個技術堆棧解決多元化的大數據處理的需求的?
第2章回答瞭如何從零起步構建Hadoop集羣?如何在Hadoop集羣的基礎上構建Spark集羣?如何測試Spark集羣?
第3章回答瞭如何在IDEA集成開發環境中開發並運行Spark程序?如何在IDA中開發Spark代碼並進行測試?
第4章在細緻解析RDD的基礎上會動手實戰RDD中的Transformation類型的RDD、Action類型的RDD,並伴有Spark API的綜合實戰案例。
第5章詳細分析了Spark Standalone模式、Spark Yarn-Cluster模式、Spark-Client模式的設計和實現。
第6章首先介紹Spark內核,接着分享經過源碼分析Spark內核及源碼,細緻解析Spark做業的全生命週期,最後分享Spark性能優化的內容。
. 第7章經過大約30個動手實踐的案例按部就班地展現Spark GraphX框架方方面面的功能和使用方法,並對Spark GraphX的源碼進行解析。
第8章基於Spark SQL動手編程實踐章節,從零起步,細緻而深刻地介紹了Spark SQL方方面面的內容。
第9章從快速入門機器學習開始,詳細解析MLlib框架,經過對線性迴歸、聚類、協同過濾的算法解析、源碼解析和案例實戰,按部就班地揭祕 MLLib,最後經過對MLlib中Basic Statics、樸素貝葉斯算法、決策樹的解析和實戰,進一步提高掌握Spark機器學習的技能。
第10章細緻解析了Tachyon這個分佈式內存文件系統的架構設計、具體實現、部署以及Spark對Tachyon的使用等內容。
第11章按部就班地介紹Spark Streaming的原理、源碼和實戰案例等內容。
第12章介紹了Spark多語言編程的特色,並經過代碼實例按部就班地介紹Spark多語言編程,最後經過一個綜合實例來實踐Spark多語言編程。
第13章從R語言的基礎介紹和動手實戰入手,介紹SparkR的使用和代碼實戰,助您快速上手R語言和Spark兩大大數據處理的利器。
第14章按部就班地介紹了Spark常見的問題及其調優方式。首先介紹Spark性能優化的14大問題及其解決方法,而後從內存優化、RDD分區、Spark對象和操做的性能調優等角度解決常見的性能調優問題,最後講解Spark最佳實踐方案。
第15章聚焦於Spark源碼中的BlockManager、Cache和Checkpoint等核心源碼解析,BlockManager、 Cache和Checkpoint是每一個Spark學習者都必須掌握的核心內容。本章按部就班地解析了這三部分的源碼,包括經過源碼說明其用途、實現機 制、內部細節和實際Spark生產環境下的最佳實踐等,經過本章便可輕鬆駕馭BlockManager、Cache和Checkpoint,從而對 Spark精髓的領悟也必將更上層樓!
附錄主要是從Spark的角度來說解Scala,以動手實戰爲核心,從零開始,按部就班地講解Scala函數式編程和麪向對象編程。
如何閱讀本書
這是一本內容詳實的大數據Spark企業級實戰圖書,按照如下建議閱讀可能會取得更好的效果:
?
若是你之前沒有接觸過Scala,建議先從附錄中的"動手實戰Scala三部曲"開始閱讀,邊閱讀邊編寫代碼,快速掌握Scala。
?
在閱讀完第1章的基礎上,強烈建議按照書中第2章和第3章的內容搭建起Spark的集羣和IDE開發環境,後續主要內容都要在第2章和第3章構建的環境基礎上進行講解。
?
其餘內容按照章節按部就班地學習,建議多動手實踐。
?
強烈建議對於每個Spark中知識點的學習應多閱讀源碼。
最終全部的內容都要回歸到框架源碼以及對源碼的閱讀和修改上,源碼是一切問題的來源和答案,恭祝各位早日成爲Spark源碼級高手。
致謝
本書得以順利出版是團隊協做的結晶。在此特別感謝博文視點郭總的大力支持,優秀編輯孫學瑛的認真和專業以及其餘相關人員的支持。同時也感謝Spark亞太研究院各位同事的大力支持!尤爲感謝佳佳在本書出版工做中的全力配合!
王家林
2014年12月算法