●第一部分 基礎篇
第1章 序篇2
1.1Spark與BDAS3
1.2Databricks4
1.3如何通過GitHub向Spark貢獻代碼5
1.4如何選擇Spark編程語言8
1.5函數式編程思想9
1.6小結12
第2章 Spark編程13
2.1Spark架構13
2.2Spark 2.x與Spark 3.x15
2.2.1Tungsten項目16
2.2.2統一Dataset和DataFrame 接口20
2.2.3新一代流處理技術:Structured Streaming與持續型應用21
2.2.4Hydrogen項目和Spark 3.x22
2.3部署Spark26
2.3.1Spark on YARN27
2.3.2Spark on Mesos28
2.3.3Spark Standalone29
2.3.4Spark on Kubernetes30
2.3.5安裝Spark31
2.3.6提交作業31
2.3.7Spark Shell33
2.3.8初始化SparkSession34
2.4RDD與算子34
2.4.1RDD34
2.4.2創建RDD36
2.4.3轉換算子38
2.4.4行動算子43
2.4.5RDD血統與Spark容錯45
2.5Spark Shuffle47
2.5.1Hash Shuffle47
2.5.2Sort-based Shuffle49
2.6共享變量50
2.6.1廣播變量50
2.6.2累加器53
2.7Spark的多語言支持55
2.7.1PySpark55
2.7.2SparkR56
2.8Spark性能調優56
2.8.1硬件配置與資源管理平臺57
2.8.2參數調優與應用調優57
2.9使用Jupyter Notebook基於Spark探索數據:蒙特卡羅方法預測股票價格64
2.9.1Jupyter Notebook64
2.9.2用蒙特卡羅方法預測股票價格67
2.10小結70
第3章Spark統一編程接口:DataFrame、Dataset和Spark SQL71
3.1Catalyst優化器72
3.1.1SQL抽像語法樹72
3.1.2從ULEP到RLEP的過程73
3.1.3調優RLEP73
3.1.4全階段代碼生成74
3.2DataFrame API75
3.2.1創建DataFrame75
3.2.2查詢77
3.2.3窗口函數80
3.2.4用戶自定義函數83
3.2.5寫入85
3.3Dataset API86
3.3.1RDD、DataFrame和Dataset87
3.3.2安全類型的UDAF88
3.4Spark SQL89
3.4.1創建臨時視圖90
3.4.2使用H數據90
3.4.3查詢語句91
3.4.4函數94
3.4.5用戶自定義函數97
3.5Google Dremel與列式存儲97
3.5.1Apache Parquet99
3.5.2Apache ORC100
3.5.3Apache CarbonData100
3.5.4對比測試101
3.6使用Spark SQL進行數據探索102
3.7小結107
第4章Spark流處理:Spark Streaming
與StructuredStreaming108
4.1一個Spark Streaming流處理的例子109
4.2消息送達保證110
4.3Google MillWheel繫統和Google Dataflow模型114
4.3.1Google MillWheel設計思想114
4.3.2Google MillWheel如何實現“恰好一次”消息送達語義114
4.3.3Google MillWheel對亂序數據與晚到數據的處理115
4.3.4Google Dataflow:流處理和批處理的統一與取舍117
4.4Spark Streaming122
4.4.1關鍵抽像與架構123
4.4.2無狀態的轉換算子125
4.4.3有狀態的轉換算子129
4.4.4輸入與輸出134
4.4.5Spark Streaming與Spark SQL138
4.4.6容錯與結果正確性139
4.4.7性能調優141
4.5Structured Streaming144
4.5.1關鍵抽像與架構144
4.5.2操作147
4.5.3輸入和輸出154
4.5.4股票交易價格實時分析157
4.6流處理技術對比162
4.7小結163
第5章Spark圖計算:GraphX164
5.1圖模式164
5.1.1圖結構164
5.1.2圖存儲165
5.1.3圖數據庫168
5.1.4圖挖掘技術169
5.1.5屬性圖與RDF170
5.2生成圖171
5.2.1從已有數據中生成172
5.2.2通過GraphGenerators生成174
5.3圖算子175
5.3.1屬性算子175
5.3.2結構算子175
5.3.3連接算子175
5.3.4aggregateMessages176
5.4Pregel API177
5.4.1圖分區177
5.4.2像頂點一樣思考180
5.4.3用戶自定義函數182
5.4.4PageRank的GraphX實現183
5.4.5標簽傳播算法186
5.5SQL on Graph187
5.5.1生成圖188
5.5.2SQL查詢189
5.5.3模式發現190
5.5.4一些GraphX已經有的算法191
5.5.5一些GraphX沒有的算法191
5.5.6AggregateMessages192
5.6n度鄰居頂點算法193
5.7小結196
第6章Spark機器學習:MLlib197
6.1機器學習197
6.1.1典型的機器學習工作流198
6.1.2機器學習任務的學習類型199
6.2Spark MLlib與Spark ML201
6.3數據預處理205
6.3.1數據標準化205
6.3.2缺失值處理207
6.3.3特征抽取208
6.3.4特征選擇212
6.4分類算法應用214
6.4.1決策樹214
6.4.2隨機森林217
6.4.3人體狀態監測器218
6.4.4集成學習223
6.4.5梯度提升決策樹224
6.5聚類算法應用225
6.5.1物以類聚225
6.5.2k均值聚類算法226
6.5.3實現227
6.6推薦繫統應用230
6.6.1基於用戶的協同過濾231
6.6.2基於商品的協同過濾233
6.6.3兩種協同過濾的對比235
6.6.4基於模型的協同過濾236
6.6.5Movielens電影推薦繫統237
6.7訓練之後238
6.7.1模型評估239
6.7.2交叉驗證與超參調優241
6.8流式機器學習242
6.8.1流回歸242
6.8.2流聚類244
6.8.3用流處理應用來監控模型245
6.9小結249
第7章Spark深度學習:Deeplearning4j250
7.1常見的深度學習框架251
7.2Deeplearning4j252
7.3卷積神經網絡252
7.3.1理解卷積神經網絡252
7.3.2用Deeplearning4j訓練卷積神經網絡254
7.4循環神經網絡257
7.4.1理解循環神經網絡258
7.4.2用Deeplearning4j訓練循環神經網絡262
7.5自動編碼器264
7.5.1理解自動編碼器264
7.5.2用Deeplearning4j訓練自動編碼器267
7.6使用GPU269
7.7小結270
第8章分布式存儲:Alluxio271
8.1Alluxio架構271
8.1.1Alluxio的組成部分273
8.1.2虛擬的Alluxio273
8.1.3統一而透明的命名空間274
8.2快速上手Alluxio275
8.2.1安裝Alluxio275
8.2.2Alluxio配置276
8.2.3Alluxio血統機制277
8.3與上層框架集成277
8.3.1與Spark集成278
8.3.2與Presto集成279
8.3.3與HBase集成280
8.4與底層存儲繫統集成281
8.4.1與Ceph集成281
8.4.2掛載其他文件繫統281
8.5如何訪問Alluxio282
8.6Alluxio應用案例283
8.6.1攜程網283
8.6.2滴滴出行284
8.6.3陌陌286
8.7小結288
第二部分應用篇
第9章企業數據湖與Lambda架構290
9.1數據湖290
9.1.1數據的湖泊290
9.1.2數據湖要解決的問題291
9.1.3數據湖與數據倉庫對比292
9.1.4數據湖如何工作293
9.2Lambda架構293
9.2.1批處理層294
9.2.2服務層295
9.2.3速度層295
9.2.4Lambda架構296
9.2.5Lambda架構的原則297
9.3基於Lambda架構的數據湖分層設計297
9.3.1數據獲取層298
9.3.2消息層299
9.3.3數據攝取層300
9.3.4數據存儲層300
9.3.5Lambda層301
9.4Lambda架構的應用301
9.4.1搜索引擎301
9.4.2Druid302
9.5構建Lambda架構的技術303
9.6小結304
第10章 大數據企業動態背景調查平臺305
10.1企業背景調查305
10.2基於大數據的企業動態背景調查308
10.2.1企業行為信息308
10.2.2企業關聯方分析311
10.3數據采集與數據字典313
10.4企業背景調查平臺需求317
10.4.1企業關聯圖譜展示317
10.4.2企業風險指標計算318
10.5企業關聯圖譜的模式318
10.6傳統數據倉庫架構320
10.7小結321
第11章 平臺設計322
11.1平臺架構322
11.1.1數據源323
11.1.2數據管道323
11.1.3速度層325
11.1.4批處理層325
11.1.5服務層325
11.1.6查詢層325
11.1.7可視化組件325
11.2物理拓撲326
11.3服務層圖數據庫設計326
11.4項目規劃327
11.5小結327
第12章 數據管道層328
12.1安裝並配置canal328
12.2實現Kafka生產者330
12.3安裝並配置Flume335
12.4小結336
第13章 速度層337
13.1速度層輸入337
13.1.1類型1338
13.1.2類型2338
13.1.3類型3339
13.1.4類型4340
13.2Cypher基礎341
13.2.1寫入342
13.2.2讀取343
13.2.3刪除344
13.3生成Cypher語句345
13.3.1類型1345
13.3.2類型2346
13.3.3類型3346
13.3.4類型4346
13.3.5實現347
13.4整合Structured Streaming352
13.4.1Neo4jWriter353
13.4.2啟動流354
13.5小結355
第14章 批處理層356
14.1自融風險監測356
14.2生成主數據集357
14.2.1全量與增量358
14.2.2合並359
14.2.3數據治理361
14.3用GraphX計算企業自融風險值363
14.4導入HBase364
14.5調度中心366
14.5.1Airflow366
14.5.2配置368
14.6小結370
第15章 服務層與查詢層371
15.1不僅僅是合並371
15.1.1NetworkX372
15.1.2計算流程372
15.2接口開發372
15.3小結376
第三部分總結篇
第16章 總結和展望378
16.1統一的大數據處理接口378
16.1.1Unified Spark378
16.1.2Apache Beam379
16.2Kappa架構380
16.3大數據處理技術382
16.3.1Apache Flink382
16.3.2Apache Apex383
16.3.3Ray384
16.4Spark未來發展方向386
本書基於Spark發行版2.4.4寫作而成,包含大量的實例與一個完整項目,層次分明,循序漸進。全書分為3部分,涵蓋了技術理論與實戰,讀者可以從實戰中鞏固學習到的知識。第一部分主要圍繞BDAS(伯克利數據分析棧),不僅介紹了如何開發Spark應用的基礎內容,還介紹了Structured Streaming、Spark機器學習、Spark圖挖掘、Spark深度學習等高級主題,此外還介紹了Alluxio繫統。第二部分實現了一個企業背景調查繫統,比較新穎的是,該繫統借鋻了數據湖與Lambda架構的思想,涵蓋了批處理、流處理應用開發,並加入了一些開源組件來滿足需求,既是對本書第一部分很好的鞏固,又完整呈現了一個實時大數據應用的開發過程。第三部分是對全書的總結和展望。本書適合準備學習Spark的開發人員和數據分析師,以及準備將Spark應用到實際項目中的開發人員和管理人員閱讀,也適合計算機相關專業的高等