前 言 preface
本書是大資料和spark方面的一本簡明易懂的手冊。它将助你學習如何用spark來完成很多大資料分析任務。它覆寫了高效利用spark所需要知道的一切内容。
購買本書的好處之一就是:幫你高效學習spark,節省你大量時間。本書所覆寫的主題在網際網路上都可以找到,網上有很多關于spark的部落格、ppt和視訊。事實上,spark的資料浩如煙海,你可能需要在網絡上不同地方花費數月來閱讀關于spark的點滴和碎片知識。本書提供了一個更好的選擇:内容組織精妙,并以易懂的形式表現出來。
本書的内容和材料的組織基于我在不同的大資料相關會議上所組織的spark研讨會。與會者對于内容和流程方面的積極回報激勵我寫了這本書。
書和研讨會的差別之一在于後者具有互動性。然而,組織過幾次spark研讨會後,我了解到了人們普遍存在的問題,我把這些内容也收錄在本書中。如果閱讀本書時有問題,我鼓勵你們通過linkedin或twitter聯系我。任何問題都可以問,不存在什麼“愚蠢的問題”。
本書沒有覆寫spark的每一個細節,而是包含了高效使用spark所需要知道的重要主題。我的目标是幫你建立起堅實的基礎。一旦基礎牢固,就可以輕松學習一項新技術的所有細節。另外,我希望保持本書盡可能簡單。如果讀完本書後發現spark看起來也挺簡單的,那我的目的也就達到了。
本書中的任何主題都不要求有先驗知識。本書會一步步介紹關鍵概念,每一節建立在前一節的基礎上。同樣,每一章都是下一章的基石。如果當下不需要,你可以略過後面一些章節中講解的不同的spark庫。不過我還是鼓勵你閱讀所有章節。即使可能和你目前的項目不相關,那些部分也可能會給你新的靈感。
通過本書你會學到很多spark及其相關技術的知識。然而,要充分利用本書,建議親自運作書中所展示的例子:用代碼示例做實驗。當你寫代碼并執行時,很多事情就變得更加清晰。如果你一邊閱讀一邊練習并用示例來實驗,當讀完本書時,你将成為一名基礎紮實的spark開發者。
在我開發spark應用時,我發現了一個有用的資源—spark官方api文檔,其通路位址為http://spark.apache.org/docs/latest/api/scala。初學者可能覺得它難以了解,不過一旦你學習了基本概念後,會發現它很有用。
另一個有用的資源是spark郵件清單。spark社群很活躍、有用。不僅spark開發者會回答問題,有經驗的spark使用者也會志願幫助新人。無論你遇到什麼問題,很有可能spark郵件清單中有人已經解決過這個問題了。
而且,也可以聯系我,我很樂意傾聽,歡迎回報、建議和提問。
—mohammed guller
linkedin: www.linkedin.com/in/mohammedguller
twitter: @mohammedguller
contents 目 錄
譯者序
前言
緻謝
<a href="https://yq.aliyun.com/articles/88662" target="_blank">第1章 大資料技術一覽</a>
<a href="https://yq.aliyun.com/articles/88662" target="_blank">1.1 hadoop</a>
1.1.1 hdfs
1.1.2 mapreduce
1.1.3 hive
<a href="https://yq.aliyun.com/articles/88668" target="_blank">1.2 資料序列化</a>
1.2.1 avro
1.2.2 thrift
1.2.3 protocol buffers
1.2.4 sequencefile
<a href="https://yq.aliyun.com/articles/88670" target="_blank">1.3 列存儲</a>
1.3.1 rcfile
1.3.2 orc
1.3.3 parquet
<a href="https://yq.aliyun.com/articles/88679" target="_blank">1.4 消息系統</a>
1.4.1 kafka
1.4.2 zeromq
<a href="https://yq.aliyun.com/articles/88682" target="_blank">1.5 nosql</a>
1.5.1 cassandra
1.5.2 hbase
<a href="https://yq.aliyun.com/articles/88687" target="_blank">1.6 分布式sql查詢引擎</a>
1.6.1 impala
1.6.2 presto
1.6.3 apache drill
<a href="https://yq.aliyun.com/articles/88690" target="_blank">1.7 總結</a>
<a href="https://yq.aliyun.com/articles/88694" target="_blank">第2章 scala程式設計</a>
<a href="https://yq.aliyun.com/articles/88694" target="_blank">2.1 函數式程式設計</a>
2.1.1 函數
2.1.2 不可變資料結構
2.1.3 一切皆表達式
<a href="https://yq.aliyun.com/articles/88761" target="_blank">2.2 scala基礎</a>
2.2.1 起步
2.2.2 基礎類型
2.2.3 變量
2.2.4 函數
2.2.5 類
2.2.6 單例
2.2.7 樣本類
2.2.8 模式比對
2.2.9 操作符
2.2.10 特質
2.2.11 元組
2.2.12 option類型
2.2.13 集合
<a href="https://yq.aliyun.com/articles/88765" target="_blank">2.3 一個單獨的scala應用程式</a>
<a href="https://yq.aliyun.com/articles/88767" target="_blank">2.4 總結</a>
<a href="https://yq.aliyun.com/articles/88772" target="_blank">第3章 spark core</a>
<a href="https://yq.aliyun.com/articles/88772" target="_blank">3.1 概述</a>
3.1.1 主要特點
3.1.2 理想的應用程式
<a href="https://yq.aliyun.com/articles/88777" target="_blank">3.2 總體架構</a>
3.2.1 worker
3.2.2 叢集管理者
3.2.3 驅動程式
3.2.4 執行者
3.2.5 任務
<a href="https://yq.aliyun.com/articles/88781" target="_blank">3.3 應用運作</a>
3.3.1 術語
3.3.2 應用運作過程
<a href="https://yq.aliyun.com/articles/88786" target="_blank">3.4 資料源</a>
<a href="https://yq.aliyun.com/articles/88828" target="_blank">3.5 api</a>
3.5.1 sparkcontext
3.5.2 rdd
3.5.3 建立rdd
3.5.4 rdd操作
3.5.5 儲存rdd
<a href="https://yq.aliyun.com/articles/88831" target="_blank">3.6 惰性操作</a>
<a href="https://yq.aliyun.com/articles/88838" target="_blank">3.7 緩存</a>
3.7.1 rdd的緩存方法
3.7.2 rdd緩存是可容錯的
3.7.3 緩存記憶體管理
<a href="https://yq.aliyun.com/articles/88841" target="_blank">3.8 spark作業</a>
<a href="https://yq.aliyun.com/articles/88842" target="_blank">3.9 共享變量</a>
3.9.1 廣播變量
3.9.2 累加器
<a href="https://yq.aliyun.com/articles/88843" target="_blank">3.10 總結</a>
第4章 使用spark shell進行互動式資料分析
4.1 起步
4.1.1 下載下傳
4.1.2 解壓
4.1.3 運作
4.2 repl指令
4.3 把spark shell當成scala shell使用
4.4 數值分析
4.5 日志分析
4.6 總結
第5章 編寫spark應用
5.1 spark中的hello world
5.2 編譯并運作應用
5.2.1 sbt
5.2.2 編譯代碼
5.2.3 運作應用
5.3 監控應用
5.4 調試應用
5.5 總結
第6章 spark streaming
6.1 spark streaming簡介
6.1.1 spark streaming是一個spark類庫
6.1.2 總體架構
6.1.3 資料流來源
6.1.4 接收器
6.1.5 目的地
6.2 api
6.2.1 streamingcontext
6.2.2 spark streaming應用基本結構
6.2.3 dstream
6.2.4 建立dstream
6.2.5 處理資料流
6.2.6 輸出操作
6.2.7 視窗操作
6.3 一個完整的spark streaming應用
6.4 總結
第7章 spark sql
7.1 spark sql簡介
7.1.1 和其他spark庫內建
7.1.2 可用性
7.1.3 資料源
7.1.4 資料處理接口
7.1.5 與hive的互操作性
7.2 性能
7.2.1 磁盤i/o
7.2.2 分區
7.2.3 列存儲
7.2.4 記憶體中的列式緩存
7.2.5 行跳過
7.2.6 謂詞下推
7.2.7 查詢優化
7.3 應用
7.3.1 etl
7.3.2 資料可視化
7.3.3 分布式jdbc/odbc sql查詢引擎
7.3.4 資料倉庫
7.4 api
7.4.1 關鍵抽象
7.4.2 建立dataframe
7.4.3 在程式中使用sql/hiveql處理資料
7.4.4 使用dataframe api處理資料
7.4.5 儲存dataframe
7.5 内置函數
7.5.1 聚合操作
7.5.2 集合操作
7.5.3 日期/時間
7.5.4 數學
7.5.5 字元串
7.5.6 視窗
7.6 udf和udaf
7.7 一個互動式分析的例子
7.8 使用spark sql jdbc伺服器進行互動式分析
7.9 總結
第8章 使用spark進行機器學習
8.1 機器學習簡介
8.1.1 特征
8.1.2 标簽
8.1.3 模型
8.1.4 訓練資料
8.1.5 測試資料
8.1.6 機器學習應用
8.1.7 機器學習算法
8.1.8 超參數
8.1.9 模型評價
8.1.10 機器學習的主要步驟
8.2 spark機器學習庫
8.3 mllib概覽
8.3.1 與其他spark庫內建
8.3.2 統計工具
8.3.3 機器學習算法
8.4 mllib api
8.4.1 資料類型
8.4.2 算法和模型
8.4.3 模型評價
8.5 mllib示例應用
8.5.1 資料集
8.5.2 目标
8.5.3 代碼
8.6 spark ml
8.6.1 ml資料集
8.6.2 transformer
8.6.3 estimator
8.6.4 pipeline
8.6.5 pipelinemodel
8.6.6 evaluator
8.6.7 網格搜尋
8.6.8 crossvalidator
8.7 spark ml示例應用
8.7.1 資料集
8.7.2 目标
8.7.3 代碼
8.8 總結
第9章 使用spark進行圖處理
9.1 圖簡介
9.1.1 無向圖
9.1.2 有向圖
9.1.3 有向多邊圖
9.1.4 屬性圖
9.2 graphx簡介
9.3 graphx api
9.3.1 資料抽象
9.3.2 建立圖
9.3.3 圖屬性
9.3.4 圖操作符
9.4 總結
第10章 叢集管理者
10.1 獨立叢集管理者
10.1.1 架構
10.1.2 建立一個獨立叢集
10.1.3 在獨立叢集中運作spark應用
10.2 apache mesos
10.2.1 架構
10.2.2 建立一個mesos叢集
10.2.3 在mesos叢集上運作spark應用
10.3 yarn
10.3.1 架構
10.3.2 在yarn叢集上運作spark應用
10.4 總結
第11章 監控
11.1 監控獨立叢集
11.1.1 監控spark master
11.1.2 監控spark worker
11.2 監控spark應用
11.2.1 監控一個應用所運作的作業
11.2.2 監控一個作業的不同階段
11.2.3 監控一個階段中的任務
11.2.4 監控rdd存儲
11.2.5 監控環境
11.2.6 監控執行者
11.2.7 監控spark流應用
11.2.8 監控spark sql查詢
11.2.9 監控spark sql jdbc/odbc伺服器
11.3 總結
參考文獻