天天看點

Spark大資料處理技術

Spark大資料處理技術

全球首部全面介紹Spark及Spark生态圈相關技術的技術書籍

俯覽未來大局,不失精細剖析,呈現一個現代大資料架構的架構原理和實作細節

透徹講解Spark原理和架構,以及部署模式、排程架構、存儲管理及應用監控等重要子產品

Spark生态圈深度檢閱:SQL處理Shark和Spark SQL、流式處理Spark Streaming、圖計算Graphx及記憶體檔案系統Tachyon

内容簡介

    書籍

    計算機書籍

《Spark大資料處理技術》以Spark 0.9版本為基礎進行編寫,是一本全面介紹Spark及Spark生态圈相關技術的書籍,是國内首本深入介紹Spark原理和架構的技術書籍。主要内容有 Spark基礎功能介紹及内部重要子產品分析,包括部署模式、排程架構、存儲管理以及應用監控;同時也詳細介紹了Spark生态圈中其他的軟體和子產品,包括 SQL處理引擎Shark和Spark SQL、流式處理引擎Spark Streaming、圖計算架構Graphx以及分布式記憶體檔案系統Tachyon。《Spark大資料處理技術》從概念和原理上對Spark核心架構和 生态圈做了詳細的解讀,并對Spark的應用現狀和未來發展做了一定的介紹,旨在為大資料從業人員和Spark愛好者提供一個更深入學習的平台。

《Spark大資料處理技術》适合任何大資料、Spark領域的從業人員閱讀,同時也為架構師、軟體開發工程師和大資料愛好者展現了一個現代大資料架構的 架構原理和實作細節。相信通過學習《Spark大資料處理技術》,讀者能夠熟悉和掌握Spark這一目前流行的大資料架構,并将其投入到生産實踐中去。

作譯者

夏俊鸾 現任阿裡巴巴資料平台部進階技術專家,Apache Spark項目Committer,曾就職于英特爾亞太研發中心,微網誌賬号@Andrew-Xia。

劉旭晖 現任蘑菇街資料平台資深架構師(花名天火),曾就職于英特爾亞太研發中心大資料軟體部,Spark/Hadoop/Hbase/Phoenix 等衆多大資料相關開源項目的積極貢獻者。樂于分享,著有CSDN部落格 blog.csdn.net/colorant。

邵賽賽 英特爾亞太研發有限公司開發工程師,專注于大資料領域,開源愛好者,現從事Spark相關工作,Spark代碼貢獻者。

程浩 英特爾大資料技術團隊軟體工程師,Shark和Spark SQL活躍開發者,緻力于SQL on Big Data的性能調優與優化。

史鳴飛 英特爾亞太研發有限公司大資料軟體部工程師,專注于大資料領域,主要從事Spark及相關項目的開發及應用,Spark及Shark代碼貢獻者,現在主要投身于Tachyon項目的開發。

黃潔 目前就職于英特爾亞太研發中心大資料技術中心,擔任進階軟體工程師,緻力于大資料技術的性能優化及開發工作,涉及Hadoop、Spark、HBase等 開源項目。在多年的工作過程中,積累了一定的分布式大資料架構性能調優經驗,并且是Apache Chukwa項目的PMC成員和Committer。在此之前,畢業于上海交通大學并獲碩士及學士學位。

目錄

《Spark大資料處理技術》

第1章 Spark系統概述 1

1.1 大資料處理架構 1

1.2 Spark大資料處理架構 3

1.2.1 RDD表達能力 3

1.2.2 Spark子系統 4

1.3 小結 7

第2章 Spark RDD及程式設計接口 9

2.1 Spark程式“Hello World” 9

2.2 Spark RDD 12

2.2.1 RDD分區(partitions) 13

2.2.2 RDD優先位置(preferredLocations) 13

2.2.3 RDD依賴關系(dependencies) 15

2.2.4 RDD分區計算(compute) 19

2.2.5 RDD分區函數(partitioner) 20

2.3 建立操作 23

2.3.1 集合建立操作 23

2.3.2 存儲建立操作 23

2.4 轉換操作 26

2.4.1 RDD基本轉換操作 26

2.4.2 鍵值RDD轉換操作 35

2.4.3 再論RDD依賴關系 43

2.5 控制操作(control operation) 46

2.6 行動操作(action operation) 47

2.6.1 集合标量行動操作 47

2.6.2 存儲行動操作 52

2.7 小結 56

第3章 Spark運作模式及原理 57

3.1 Spark運作模式概述 57

3.1.1 Spark運作模式清單 57

3.1.2 Spark基本工作流程 58

3.1.3 相關基本類 59

3.2 Local模式 62

3.2.1 部署及程式運作 62

3.2.2 内部實作原理 63

3.3 Standalone模式 64

3.3.1 部署及程式運作 64

3.3.2 内部實作原理 67

3.4 Local cluster模式 68

3.4.1 部署及程式運作 68

3.4.2 内部實作原理 69

3.5 Mesos模式 69

3.5.1 部署及程式運作 69

3.5.2 内部實作原理 70

3.6 YARN standalone / YARN cluster模式 72

3.6.1 部署及程式運作 72

3.6.2 内部實作原理 75

3.7 YARN client模式 76

3.7.1 部署及程式運作 76

3.7.2 内部實作原理 77

3.8 各種模式的實作細節比較 78

3.8.1 環境變量的傳遞 78

3.8.2 JAR包和各種依賴檔案的分發 80

3.8.3 任務管理和序列化 82

3.8.4 使用者參數配置 83

3.8.5 使用者及權限控制 84

3.9 Spark 1.0版本之後的變化 85

3.10 小結 86

第4章 Spark排程管理原理 87

4.1 Spark作業排程管理概述 87

4.2 Spark排程相關基本概念 88

4.3 作業排程子產品頂層邏輯概述 89

4.4 作業排程具體工作流程 92

4.4.1 排程階段的拆分 94

4.4.2 排程階段的送出 97

4.4.3 任務集的送出 99

4.4.4 完成狀态的監控 99

4.4.5 任務結果的擷取 101

4.5 任務集管理子產品詳解 102

4.6 排程池和排程模式分析 104

4.7 其他排程相關内容 106

4.7.1 Spark應用之間的排程關系 106

4.7.2 排程過程中的資料本地性問題 106

4.8 小結 107

第5章 Spark的存儲管理 109

5.1 存儲管理子產品整體架構 109

5.1.1 通信層架構 110

5.1.2 通信層消息傳遞 112

5.1.3 注冊存儲管理子產品 113

5.1.4 存儲層架構 114

5.1.5 資料塊 (Block) 116

5.2 RDD 持久化 116

5.2.1 RDD分區和資料塊的關系 117

5.2.2 記憶體緩存 118

5.2.3 磁盤緩存 119

5.2.4 持久化選項 120

5.2.5 如何選擇不同的持久化選項 122

5.3 Shuffle資料持久化 122

5.4 廣播(Broadcast)變量持久化 125

5.5 小結 126

第6章 Spark監控管理 127

6.1 UI管理 127

6.1.1 實時UI管理 128

6.1.2 曆史UI管理 132

6.2 Metrics管理 133

6.2.1 Metrics系統架構 133

6.2.2 Metrics系統配置 135

6.2.3 輸入源(Metrics Source)介紹 136

6.2.4 輸出方式(Metrics Sink)介紹 138

6.3 小結 139

第7章 Shark架構與安裝配置 141

7.1 Shark架構淺析 142

7.2 Hive/Shark各功能元件對比 143

7.2.1 MetaStore 143

7.2.2 CLI/ Beeline 143

7.2.3 JDBC/ODBC 144

7.2.4 Hive Server/2 與 Shark Server/2 144

7.2.5 Driver 145

7.2.6 SQL Parser 146

7.2.7 查詢優化器(Query Optimizer) 147

7.2.8 實體計劃與執行 147

7.3 Shark安裝配置與使用 148

7.3.1 安裝前準備工作 149

7.3.2 在不同運作模式下安裝Shark 149

7.4 Shark SQL指令行工具(CLI) 152

7.5 使用Shark Shell指令 155

7.6 啟動Shark Server 155

7.7 Shark Server2配置與啟動 156

7.8 緩存資料表 157

7.8.1 資料緩存級别 158

7.8.2 建立不同緩存級别的Shark資料表 158

7.8.3 指定資料表緩存政策 159

7.8.4 使用Tachyon 160

7.9 常見問題分析 160

7.9.1 OutOfMemory異常 160

7.9.2 資料處理吞吐量低 161

7.9.3 Shark查詢比Hive慢 161

7.10 小結 162

第8章 SQL程式擴充 163

8.1 程式擴充并行運作模式 164

8.2 Evaluator和ObjectInspector 164

8.3 自定義函數擴充 168

8.3.1 自定義函數擴充分類 168

8.3.2 CLI中的使用者自定義函數擴充相關指令 170

8.3.3 使用者自定義函數(UDF) 171

8.3.4 通用使用者自定義函數(Generic UDF) 175

8.3.5 使用者自定義聚合函數(UDAF) 178

8.3.6 通用使用者自定義聚合函數(Generic UDAF) 182

8.3.7 通用使用者自定義表函數(Generic UDTF) 186

8.4 自定義資料存取格式 190

8.4.1 SerDe 190

8.4.2 StorageHandler 197

8.5 小結 198

第9章 Spark SQL 199

9.1 Spark SQL邏輯架構 199

9.1.1 Catalyst功能邊界 200

9.1.2 SQL解析階段 201

9.1.3 邏輯計劃中繼資料綁定和語義分析階段 202

9.1.4 邏輯計劃優化階段 202

9.1.5 實體計劃生成階段 202

9.1.6 Shark和Spark SQL對比 203

9.2 Catalyst上下文(Context) 204

9.2.1 SQLContext 204

9.2.2 HiveContext 205

9.3 SQL DSL API 206

9.3.1 資料源管理 206

9.3.2 SchemaRDD 208

9.3.3 Row API 210

9.3.4 資料類型 211

9.3.5 DSL API舉例 213

9.3.6 表達式計算 214

9.3.7 Parquet列式存儲檔案 218

9.3.8 代碼示範 218

9.4 Java API 221

9.5 Python API 224

9.6 Spark SQL CLI 225

9.7 Thrift服務 225

9.8 小結 225

第10章 Spark Streaming流資料處理架構 227

10.1 快速入門 227

10.2 Spark Streaming基本概念 229

10.2.1 連結和初始化 229

10.2.2 時間和視窗概念 231

10.2.3 DStream原理 232

10.2.4 DStream輸入源 234

10.2.5 DStream 操作 235

10.2.6 DStream持久化 237

10.3 性能調優 238

10.3.1 運作時間優化 238

10.3.2 記憶體使用優化 238

10.4 容錯處理 239

10.4.1 工作節點失效 239

10.4.2 驅動節點失效 240

10.5 DStream作業的産生和排程 242

10.5.1 作業産生 242

10.5.2 作業排程 243

10.5.3 Streaming作業與Spark作業之間的關系 244

10.6 DStream與RDD關系 246

10.7 資料接收原理 248

10.8 自定義資料輸入源 251

10.9 自定義監控接口(StreamingListener) 253

10.10 Spark Streaming案例分析 254

10.11 小結 256

第11章 GraphX計算架構 259

11.1 圖并行計算 259

11.1.1 資料并行與圖并行計算 259

11.1.2 圖并行計算架構簡介 260

11.1.3 GraphX簡介 264

11.2 GraphX模型設計 264

11.2.1 資料模型 264

11.2.2 圖計算接口 265

11.3 GraphX模型實作 269

11.3.1 圖的分布式存儲 269

11.3.2 圖操作執行政策 278

11.3.3 圖操作執行優化 280

11.3.4 序列化和反序列化 283

11.3.5 GraphX内置算法庫 284

11.4 GraphX應用 285

11.4.1 Pregel模型 285

11.4.2 N維鄰接關系計算 288

11.5 小結 291

第12章 Tachyon存儲系統 293

12.1 設計原理 294

12.1.1 高效的記憶體讀寫 294

12.1.2 無副本的可靠性實作——Lineage 297

12.2 架構設計 299

12.2.1 主節點 300

12.2.2 工作節點 304

12.2.3 用戶端 306

12.2.4 讀寫工作流程 307

12.3 Tachyon的部署 313

12.3.1 單機部署 313

12.3.2 分布式部署 316

12.3.3 Tachyon的配置 317

12.4 Tachyon應用 321

12.4.1 Shark原始表(RawTable) 321

12.4.2 Spark的堆外RDD 325

12.4.3 Tachyon使用者接口(API) 327

12.5 相關項目讨論 335

12.6 小結 336

繼續閱讀