Spark大數(shù)據(jù)處理技術(shù)
定 價(jià):65 元
- 作者:夏俊鸞
- 出版時(shí)間:2015/1/1
- ISBN:9787121250811
- 出 版 社:電子工業(yè)出版社
- 中圖法分類(lèi):TP274
- 頁(yè)碼:356
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)以Spark 0.9版本為基礎(chǔ)進(jìn)行編寫(xiě),是一本全面介紹Spark及Spark生態(tài)圈相關(guān)技術(shù)的書(shū)籍,是國(guó)內(nèi)首本深入介紹 Spark 原理和架構(gòu)的技術(shù)書(shū)籍。主要內(nèi)容有 Spark 基礎(chǔ)功能介紹及內(nèi)部重要模塊分析,包括部署模式、調(diào)度框架、存儲(chǔ)管理以及應(yīng)用監(jiān)控;同時(shí)也詳細(xì)介紹了 Spark 生態(tài)圈中其他的軟件和模塊,包括 SQL 處理引擎 Shark 和 Spark SQL、流式處理引擎 Spark Streaming、圖計(jì)算框架 Graphx 以及分布式內(nèi)存文件系統(tǒng) Tachyon。本書(shū)從概念和原理上對(duì) Spark 核心框架和生態(tài)圈做了詳細(xì)的解讀,并對(duì) Spark 的應(yīng)用現(xiàn)狀和未來(lái)發(fā)展做了一定的介紹,旨在為大數(shù)據(jù)從業(yè)人員和 Spark愛(ài)好者提供一個(gè)更深入學(xué)習(xí)的平臺(tái)。
本書(shū)適合任何大數(shù)據(jù)、Spark 領(lǐng)域的從業(yè)人員閱讀,同時(shí)也為架構(gòu)師、軟件開(kāi)發(fā)工程師和大數(shù)據(jù)愛(ài)好者展現(xiàn)了一個(gè)現(xiàn)代大數(shù)據(jù)框架的架構(gòu)原理和實(shí)現(xiàn)細(xì)節(jié)。相信通過(guò)學(xué)習(xí)本書(shū),讀者能夠熟悉和掌握 Spark 這一當(dāng)前流行的大數(shù)據(jù)框架,并將其投入到生產(chǎn)實(shí)踐中去。
全球首部全面介紹Spark及Spark生態(tài)圈相關(guān)技術(shù)的技術(shù)書(shū)籍俯覽未來(lái)大局,不失精細(xì)剖析,呈現(xiàn)一個(gè)現(xiàn)代大數(shù)據(jù)框架的架構(gòu)原理和實(shí)現(xiàn)細(xì)節(jié)透徹講解Spark原理和架構(gòu),以及部署模式、調(diào)度框架、存儲(chǔ)管理及應(yīng)用監(jiān)控等重要模塊Spark生態(tài)圈深度檢閱:SQL處理Shark和Spark SQL、流式處理Spark Streaming、圖計(jì)算Graphx及內(nèi)存文件系統(tǒng)Tachyon
夏俊鸞 現(xiàn)任阿里巴巴數(shù)據(jù)平臺(tái)部高級(jí)技術(shù)專(zhuān)家,Apache Spark項(xiàng)目Committer,曾就職于英特爾亞太研發(fā)中心,微博賬號(hào)@Andrew-Xia。
劉旭暉 現(xiàn)任蘑菇街?jǐn)?shù)據(jù)平臺(tái)資深架構(gòu)師(花名天火),曾就職于英特爾亞太研發(fā)中心大數(shù)據(jù)軟件部,Spark/Hadoop/Hbase/Phoenix 等眾多大數(shù)據(jù)相關(guān)開(kāi)源項(xiàng)目的積極貢獻(xiàn)者。樂(lè)于分享,著有CSDN博客 blog.csdn.net/colorant。
邵賽賽 英特爾亞太研發(fā)有限公司開(kāi)發(fā)工程師,專(zhuān)注于大數(shù)據(jù)領(lǐng)域,開(kāi)源愛(ài)好者,現(xiàn)從事Spark相關(guān)工作,Spark代碼貢獻(xiàn)者。
程浩 英特爾大數(shù)據(jù)技術(shù)團(tuán)隊(duì)軟件工程師,Shark和Spark SQL活躍開(kāi)發(fā)者,致力于SQL on Big Data的性能調(diào)優(yōu)與優(yōu)化。
史鳴飛 英特爾亞太研發(fā)有限公司大數(shù)據(jù)軟件部工程師,專(zhuān)注于大數(shù)據(jù)領(lǐng)域,主要從事Spark及相關(guān)項(xiàng)目的開(kāi)發(fā)及應(yīng)用,Spark及Shark代碼貢獻(xiàn)者,現(xiàn)在主要投身于Tachyon項(xiàng)目的開(kāi)發(fā)。
黃潔 目前就職于英特爾亞太研發(fā)中心大數(shù)據(jù)技術(shù)中心,擔(dān)任高級(jí)軟件工程師,致力于大數(shù)據(jù)技術(shù)的性能優(yōu)化及開(kāi)發(fā)工作,涉及Hadoop、Spark、HBase等開(kāi)源項(xiàng)目。在多年的工作過(guò)程中,積累了一定的分布式大數(shù)據(jù)框架性能調(diào)優(yōu)經(jīng)驗(yàn),并且是Apache Chukwa項(xiàng)目的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依賴(lài)關(guān)系(Dependencies)29
2.2.4 RDD分區(qū)計(jì)算(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依賴(lài)關(guān)系(Dependencies)29
2.2.4 RDD分區(qū)計(jì)算(Compute) 34
2.2.5 RDD分區(qū)函數(shù)(partitioner)35
2.3 創(chuàng)建操作 39
2.3.1 集合創(chuàng)建操作 39
2.3.2 存儲(chǔ)創(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 依賴(lài)關(guān)系 59
2.5 控制操作(control operation) 61
2.6 行動(dòng)操作(action operation) 63
2.6.1 集合標(biāo)量行動(dòng)操作 63
2.6.2 存儲(chǔ)行動(dòng)操作 68
2.7 小結(jié) 72
第3 章 Spark 運(yùn)行模式及原理 74
3.1 Spark 運(yùn)行模式概述 74
3.1.1 Spark 運(yùn)行模式列表74
3.1.2 Spark 基本工作流程 75
3.1.3 相關(guān)基本類(lèi) 77
3.2 Local 模式 80
3.2.1 部署及程序運(yùn)行80
3.2.2 內(nèi)部實(shí)現(xiàn)原理 80
3.3 Standalone 模式 81
3.3.1 部署及程序運(yùn)行 81
3.3.2 內(nèi)部實(shí)現(xiàn)原理 85
3.4 Local-cluster 模式 86
3.4.1 部署及程序運(yùn)行 86
3.4.2 內(nèi)部實(shí)現(xiàn)原理 86
3.5 Mesos 模式 87
3.5.1 部署及程序運(yùn)行 87
3.5.2 內(nèi)部實(shí)現(xiàn)原理 88
3.6 Yarn standalone / Yarn cluster 模式 91
3.6.1 部署及程序運(yùn)行 91
3.6.2 內(nèi)部實(shí)現(xiàn)原理 93
3.7 Yarn Client 模式 94
3.7.1 部署及程序運(yùn)行 94
3.7.2 內(nèi)部實(shí)現(xiàn)原理 95
3.8 各種模式的實(shí)現(xiàn)細(xì)節(jié)比較 96
3.8.1 環(huán)境變量的傳遞 97
3.8.2 Jar 包和各種依賴(lài)文件的分發(fā) 99
3.8.3 任務(wù)管理和序列化 101
3.8.4 用戶(hù)參數(shù)配置 102
3.8.5 用戶(hù)及權(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)度過(guò)程中的數(shù)據(jù)本地性問(wèn)題 127
4.8 小結(jié) 127
第5章 Spark 的存儲(chǔ)管理 128
5.1 存儲(chǔ)管理模塊整體架構(gòu) 128
5.1.1 通信層架構(gòu) 129
5.1.2 通信層消息傳遞 132
5.1.3 注冊(cè)存儲(chǔ)管理模塊 133
5.1.4 存儲(chǔ)層架構(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 磁盤(pán)緩存 139
5.2.4 持久化選項(xiàng) 141
5.2.5 如何選擇不同的持久化選項(xiàng) 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 實(shí)時(shí)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 各功能組件對(duì)比分析 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 查詢(xún)優(yōu)化器(Query Optimizer)169
7.2.8 物理計(jì)劃與執(zhí)行 169
7.3 Shark 安裝配置與使用 171
7.3.1 安裝前準(zhǔn)備工作 171
7.3.2 不同運(yùn)行模式下的安裝Shark 172
7.3.2.1 單機(jī)運(yùn)行模式 172
7.3.2.2 集群運(yùn)行模式 172
7.3.2.3 運(yùn)行在亞馬遜AWS 174
7.4 Shark SQL 命令行工具(CLI)174
7.5 使用Shark Shell 178
7.6 啟動(dòng)SharkServer 178
7.7 SharkServer2 配置與啟動(dòng) 179
7.8 緩存數(shù)據(jù)表 180
7.8.1 數(shù)據(jù)緩存級(jí)別 180
7.8.2 創(chuàng)建不同緩存級(jí)別的Shark 數(shù)據(jù)表 180
7.8.3 指定數(shù)據(jù)表緩存策略 181
7.8.4 使用Tachyon 182
7.9 常見(jiàn)問(wèn)題分析 182
7.9.1 OutOfMemory 異常 183
7.9.2 數(shù)據(jù)處理吞吐量低 183
7.9.3 Shark 查詢(xún)比Hive 慢 184
7.10 小結(jié) 184
第8 章 Shark 程序開(kāi)發(fā)與擴(kuò)展 186
8.1 SQL API 186
8.1.1 JDBC 接口訪問(wèn)Shark 187
8.1.2 ODBC 接口訪問(wèn)Shark 188
8.1.3 sql2rdd API 188
8.2 擴(kuò)展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 邏輯計(jì)劃元數(shù)據(jù)綁定和語(yǔ)義分析階段 224
9.1.4 邏輯計(jì)劃優(yōu)化優(yōu)化階段 224
9.1.5 物理計(jì)劃生成階段 225
9.1.6 Shark 和Spark SQL 對(duì)比 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 對(duì)象 232
9.3.4 數(shù)據(jù)類(lèi)型 233
9.3.5 DSL API 舉例 233
9.3.6 表達(dá)式計(jì)算 235
9.3.7 Parquet 列式存儲(chǔ)文件 237
9.3.8 代碼演示 238
Spark 與大數(shù)據(jù)開(kāi)源技術(shù)
11
9.4 Java API 241
9.5 小結(jié) 241
第10 章 Spark Streaming 242
流數(shù)據(jù)處理框架 242
10.1 快速入門(mén) 243
10.2 SparkStreaming 基本概念 245
10.2.1 鏈接和初始化 245
10.2.2 時(shí)間和窗口概念 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ùn)行時(shí)間優(yōu)化 253
10.3.2 內(nèi)存使用優(yōu)化 254
10.4 容錯(cuò)處理 255
10.4.1 工作節(jié)點(diǎn)失效 255
10.4.2 驅(qū)動(dòng)節(jié)點(diǎn)失效 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 計(jì)算框架 275
11.1 圖并行計(jì)算 275
11.1.1 數(shù)據(jù)并行與圖并行計(jì)算 275
11.1.2 圖并行計(jì)算框架簡(jiǎn)介 276
11.1.3 GraphX 簡(jiǎn)介 280
11.2 Graphx 模型設(shè)計(jì)280
11.2.1 數(shù)據(jù)模型 280
11.1.2 圖計(jì)算接口 281
11.3 GraphX 模型實(shí)現(xiàn) 285
11.3.1 圖的分布式存儲(chǔ) 285
11.3.2 圖操
序
2009年的時(shí)候,Netflix公司舉辦了一個(gè)叫作Netflix Prize的推薦算法比賽。這個(gè)比賽匿名公布了Netflix五十萬(wàn)用戶(hù)對(duì)近兩萬(wàn)部電影的一億個(gè)評(píng)分?jǐn)?shù)據(jù),希望參賽者能夠開(kāi)發(fā)出更好的推薦算法,以提高推薦系統(tǒng)的質(zhì)量。這個(gè)比賽的獎(jiǎng)金有一百萬(wàn)美元。一百萬(wàn)美元看似很多,但是和一個(gè)更好的推薦算法給Netflix帶來(lái)的效益相比,實(shí)則九牛一毛。
高昂的獎(jiǎng)金和Netflix提供的真實(shí)數(shù)據(jù)吸引了不少的參賽者,其中也包括了來(lái)自加州大學(xué)伯克利分校(UC Berkeley)的博士生Lester Mackey。Lester師從機(jī)器學(xué)習(xí)領(lǐng)域泰斗Michael Jordan,在一個(gè)叫作AMPLab的大數(shù)據(jù)實(shí)驗(yàn)室里進(jìn)行博士研究。AMPLab和大多數(shù)學(xué)術(shù)界實(shí)驗(yàn)室不同的地方在于實(shí)驗(yàn)室內(nèi)有多個(gè)教授和他們帶領(lǐng)的學(xué)生一起合作。這些研究人員來(lái)自不同的領(lǐng)域,包括機(jī)器學(xué)習(xí)、數(shù)據(jù)庫(kù)、計(jì)算機(jī)網(wǎng)絡(luò)、分布式系統(tǒng)等。當(dāng)時(shí),要想提高算法研究迭代的效率,需要利用多臺(tái)機(jī)器的分布式建模。在嘗試了當(dāng)時(shí)業(yè)界最流行的Hadoop MapReduce后,Lester發(fā)現(xiàn)自己的時(shí)間并不是花在提高算法效率上,而是耗費(fèi)在MapReduce的編程模型和低效的執(zhí)行模式上。這個(gè)時(shí)候,他向?qū)嶒?yàn)室內(nèi)部的另外一名進(jìn)行分布式系統(tǒng)研究的學(xué)生Matei Zaharia求助。
當(dāng)時(shí)年紀(jì)輕輕的Matei在業(yè)界已經(jīng)小有名望。他在雅虎和Facebook實(shí)習(xí)期間做了很多Hadoop早期的奠基工作,包括現(xiàn)今Hadoop系統(tǒng)內(nèi)應(yīng)用最廣的fair scheduler調(diào)度算法。在和Lester的思維碰撞中,Matei總結(jié)了Hadoop MR的不足,開(kāi)始設(shè)計(jì)了第一個(gè)版本的Spark。這個(gè)版本完全為了Lester定制,只有幾百行的代碼,使得Lester可以高效率地進(jìn)行分布式機(jī)器學(xué)習(xí)建模。
Lester所在的The Ensemble團(tuán)隊(duì)最后和BellKor's Pragmatic Chaos設(shè)計(jì)了在效率上并列第一的算法,可惜因?yàn)橥砹?0分鐘提交,與一百萬(wàn)美元獎(jiǎng)金失之交臂。5年之后,Lester和Matei都變成了學(xué)術(shù)界和業(yè)界杰出的人物。Lester成為了斯坦福大學(xué)計(jì)算機(jī)系的教授,帶領(lǐng)著自己的學(xué)生攻克一個(gè)又一個(gè)機(jī)器學(xué)習(xí)和統(tǒng)計(jì)的難題。Matei成為了麻省理工計(jì)算機(jī)系的教授,也是Databricks公司的CTO。
2009年之后的4年里面,AMPLab以Spark為基礎(chǔ)展開(kāi)了很多不同的學(xué)術(shù)研究項(xiàng)目,其中包括了我參與和主導(dǎo)的Shark和GraphX,還有Spark Streaming、MLlib等。4年里隨著Hadoop的發(fā)展,Spark也逐漸從一個(gè)純學(xué)術(shù)研究項(xiàng)目發(fā)展到了開(kāi)始有業(yè)界敢于吃螃蟹的用戶(hù)。
2013年,包括Matei和我在內(nèi)的Spark核心人員共同創(chuàng)立了Databricks公司,立志于提高Spark的發(fā)展速度。過(guò)去兩年,Spark的發(fā)展超越了我們所有人的想象。一年半以前Spark還是一個(gè)連監(jiān)控界面都不存在的系統(tǒng),很難放進(jìn)生產(chǎn)線部署。而一年半后的今天,它已經(jīng)變成了整個(gè)大數(shù)據(jù)生態(tài)圈和Apache Software Foundation內(nèi)最活躍的項(xiàng)目,活躍程度遠(yuǎn)遠(yuǎn)超出了曾經(jīng)Spark只能望其項(xiàng)背的Hadoop。
在從Hadoop轉(zhuǎn)向Spark的道路上,我個(gè)人感覺(jué)國(guó)內(nèi)的速度甚至超越了國(guó)外的社區(qū)。一年以前我第一次在中國(guó)的大數(shù)據(jù)會(huì)議上宣講Spark,當(dāng)時(shí)臺(tái)下的大多數(shù)人對(duì)這個(gè)新的項(xiàng)目還有很大的質(zhì)疑,認(rèn)為其只會(huì)曇花一現(xiàn)。一年之后,Spark的每個(gè)新版本中都有不少華人貢獻(xiàn)的代碼,國(guó)內(nèi)很多高科技和互聯(lián)網(wǎng)公司也都有了Spark的生產(chǎn)作業(yè),不少用戶(hù)直接減少了在Hadoop MapReduce上的投資,把新的項(xiàng)目都轉(zhuǎn)移到了Spark上。
今天正好是Databricks公司成立一年半,也是Spark 1.2版本第一個(gè)release candidate發(fā)布的日期。Spark的高速發(fā)展導(dǎo)致了中文信息的脫節(jié)。這本書(shū)深入淺出地介紹了Spark和Spark上多個(gè)重要計(jì)算框架,希望它的問(wèn)世可以更好地在大中華地區(qū)普及Spark,增進(jìn)華人Spark社區(qū)的發(fā)展。
辛湜 Reynold Xin
2014年11月30號(hào)
Berkeley, CA