前言
第1章RDD功能解析
1.1RDD產生的技術背景及功能
1.2RDD的基本概念
1.2.1RDD的定義
1.2.2RDD五大特性
1.2.3RDD彈性特性的7個方面
1.3創(chuàng)建RDD的方式
1.3.1通過已經存在的Scala集合創(chuàng)建RDD
1.3.2通過HDFS和本地文件系統(tǒng)創(chuàng)建RDD
1.3.3其他的RDD的轉換
1.3.4其他的RDD的創(chuàng)建
1.4RDD算子
1.5RDD的Transformation算子
1.5.1Transformation的定義
1.5.2Transformation在RDD中的角色定位及功能
1.5.3Transformation操作的Lazy特性
1.5.4通過實踐說明Transformation的Lazy特性
1.6RDD的Action算子
1.6.1Action的定義
1.6.2Action 在RDD中的角色定位及功能
1.7小結
第2章RDD的運行機制
2.1RDD依賴關系
2.1.1窄依賴(Narrow Dependency)
2.1.2寬依賴(Shuffle Dependency)
2.2有向無環(huán)圖(Directed Acyclic Graph,DAG)
2.2.1什么是DAG
2.2.2DAG的生成機制
2.2.3DAG的邏輯視圖
2.3RDD內部的計算機制
2.3.1RDD的計算任務(Task)
2.3.2RDD的計算過程
2.4RDD中緩存的適用場景和工作機制
2.4.1緩存的使用
2.4.2緩存的適用場景
2.4.3緩存工作機制解析
2.5RDD的檢查點(Checkpoint)的適用場景和工作機制
2.5.1Checkpoint的觸發(fā)
2.5.2Checkpoint的適用場景
2.5.3Checkpoint工作機制解析
2.6RDD容錯原理及其四大核心要點
2.6.1RDD容錯原理
2.6.2RDD容錯的四大核心要點
2.7通過WordCount實踐RDD內部機制
2.7.1WordCount案例實踐
2.7.2解析RDD生成的內部機制
2.8小結
第3章部署模式(Deploy)解析
3.1部署模式概述
3.2應用程序的部署
3.2.1應用程序部署的腳本解析
3.2.2應用程序部署的源代碼解析
3.3Local與Local-Cluster部署
3.3.1Local部署
3.3.2Local[*]與Local[N]部署
3.3.3Local[*,M]與Local[N,M]部署
3.3.4Local-Cluster[S,C,M]部署
3.4Spark Standalone部署
3.4.1部署框架
3.4.2應用程序的部署
3.4.3Master的部署
3.4.4Worker的部署
3.4.5內部交互的消息機制
3.4.6Master HA的部署
3.5Spark on YARN的部署模型
3.5.1部署框架
3.5.2應用程序的部署
3.6小結
第4章Spark調度器(Scheduler)運行機制
4.1Spark運行的核心概念
4.1.1Spark運行的基本對象
4.1.2Spark運行框架及各組件的基本運行原理
4.2Spark Driver Program剖析
4.2.1什么是Spark Driver Program
4.2.2SparkContext原理剖析
4.2.3SparkContext源代碼解析
4.3Spark Job的觸發(fā)
4.3.1Job的邏輯執(zhí)行(General Logical Plan)
4.3.2Job具體的物理執(zhí)行
4.3.3Job觸發(fā)流程源代碼解析
4.4高層的DAG調度器(DAGScheduler)
4.4.1DAG的定義
4.4.2DAG的實例化
4.4.3DAGScheduer劃分Stage的原理
4.4.4DAGScheduer劃分Stage的具體算法
4.4.5Stage內部Task獲取最佳位置的算法
4.5底層的Task調度器(TaskScheduler)
4.5.1TaskScheduer原理剖析
4.5.2TaskScheduer源代碼解析
4.6調度器的通信終端(SchedulerBackend)
4.6.1SchedulerBackend原理
4.6.2SchedulerBackend源代碼解析
4.6.3Spark程序的注冊機制
4.6.4Spark程序對計算資源Executor的管理
4.7小結
第5章執(zhí)行器(Executor)
5.1Executor的創(chuàng)建、分配、啟動及異常處理
5.1.1Executor的創(chuàng)建
5.1.2Executor的資源分配
5.1.3Executor的啟動
5.1.4Executor的異常處理
5.2執(zhí)行器的通信接口(ExecutorBackend)
5.2.1ExecutorBackend接口與Executor的關系
5.2.2ExecutorBackend的不同實現
5.2.3ExecutorBackend中的通信
5.3執(zhí)行器(Executor)中任務的執(zhí)行
5.3.1Executor中任務的加載
5.3.2Executor中的任務線程池
5.3.3任務執(zhí)行失敗處理
5.3.4剖析TaskRunner
5.4小結
第6章Spark的存儲模塊(Storage)
6.1Storage概述
6.1.1Storage的概念
6.1.2Storage的設計模式
6.2Storage模塊整體架構
6.2.1通信層
6.2.2存儲層
6.2.3Partition與Block的對應關系
6.3不同Storage Level對比
6.4Executor內存模型
6.5Tachyon
6.5.1Tachyon簡介
6.5.2Tachyon API的使用
6.5.3Tachyon在Spark中的使用
6.6小結
第7章Shuffle機制
7.1Shuffle概述
7.2Shuffle的框架
7.2.1Shuffle的框架演進
7.2.2Shuffle的框架內核
7.2.3Shuffle框架的源代碼解析
7.2.4Shuffle 的注冊
7.2.5Shuffle讀寫數據的源代碼解析
7.3基于Hash的Shuffle
7.3.1基于Hash的Shuffle內核
7.3.2基于Hash的Shuffle寫數據的源代碼解析
7.4基于Sort的Shuffle
7.4.1基于Sort的Shuffle內核
7.4.2基于Sort的Shuffle寫數據的源代碼解析
7.5基于Tungsten Sort的Shuffle
7.5.1基于Tungsten Sort的Shuffle內核
7.5.2基于Tungsten Sort的Shuffle寫數據的源代碼解析
7.6小結
第8章鎢絲計劃(Project Tungsten)
8.1鎢絲計劃(Project Tungsten)概述
8.2內存管理模型
8.2.1現有內存管理的機制
8.2.2Project Tungsten內存管理的模型及其源代碼的解析
8.3基于內存管理模型的Shuffle二進制數據處理
8.3.1插入記錄時二進制數據的處理
8.3.2spill時二進制數據的處理
8.4小結
第9章性能優(yōu)化
9.1Spark的配置機制
9.1.1