Spark大數(shù)據(jù)處理技術(shù)
定 價:65 元
- 作者:夏俊鸞
- 出版時間:2015/1/1
- ISBN:9787121250811
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:356
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書以Spark 0.9版本為基礎(chǔ)進(jìn)行編寫,是一本全面介紹Spark及Spark生態(tài)圈相關(guān)技術(shù)的書籍,是國內(nèi)首本深入介紹 Spark 原理和架構(gòu)的技術(shù)書籍。主要內(nèi)容有 Spark 基礎(chǔ)功能介紹及內(nèi)部重要模塊分析,包括部署模式、調(diào)度框架、存儲管理以及應(yīng)用監(jiān)控;同時也詳細(xì)介紹了 Spark 生態(tài)圈中其他的軟件和模塊,包括 SQL 處理引擎 Shark 和 Spark SQL、流式處理引擎 Spark Streaming、圖計算框架 Graphx 以及分布式內(nèi)存文件系統(tǒng) Tachyon。本書從概念和原理上對 Spark 核心框架和生態(tài)圈做了詳細(xì)的解讀,并對 Spark 的應(yīng)用現(xiàn)狀和未來發(fā)展做了一定的介紹,旨在為大數(shù)據(jù)從業(yè)人員和 Spark愛好者提供一個更深入學(xué)習(xí)的平臺。
本書適合任何大數(shù)據(jù)、Spark 領(lǐng)域的從業(yè)人員閱讀,同時也為架構(gòu)師、軟件開發(fā)工程師和大數(shù)據(jù)愛好者展現(xiàn)了一個現(xiàn)代大數(shù)據(jù)框架的架構(gòu)原理和實現(xiàn)細(xì)節(jié)。相信通過學(xué)習(xí)本書,讀者能夠熟悉和掌握 Spark 這一當(dāng)前流行的大數(shù)據(jù)框架,并將其投入到生產(chǎn)實踐中去。
全球首部全面介紹Spark及Spark生態(tài)圈相關(guān)技術(shù)的技術(shù)書籍俯覽未來大局,不失精細(xì)剖析,呈現(xiàn)一個現(xiàn)代大數(shù)據(jù)框架的架構(gòu)原理和實現(xiàn)細(xì)節(jié)透徹講解Spark原理和架構(gòu),以及部署模式、調(diào)度框架、存儲管理及應(yīng)用監(jiān)控等重要模塊Spark生態(tài)圈深度檢閱:SQL處理Shark和Spark SQL、流式處理Spark Streaming、圖計算Graphx及內(nèi)存文件系統(tǒng)Tachyon
夏俊鸞 現(xiàn)任阿里巴巴數(shù)據(jù)平臺部高級技術(shù)專家,Apache Spark項目Committer,曾就職于英特爾亞太研發(fā)中心,微博賬號@Andrew-Xia。
劉旭暉 現(xiàn)任蘑菇街?jǐn)?shù)據(jù)平臺資深架構(gòu)師(花名天火),曾就職于英特爾亞太研發(fā)中心大數(shù)據(jù)軟件部,Spark/Hadoop/Hbase/Phoenix 等眾多大數(shù)據(jù)相關(guān)開源項目的積極貢獻(xiàn)者。樂于分享,著有CSDN博客 blog.csdn.net/colorant。
邵賽賽 英特爾亞太研發(fā)有限公司開發(fā)工程師,專注于大數(shù)據(jù)領(lǐng)域,開源愛好者,現(xiàn)從事Spark相關(guān)工作,Spark代碼貢獻(xiàn)者。
程浩 英特爾大數(shù)據(jù)技術(shù)團隊軟件工程師,Shark和Spark SQL活躍開發(fā)者,致力于SQL on Big Data的性能調(diào)優(yōu)與優(yōu)化。
史鳴飛 英特爾亞太研發(fā)有限公司大數(shù)據(jù)軟件部工程師,專注于大數(shù)據(jù)領(lǐng)域,主要從事Spark及相關(guān)項目的開發(fā)及應(yīng)用,Spark及Shark代碼貢獻(xiàn)者,現(xiàn)在主要投身于Tachyon項目的開發(fā)。
黃潔 目前就職于英特爾亞太研發(fā)中心大數(shù)據(jù)技術(shù)中心,擔(dān)任高級軟件工程師,致力于大數(shù)據(jù)技術(shù)的性能優(yōu)化及開發(fā)工作,涉及Hadoop、Spark、HBase等開源項目。在多年的工作過程中,積累了一定的分布式大數(shù)據(jù)框架性能調(diào)優(yōu)經(jīng)驗,并且是Apache Chukwa項目的PMC成員和Committer。在此之前,畢業(yè)于上海交通大學(xué)并獲碩士及學(xué)士學(xué)位。
第1章 Spark系統(tǒng)概述 15
1.1 大數(shù)據(jù)處理框架 15
1.2 Spark大數(shù)據(jù)處理框架 17
1.2.1 RDD表達(dá)能力 17
1.2.2 Spark子系統(tǒng) 18
1.3 小結(jié) 21
第2章 Spark RDD及編程接口 23
2.1 Spark程序“Hello World” 23
2.2 Spark RDD 26
2.2.1 RDD分區(qū)(Partition)27
2.2.2 RDD優(yōu)先位置(preferredLocations)28
2.2.3 RDD依賴關(guān)系(Dependencies)29
2.2.4 RDD分區(qū)計算(Compute) 34
2.2.5 RDD分區(qū)函數(shù)(partitioner)35
2.3 創(chuàng)建操作 39 第1章 Spark系統(tǒng)概述 15
1.1 大數(shù)據(jù)處理框架 15
1.2 Spark大數(shù)據(jù)處理框架 17
1.2.1 RDD表達(dá)能力 17
1.2.2 Spark子系統(tǒng) 18
1.3 小結(jié) 21
第2章 Spark RDD及編程接口 23
2.1 Spark程序“Hello World” 23
2.2 Spark RDD 26
2.2.1 RDD分區(qū)(Partition)27
2.2.2 RDD優(yōu)先位置(preferredLocations)28
2.2.3 RDD依賴關(guān)系(Dependencies)29
2.2.4 RDD分區(qū)計算(Compute) 34
2.2.5 RDD分區(qū)函數(shù)(partitioner)35
2.3 創(chuàng)建操作 39
2.3.1 集合創(chuàng)建操作 39
2.3.2 存儲創(chuàng)建操作 40
2.4 轉(zhuǎn)換操作 42
2.4.1 RDD 基本轉(zhuǎn)換操作 42
2.4.2 鍵值RDD 轉(zhuǎn)換操作 52
2.4.3 再論RDD 依賴關(guān)系 59
2.5 控制操作(control operation) 61
2.6 行動操作(action operation) 63
2.6.1 集合標(biāo)量行動操作 63
2.6.2 存儲行動操作 68
2.7 小結(jié) 72
第3 章 Spark 運行模式及原理 74
3.1 Spark 運行模式概述 74
3.1.1 Spark 運行模式列表74
3.1.2 Spark 基本工作流程 75
3.1.3 相關(guān)基本類 77
3.2 Local 模式 80
3.2.1 部署及程序運行80
3.2.2 內(nèi)部實現(xiàn)原理 80
3.3 Standalone 模式 81
3.3.1 部署及程序運行 81
3.3.2 內(nèi)部實現(xiàn)原理 85
3.4 Local-cluster 模式 86
3.4.1 部署及程序運行 86
3.4.2 內(nèi)部實現(xiàn)原理 86
3.5 Mesos 模式 87
3.5.1 部署及程序運行 87
3.5.2 內(nèi)部實現(xiàn)原理 88
3.6 Yarn standalone / Yarn cluster 模式 91
3.6.1 部署及程序運行 91
3.6.2 內(nèi)部實現(xiàn)原理 93
3.7 Yarn Client 模式 94
3.7.1 部署及程序運行 94
3.7.2 內(nèi)部實現(xiàn)原理 95
3.8 各種模式的實現(xiàn)細(xì)節(jié)比較 96
3.8.1 環(huán)境變量的傳遞 97
3.8.2 Jar 包和各種依賴文件的分發(fā) 99
3.8.3 任務(wù)管理和序列化 101
3.8.4 用戶參數(shù)配置 102
3.8.5 用戶及權(quán)限控制 103
3.9 Spark 1.0 版本之后的變化 104
3.10 小結(jié) 105
第4 章 Spark 調(diào)度管理原理 106
4.1 Spark 作業(yè)調(diào)度管理概述 106
4.2 Spark 調(diào)度相關(guān)基本概念 107
4.3 作業(yè)調(diào)度模塊頂層邏輯概述 108
4.4 作業(yè)調(diào)度具體工作流程 112
4.4.1 調(diào)度階段的拆分113
4.4.2 調(diào)度階段的提交 117
4.4.3 任務(wù)集的提交 119
4.4.4 完成狀態(tài)的監(jiān)控 119
4.4.5 任務(wù)結(jié)果的獲取 121
4.5 任務(wù)集管理模塊詳解 122
4.6 調(diào)度池和調(diào)度模式分析 124
4.7 其他調(diào)度相關(guān)內(nèi)容 126
4.7.1 Spark 應(yīng)用之間的調(diào)度關(guān)系 126
4.7.2 調(diào)度過程中的數(shù)據(jù)本地性問題 127
4.8 小結(jié) 127
第5章 Spark 的存儲管理 128
5.1 存儲管理模塊整體架構(gòu) 128
5.1.1 通信層架構(gòu) 129
5.1.2 通信層消息傳遞 132
5.1.3 注冊存儲管理模塊 133
5.1.4 存儲層架構(gòu) 134
5.1.5 數(shù)據(jù)塊 (Block) 136
5.2 RDD 持久化 137
5.2.1 RDD 分區(qū)和數(shù)據(jù)塊的關(guān)系 137
5.2.2 內(nèi)存緩存 138
5.2.3 磁盤緩存 139
5.2.4 持久化選項 141
5.2.5 如何選擇不同的持久化選項 142
5.3 Shuffle 數(shù)據(jù)持久化 143
5.4 廣播(Broadcast)變量持久化 146
5.5 小結(jié) 146
第6 章 Spark 監(jiān)控管理 148
6.1 UI 管理 148
6.1.1 實時UI 管理 149
6.1.2 歷史UI 管理 154
6.2 Metrics 管理 155
6.2.1 Metrics 系統(tǒng)架構(gòu) 156
6.2.2 Metrics 系統(tǒng)配置 157
6.2.3 輸入源(Metrics Source)介紹 159
6.2.4 輸出方式(Metrics Sink)介紹 160
6.3 小結(jié) 162
第7 章 Shark 架構(gòu)與安裝配置 163
7.1 Shark 架構(gòu)淺析 164
7.2 Hive/Shark 各功能組件對比分析 165
7.2.1 MetaStore 165
7.2.2 CLI/ Beeline 165
7.2.3 JDBC/ODBC 166
7.2.4 HiveServer/2 與 SharkServer/2 166
7.2.5 Driver 167
7.2.6 SQL Parser 168
7.2.7 查詢優(yōu)化器(Query Optimizer)169
7.2.8 物理計劃與執(zhí)行 169
7.3 Shark 安裝配置與使用 171
7.3.1 安裝前準(zhǔn)備工作 171
7.3.2 不同運行模式下的安裝Shark 172
7.3.2.1 單機運行模式 172
7.3.2.2 集群運行模式 172
7.3.2.3 運行在亞馬遜AWS 174
7.4 Shark SQL 命令行工具(CLI)174
7.5 使用Shark Shell 178
7.6 啟動SharkServer 178
7.7 SharkServer2 配置與啟動 179
7.8 緩存數(shù)據(jù)表 180
7.8.1 數(shù)據(jù)緩存級別 180
7.8.2 創(chuàng)建不同緩存級別的Shark 數(shù)據(jù)表 180
7.8.3 指定數(shù)據(jù)表緩存策略 181
7.8.4 使用Tachyon 182
7.9 常見問題分析 182
7.9.1 OutOfMemory 異常 183
7.9.2 數(shù)據(jù)處理吞吐量低 183
7.9.3 Shark 查詢比Hive 慢 184
7.10 小結(jié) 184
第8 章 Shark 程序開發(fā)與擴展 186
8.1 SQL API 186
8.1.1 JDBC 接口訪問Shark 187
8.1.2 ODBC 接口訪問Shark 188
8.1.3 sql2rdd API 188
8.2 擴展Shark 191
8.2.1 ObjectInspector 介紹 191
8.2.2 自定義函數(shù) 195
8.3 SerDe 自定義數(shù)據(jù)存取格式 218
8.4 StorageHandler 自定義數(shù)據(jù)存取 219
8.5 小結(jié) 221
第9 章 Spark SQL 222
9.1 邏輯架構(gòu) 222
9.1.1 Catalyst 功能邊界 223
9.1.2 SQL 解析階段 224
9.1.3 邏輯計劃元數(shù)據(jù)綁定和語義分析階段 224
9.1.4 邏輯計劃優(yōu)化優(yōu)化階段 224
9.1.5 物理計劃生成階段 225
9.1.6 Shark 和Spark SQL 對比 225
9.2 Catalyst 上下文(Context) 226
9.2.1 SQLContext 227
9.2.2 HiveContext 228
9.3 SQL API 228
9.3.1 構(gòu)建/使用SQLContext 和HiveContext 229
9.3.2 SchemaRDD 229
9.3.3 Row 對象 232
9.3.4 數(shù)據(jù)類型 233
9.3.5 DSL API 舉例 233
9.3.6 表達(dá)式計算 235
9.3.7 Parquet 列式存儲文件 237
9.3.8 代碼演示 238
Spark 與大數(shù)據(jù)開源技術(shù)
11
9.4 Java API 241
9.5 小結(jié) 241
第10 章 Spark Streaming 242
流數(shù)據(jù)處理框架 242
10.1 快速入門 243
10.2 SparkStreaming 基本概念 245
10.2.1 鏈接和初始化 245
10.2.2 時間和窗口概念 246
10.2.3 DStream 原理 248
10.2.4 DStream 輸入源 249
10.2.5 DStream 操作 250
10.2.6 DStream 持久化 253
10.3 性能調(diào)優(yōu) 253
10.3.1 運行時間優(yōu)化 253
10.3.2 內(nèi)存使用優(yōu)化 254
10.4 容錯處理 255
10.4.1 工作節(jié)點失效 255
10.4.2 驅(qū)動節(jié)點失效 256
10.5 DStream 作業(yè)的產(chǎn)生和調(diào)度 258
10.5.1 作業(yè)產(chǎn)生 258
10.5.2 作業(yè)調(diào)度 259
10.5.3 Streaming 作業(yè)與Spark 作業(yè)之間的關(guān)系 260
10.6 DStream 與RDD 之間關(guān)系 262
10.7 數(shù)據(jù)接收原理 264
10.8 自定義數(shù)據(jù)輸入源 268
10.9 自定義監(jiān)控接口(StreamingListener) 270
10.10 Spark Streaming 案例分析 271
10.11 小結(jié) 273
第11 章 275
GraphX 計算框架 275
11.1 圖并行計算 275
11.1.1 數(shù)據(jù)并行與圖并行計算 275
11.1.2 圖并行計算框架簡介 276
11.1.3 GraphX 簡介 280
11.2 Graphx 模型設(shè)計280
11.2.1 數(shù)據(jù)模型 280
11.1.2 圖計算接口 281
11.3 GraphX 模型實現(xiàn) 285
11.3.1 圖的分布式存儲 285
11.3.2 圖操
序
2009年的時候,Netflix公司舉辦了一個叫作Netflix Prize的推薦算法比賽。這個比賽匿名公布了Netflix五十萬用戶對近兩萬部電影的一億個評分?jǐn)?shù)據(jù),希望參賽者能夠開發(fā)出更好的推薦算法,以提高推薦系統(tǒng)的質(zhì)量。這個比賽的獎金有一百萬美元。一百萬美元看似很多,但是和一個更好的推薦算法給Netflix帶來的效益相比,實則九牛一毛。
高昂的獎金和Netflix提供的真實數(shù)據(jù)吸引了不少的參賽者,其中也包括了來自加州大學(xué)伯克利分校(UC Berkeley)的博士生Lester Mackey。Lester師從機器學(xué)習(xí)領(lǐng)域泰斗Michael Jordan,在一個叫作AMPLab的大數(shù)據(jù)實驗室里進(jìn)行博士研究。AMPLab和大多數(shù)學(xué)術(shù)界實驗室不同的地方在于實驗室內(nèi)有多個教授和他們帶領(lǐng)的學(xué)生一起合作。這些研究人員來自不同的領(lǐng)域,包括機器學(xué)習(xí)、數(shù)據(jù)庫、計算機網(wǎng)絡(luò)、分布式系統(tǒng)等。當(dāng)時,要想提高算法研究迭代的效率,需要利用多臺機器的分布式建模。在嘗試了當(dāng)時業(yè)界最流行的Hadoop MapReduce后,Lester發(fā)現(xiàn)自己的時間并不是花在提高算法效率上,而是耗費在MapReduce的編程模型和低效的執(zhí)行模式上。這個時候,他向?qū)嶒炇覂?nèi)部的另外一名進(jìn)行分布式系統(tǒng)研究的學(xué)生Matei Zaharia求助。
當(dāng)時年紀(jì)輕輕的Matei在業(yè)界已經(jīng)小有名望。他在雅虎和Facebook實習(xí)期間做了很多Hadoop早期的奠基工作,包括現(xiàn)今Hadoop系統(tǒng)內(nèi)應(yīng)用最廣的fair scheduler調(diào)度算法。在和Lester的思維碰撞中,Matei總結(jié)了Hadoop MR的不足,開始設(shè)計了第一個版本的Spark。這個版本完全為了Lester定制,只有幾百行的代碼,使得Lester可以高效率地進(jìn)行分布式機器學(xué)習(xí)建模。
Lester所在的The Ensemble團隊最后和BellKor's Pragmatic Chaos設(shè)計了在效率上并列第一的算法,可惜因為晚了20分鐘提交,與一百萬美元獎金失之交臂。5年之后,Lester和Matei都變成了學(xué)術(shù)界和業(yè)界杰出的人物。Lester成為了斯坦福大學(xué)計算機系的教授,帶領(lǐng)著自己的學(xué)生攻克一個又一個機器學(xué)習(xí)和統(tǒng)計的難題。Matei成為了麻省理工計算機系的教授,也是Databricks公司的CTO。
2009年之后的4年里面,AMPLab以Spark為基礎(chǔ)展開了很多不同的學(xué)術(shù)研究項目,其中包括了我參與和主導(dǎo)的Shark和GraphX,還有Spark Streaming、MLlib等。4年里隨著Hadoop的發(fā)展,Spark也逐漸從一個純學(xué)術(shù)研究項目發(fā)展到了開始有業(yè)界敢于吃螃蟹的用戶。
2013年,包括Matei和我在內(nèi)的Spark核心人員共同創(chuàng)立了Databricks公司,立志于提高Spark的發(fā)展速度。過去兩年,Spark的發(fā)展超越了我們所有人的想象。一年半以前Spark還是一個連監(jiān)控界面都不存在的系統(tǒng),很難放進(jìn)生產(chǎn)線部署。而一年半后的今天,它已經(jīng)變成了整個大數(shù)據(jù)生態(tài)圈和Apache Software Foundation內(nèi)最活躍的項目,活躍程度遠(yuǎn)遠(yuǎn)超出了曾經(jīng)Spark只能望其項背的Hadoop。
在從Hadoop轉(zhuǎn)向Spark的道路上,我個人感覺國內(nèi)的速度甚至超越了國外的社區(qū)。一年以前我第一次在中國的大數(shù)據(jù)會議上宣講Spark,當(dāng)時臺下的大多數(shù)人對這個新的項目還有很大的質(zhì)疑,認(rèn)為其只會曇花一現(xiàn)。一年之后,Spark的每個新版本中都有不少華人貢獻(xiàn)的代碼,國內(nèi)很多高科技和互聯(lián)網(wǎng)公司也都有了Spark的生產(chǎn)作業(yè),不少用戶直接減少了在Hadoop MapReduce上的投資,把新的項目都轉(zhuǎn)移到了Spark上。
今天正好是Databricks公司成立一年半,也是Spark 1.2版本第一個release candidate發(fā)布的日期。Spark的高速發(fā)展導(dǎo)致了中文信息的脫節(jié)。這本書深入淺出地介紹了Spark和Spark上多個重要計算框架,希望它的問世可以更好地在大中華地區(qū)普及Spark,增進(jìn)華人Spark社區(qū)的發(fā)展。
辛湜 Reynold Xin
2014年11月30號
Berkeley, CA