Spark 大數據編程實用教程
內容描述
本書是一本講解Spark基礎應用及編程的實用教程,基於Spark 2.3版本,
內容包括Spark與大數據、構建Spark運行環境、開發一個Spark程序、
深入理解Spark程序代碼、RDD編程、Spark SQL結構化數據處理、
Spark Streaming、Structured Streaming、SparkR和GraphX。
本書總結了Spark學習的關鍵點;提出了Spark快速學習路線圖;
提供配套的Spark前置課程學習資源鏈接,包括虛擬機、Linux和Shell免費高清視頻、
《零基礎快速入門Scala》免費電子書等,幫助零基礎讀者迅速夯實Spark基礎。
本書配以大量的示例、源代碼和註釋,可以幫助讀者快速、全面而又深入地掌握Spark編程技能。
本書既可作為高等院校大數據、雲計算和人工智能相關專業的教材,
也可以作為Spark學習者和大數據研發人員的技術參考書。
目錄大綱
前言
章Spark與大數據1
1.1大數據開發基礎1
1.1.1什麼是大數據1
1.1.2大數據開發的通用步驟2
1.1.3大數據開發技術4
1.2初識Spark10
1.2.1 Spark是什麼10
1.2.2 Spark的技術特點11
1.3 Spark技術棧12
1.4 Spark重要組件13
1.4.1 Spark Core13
1.4.2 Spark SQL14
1.4.3 GraphX15
1.4.4流數據處理16
1.4.5 SparkR17
1.4.6 MLlib/ML18
1.4.7 Spark交互工具18
1.5 Spark和Scala19
1.5.1 Scala語言簡介19
1.5.2為什麼用Scala開發Spark框架20
1.5.3為什麼用Scala開發Spark程序20
1.5.4 Scala開發Spark程序所涉及的技術20
1.5.5 Scala語言基礎21
1.6如何快速掌握Spark21
1.6.1 Spark學習的痛點21
1.6.2 Spark快速學習路線圖22
1.6.3 Spark學習中的關鍵點23
1.6.4利用本書相關資源高效學習Spark23
1.6.5本書所使用的軟件和版本25
1.7練習25
第2章構建Spark運行環境26
2.1 Spark程序運行時架構26
2.2構建Spark大數據運行環境28
2.2.1構建HDFS28
2.2.2構建Yarn30
2.2.3構建Spark集群31
2.3運行Spark程序(Local方式)31
2.4運行Spark程序(分佈式方式)32
2.4.1 Spark on Yarn32
2.4.2 Spark on Standalone36
2.5 Spark程序在spark-shell上運行41
2.6使用Web UI監控Spark程序運行43
2.7擴展集群節點48
2.8練習49
第3章開發一個Spark程序51
3.1在命令行模式下開發Spark程序51
3.1.1構建Scala程序編譯環境51
3.1.2使用Vim編寫Spark程序53
3.1.3使用命令編譯、打包Spark程序54
3.1.4運行Spark程序56
3.1.5使用java命令運行Spark程序57
3.1.6 Spark程序編譯、運行、部署的關鍵點58
3.2使用IDEA開發Spark程序58
3.2.1 IDEA安裝和基本使用59
3.2.2使用IDEA編輯Spark代碼60
3.2.3 IDEA編譯、打包62
3.2.4 IDEA遠程提交Spark程序63
3.3練習
第4章深入理解Spark程序代碼66
4.1 Spark程序代碼結構66
4.2 Spark程序代碼的核心概念68
4.2.1 RDD68
4.2.2 Application68
4.2.3 Job69
4.2.4 DAG70
4.2.5 Stage72
4.2.6 Task76
4.2.7 Application、Job、Stage和Task的並行粒度和並行條件77
4.3 Spark程序代碼執行過程77
4.4練習85
第5章RDD編程86
5.1 RDD核心概念86
5.1.1 Transformation的基本概念87
5.1.2 Action的基本概念88
5.1.3 Partition的基本概念88
5.2創建RDD89
5.2.1使用parallelize/makeRDD創建RDD89
5.2.2使用textFile創建RDD91
5.2.3其他RDD創建操作92
5.3 RDD Partition93
5.3.1 Partition的基本操作94
5.3.2 Partition的分區過程96
5.3.3 Partition和Task98
5.3.4計算Partition的個數100
5.3 .5 Partition的綜合應用103
5.4 Transformation操作107
5.4.1 map操作107
5.4.2 flatMap操作111
5.4.3 mapPartitions操作113
5.4.4 join操作115
5.4.5 union操作120
5.4.6 intersection操作121
5.4.7 groupBy操作123
5.4.8 groupByKey操作124
5.4.9 reduceByKey操作125
5.4.10 aggregateByKey操作127
5.4.11 cogroup操作129
5.5 Action操作130
5.5.1 collect操作130
5.5.2 reduce操作130
5.5.3 fold操作131
5.5 .4 aggregate操作133
5.5.5 foreachPartition操作134
5.5.6 saveAsTextFile操作135
5.5.7 saveAsObjectFile操作135
5.6 RDD的cache/persist和checkpoint操作136
5.6.1 cache/persist和checkpoint概述136
5.6.2 cache/persist使用注意事項137
5.6. 3 cache/persist操作138
5.6.4 checkpoint操作139
5.7練習140
第6章Spark SQL結構化數據處理142
6.1 Spark SQL的核心概念142
6.1.1結構化數據和非結構化數據142
6.1.2 DataFrame143
6.1. 3 Dataset144
6.1.4 Persistent Table和Data Warehouse145
6.1.5 SQL146
6.1.6 SparkSession147
6.2 Spark SQL數據處理概述147
6.2.1 Spark SQL數據處理環境147
6.2.2 Spark SQL處理結構化數據149
6.2.3 Spark SQL處理不同數據源的數據150
6.3構建Spark SQL運行環境150
6.3.1 Spark SQL運行環境概述150
6.3.2構建簡的Spark SQL運行環境151
6.3.3構建兼容Hive的Spark SQL運行環境153
6.4 DataFrame/Dataset快速上手157
6.4.1 DataFrame/Dataset使用概述157
6.4. 2在spark-shell中使用DataFrame/Dataset157
6.4.3在代碼中使用DataFrame/Dataset161
6.4.4 DataFrame/Dataset使用上的區別163
6.4.5 DataFrame行解析方法1
6.4.6 DataFrame和Dataset轉換1
6.5 DataFrame/ Dataset與數據源的轉換165
6.5.1 DataFrame/Dataset與數據源的轉換關係和方法概述165
6.5.2 DataFrame/Dataset與Seq的轉換167
6.5.3 DataFrame/Dataset與RDD的轉換169
6.5.4 DataFrame/ Dataset文件與Sequence文件的轉換170
6.5.5 DataFrame/Dataset與CSV文件的轉換170
6.5.6 DataFrame/Dataset與JSON文件的轉換176
6.5.7 DataFrame/Dataset與ORC文件的轉換178
6.5.8 DataFrame/Dataset與Parquet文件的轉換179
6.5.9 DataFrame/Dataset與Avro文件的轉換182
6.5.10 DataFrame/Dataset與MySQL數據庫的轉換183
6.5.11 DataFrame/Dataset與Hive表的轉換188
6.5. 12 DataFrame/Dataset與Built-in data source表的轉換193
6.6 DataFrame/Dataset常用API198
6.6.1 Action198
6.6.2 Basic Dataset function200
6.6.3 Typed Transformation205
6.6.4 Untyped Transformation213
6.7 SQL操作223
6.7.1常用DDL使用說明及示例224
6.7.2 DQL使用說明及示例226
6.7.3常用DML使用說明及示例232
6.8練習234
第7章Spark Streaming236
7.1 Spark Streaming基礎236
7.1.1流數據定義及其特點236
7.1.2 Spark Streaming的工作流程237
7.1.3 Spark Streaming的核心概念238
7.2編寫一個Spark Streaming程序241
7.3 Spark Streaming Web UI的使用244
7.3.1 Spark Streaming Web UI使用前準備244
7.3.2 Spark Streaming Web UI參數說明247
7.4多路流數據合併處理示例250
7.4.1示例實現說明250
7.4.2示例分析:多數據流中Batch Job的執行254
7.5 DStream Transformation操作255
7.5.1 DStream Transformation實現原理256
7.5.2 DStream常見的Transformation操作及說明258
7.5.3 Spark Streaming的窗口(Window )操作及示例259
7.6 DStream Output操作262
7.7練習2
第8章Structured Streaming265
8.1 Structured Streaming基礎265
8.1.1 Structured Streaming處理流程265
8.1.2 Structured Streaming基本概念266
8.1.3 Structured Streaming技術特性268
8.2 Structured Streaming接入Text File數據源268
8.3 Structured Streaming接入Rate數據源273
8.4使用Schema解析JSON格式數據源274
8.5使用DataFrame/Dataset處理流數據277
8.6 Structured Streaming Window操作282
8.7 Structured Streaming Watermarking操作288
8.8 Structured Streaming JOIN操作290
8.8.1 Streaming數據與Static數據的JOIN操作示例291
8.8.2 Streaming數據與Streaming數據的JOIN操作示例295
8.9練習304
第9章SparkR305
9.1 SparkR基礎305
9.1.1為什麼需要SparkR305
9.1.2什麼是SparkR306
9.1.3 SparkR和R的關係306
9.1.4 SparkR的技術特徵306
9.1.5 SparkR程序運行時架構306
9.2構建SparkR程序開發和運行環境307
9.3 SparkR代碼的執行方式308
9.3.1在RStudio-server上執行SparkR代碼309
9.3. 2在R Shell上執行SparkR代碼311
9.3.3使用spark-submit執行SparkR代碼312
9.3.4在sparkR上執行SparkR代碼313
9.4 SparkR的基本使用314
9.4.1 SparkR編程的基本流程315
9.4.2創建SparkDataFrame315
9.4.3 SparkDataFrame的基本操作318
9.4.4在Spark上分佈式執行R函數319
9.4.5 SQL查詢323
9.5 SparkR機器學習算子323
9.5.1 SparkR常用的機器學習算子323
9.5.2 SparkR機器學習算子的使用324
9.6利用SparkR實現單詞統計和圖形輸出326
9.7練習329
10章GraphX330
10.1 GraphX基礎330
10.1.1圖的定義和傳統表示方法330
10.1.2圖計算332
10.1.3有向多重圖332
10.1.4 GraphX特性333
10.1.5 GraphX框架334
10.2 GraphX的基本數據結構335
10.2 .1 VertexRDD335
10.2.2 EdgeRDD338
10.2.3 Graph340
10.3 GraphX實現短路徑算法——SGDSP354
10.4 GraphX Pregel的原理及使用361
10.4.1 GraphX Pregel接口說明361
10.4.2 GraphX Pregel的處理流程362
10.4.3 GraphX Pregel的使用363
10.5 GraphX Pregel實現短路徑算法——SGPSP366
10.6練習370
參考文獻372