本書(shū)針對(duì)spark從驗(yàn)證性環(huán)境遷移到實(shí)際生產(chǎn)環(huán)境時(shí)會(huì)遇到的各種問(wèn)題給出了實(shí)際的幫助,涵蓋了開(kāi)發(fā)及維護(hù)生產(chǎn)級(jí)Spark應(yīng)用的各種方法、組件與有用實(shí)踐。全書(shū)分為6章,第1-2章幫助讀者深入理解Spark的內(nèi)部機(jī)制以及它們?cè)谏a(chǎn)流程中的含義;第3章和第5章闡述了針對(duì)配置參數(shù)的法則和權(quán)衡方案,用來(lái)調(diào)優(yōu)Spark,改善性能,獲得高可用性和容錯(cuò)性;第4章專(zhuān)門(mén)討論Spark應(yīng)用中的安全問(wèn)題;第6章則全面介紹生產(chǎn)流,以及把一個(gè)應(yīng)用遷移到一個(gè)生產(chǎn)工作流中時(shí)所需要的各種組件,同時(shí)對(duì)Spark生態(tài)系統(tǒng)進(jìn)行了梳理。
適讀人群 :開(kāi)發(fā)人員、Spark應(yīng)用的項(xiàng)目經(jīng)理,以及那些在考慮將開(kāi)發(fā)的Spark應(yīng)用程序遷移到生產(chǎn)環(huán)境的系統(tǒng)管理員(或者DevOps)
本書(shū)涵蓋了開(kāi)發(fā)及維護(hù)生產(chǎn)級(jí)Spark應(yīng)用的各種方法、組件與有用實(shí)踐。作者均為大數(shù)據(jù)社區(qū)的知名專(zhuān)家,帶著你一步步從概念驗(yàn)證或Spark應(yīng)用的demo版遷移到生產(chǎn)環(huán)境,用真實(shí)案例分析常見(jiàn)問(wèn)題、限制、挑戰(zhàn)和機(jī)會(huì)。
調(diào)優(yōu)Spark應(yīng)用
管理資源、組織存儲(chǔ)、做好監(jiān)控
了解在生產(chǎn)環(huán)境中使用Spark時(shí)有哪些潛在的問(wèn)題
知曉Spark用在何處*能發(fā)揮作用
預(yù)估集群的規(guī)模,搞清楚硬件需求
通過(guò)內(nèi)存管理、分區(qū)、shuffle等技術(shù)提升性能
用Kerberos保證數(shù)據(jù)的安全
解決Spark streaming在生產(chǎn)環(huán)境中的問(wèn)題
將Spark與Yarn、Mesos、Tachyon等集成
引言 Apache Spark 一個(gè)易于掌握的、面向大規(guī)模計(jì)算的分布式計(jì)算框架。它又被稱(chēng)為“計(jì)算網(wǎng)格”或者“計(jì)算框架”——考慮到Spark 使開(kāi)發(fā)人員能夠便捷地獲得大量數(shù)據(jù)且進(jìn)行分析,這些說(shuō)法也是正確的。 Apache Spark 由Matei Zaharia 2009 年在加州大學(xué)伯克利分校創(chuàng)建,一開(kāi)始把它作為一個(gè)研究項(xiàng)目,后來(lái)在2010 年捐給開(kāi)源社區(qū)。2013 年,Spark 作為一個(gè)孵化項(xiàng)目加入Apache 軟件基金會(huì),并于2014 年成為頂級(jí)項(xiàng)目(TLP),一直發(fā)展到現(xiàn)在。 本書(shū)面向的讀者 如果你拿起這本書(shū),我們認(rèn)為你應(yīng)該對(duì)Spark 非常感興趣。本書(shū)面向的讀者群體是開(kāi)發(fā)人員、Spark 應(yīng)用的項(xiàng)目經(jīng)理,以及那些準(zhǔn)備考慮將開(kāi)發(fā)的Spark 應(yīng)用程序遷移到生產(chǎn)環(huán)境的系統(tǒng)管理員(或者DevOps)。 涵蓋的內(nèi)容 本書(shū)涵蓋了開(kāi)發(fā)及維護(hù)生產(chǎn)級(jí)Spark 應(yīng)用的各種方法論、組件與最佳實(shí)踐。也就是說(shuō),我們假設(shè)你已經(jīng)有一個(gè)或者打算開(kāi)發(fā)一個(gè)Spark 應(yīng)用,并且具備Spark 的一些基礎(chǔ)知識(shí)。
內(nèi)容結(jié)構(gòu) 本書(shū)分為6 章,旨在傳授給讀者以下知識(shí): ? 深入理解Spark 的內(nèi)部機(jī)制以及它們?cè)谏a(chǎn)流程中的含義。 ? 一組針對(duì)配置參數(shù)的法則和權(quán)衡方案,用來(lái)調(diào)優(yōu)Spark 以獲得高可用性和容錯(cuò)性。 ? 全面了解生產(chǎn)流,以及把一個(gè)應(yīng)用遷移到一個(gè)生產(chǎn)工作流中時(shí)所需要的各種組件。 讀者需要具備的知識(shí) 作為讀者,你應(yīng)該具備基本的Spark 開(kāi)發(fā)及使用的知識(shí)。本書(shū)不會(huì)講述入門(mén)級(jí)內(nèi)容。市面上有許多關(guān)于Spark 入門(mén)的書(shū)籍、論壇及各類(lèi)資源,如果你對(duì)某部分的知識(shí)點(diǎn)有所缺失,可以閱讀相關(guān)主題的資料以便更好地理解本書(shū)所表達(dá)的內(nèi)容。本書(shū)示例的源代碼可從Wiley 網(wǎng)站上下載:( www.wiley.com/go/sparkbigdataclustercomputing。) 格式的約定 為幫助你了解本書(shū)的內(nèi)容及主線(xiàn),在本書(shū)用了一些格式約定。 注意 這個(gè)樣例表示注意事項(xiàng)、小提示、暗示、技巧,或者當(dāng)前討論的旁白。
? 當(dāng)介紹一些新的術(shù)語(yǔ)和重要的詞時(shí),會(huì)采用黑體(中文)或者加粗(英文)。 ? 在文本里顯示代碼時(shí)會(huì)使用代碼體, 譬如: persistence.properties。 源碼 學(xué)習(xí)本書(shū)中的示例時(shí),你可以選擇手動(dòng)輸入所有代碼,或使用本書(shū)所配套的源 碼文件。所有的源碼均可從www.wiley.com 下載。對(duì)于本書(shū),下載頁(yè)面在 www.wiley.com/go/sparkbigdataclustercomputing 的“Download Code” 標(biāo)簽頁(yè)上。 可以在www.wiley.com 上通過(guò)英文版的ISBN(978-1-119-25401-0)來(lái)搜索本 書(shū)。 你也可以在https://github.com/backstopmedia/sparkbook 上找到 這些文件。 下載完代碼,隨便用哪種解壓工具解壓即可。 讀者服務(wù) 輕松注冊(cè)成為博文視點(diǎn)社區(qū)用戶(hù)(www.broadview.com.cn),掃碼直達(dá)本書(shū)頁(yè)面。 ? 提交勘誤:您對(duì)書(shū)中內(nèi)容的修改意見(jiàn)可在 提交勘誤 處提交,若被采納,將獲贈(zèng)博文視點(diǎn)社區(qū)積分(在您購(gòu)買(mǎi)電子書(shū)時(shí),積分可用來(lái)抵扣相應(yīng)金額)。
? 交流互動(dòng):在頁(yè)面下方 讀者評(píng)論 處留下您的疑問(wèn)或觀(guān)點(diǎn),與我們和其他讀者一同學(xué)習(xí)交流。 頁(yè)面入口:http://www.broadview.com.cn/31364
Ilya Ganelin 從機(jī)器人專(zhuān)家成功跨界成為一名數(shù)據(jù)工程師。他曾在密歇根大學(xué)花費(fèi)數(shù)年時(shí)間研究自發(fā)現(xiàn)機(jī)器人(self-discovering robot),在波音公司從事手機(jī)及無(wú)線(xiàn)嵌入式DSP(數(shù)據(jù)信號(hào)處理)軟件開(kāi)發(fā)項(xiàng)目,隨后加入Capital One 的數(shù)據(jù)創(chuàng)新實(shí)驗(yàn)室,由此進(jìn)入大數(shù)據(jù)領(lǐng)域。Ilya是Apache Spark核心組件的活躍貢獻(xiàn)者以及Apache Apex的提交者(committer),他希望研究構(gòu)建下一代分布式計(jì)算平臺(tái)。同時(shí),Ilya還是一個(gè)狂熱的面包烘焙師、廚師、賽車(chē)手和滑雪愛(ài)好者。
Ema Orhian 是一位對(duì)伸縮性算法充滿(mǎn)激情的大數(shù)據(jù)工程師。她活躍于大數(shù)據(jù)社區(qū),組織會(huì)議,在會(huì)上發(fā)表演講,積極投身于開(kāi)源項(xiàng)目。她是jaws-spark-sql-rest(SparkSQL數(shù)據(jù)倉(cāng)庫(kù)上的一種資源管理器)的主要提交者。Ema一直致力于將大數(shù)據(jù)分析引入醫(yī)療領(lǐng)域,開(kāi)發(fā)一個(gè)對(duì)大型數(shù)據(jù)集計(jì)算統(tǒng)計(jì)指標(biāo)的端到端的管道。
Kai Sasaki 是一位日本軟件工程師,對(duì)分布式計(jì)算和機(jī)器學(xué)習(xí)很感興趣。但是一開(kāi)始他并未從事Hadoop或Spark相關(guān)的工作,他最初的興趣是中間件以及提供這些服務(wù)的基礎(chǔ)技術(shù),是互聯(lián)網(wǎng)驅(qū)使他轉(zhuǎn)向大數(shù)據(jù)技術(shù)領(lǐng)域。Kai一直是Spark的貢獻(xiàn)者,開(kāi)發(fā)了不少M(fèi)Llib和ML庫(kù)。如今,他正嘗試研究將機(jī)器學(xué)習(xí)和大數(shù)據(jù)結(jié)合起來(lái)。他相信Spark在大數(shù)據(jù)時(shí)代的人工智能領(lǐng)域也將扮演重要角色。他的GitHub地址為:https://github.com/Lewuathe。
Brennon York既是一名特技飛行員,也是一位計(jì)算機(jī)科學(xué)家。他的愛(ài)好是分布式計(jì)算、可擴(kuò)展架構(gòu)以及編程語(yǔ)言。自2014年以來(lái),他就是Apache Spark的核心貢獻(xiàn)者,目標(biāo)是通過(guò)發(fā)展GraphX和核心編譯環(huán)境,培育一個(gè)更強(qiáng)大的Spark社區(qū),激發(fā)更多合作。從為Spark提交貢獻(xiàn)開(kāi)始,York就一直在用Spark,而且從那個(gè)時(shí)候開(kāi)始,就使用Spark將應(yīng)用帶入生產(chǎn)環(huán)境。
李剛,曾在IBM工作近20年,在數(shù)據(jù)中心IT建設(shè)、優(yōu)化及管理領(lǐng)域有深入的研究和豐富的經(jīng)驗(yàn)。在IBM期間負(fù)責(zé)IBM系統(tǒng)服務(wù)相關(guān)解決方案的開(kāi)發(fā)與管理,其中包含數(shù)據(jù)中心基礎(chǔ)設(shè)施與IT技術(shù)瓶體、數(shù)據(jù)中心高可用性管理暨災(zāi)難恢復(fù),以及企業(yè)IT戰(zhàn)略及IT架構(gòu)優(yōu)化等相關(guān)領(lǐng)域。
第1 章 成功運(yùn)行Spark job / 1
安裝所需組件 / 2
原生安裝Spark Standalone 集群 /3
分布式計(jì)算的發(fā)展史/ 3
步入云時(shí)代 /5
理解資源管理/6
使用各種類(lèi)型的存儲(chǔ)格式 /9
文本文件/11
Sequence 文件/13
Avro 文件/ 13
Parquet 文件 /13
監(jiān)控和度量的意義/ 14
Spark UI/ 14
Spark Standalone UI/ 17
Metrics REST API / 17
Metrics System / 18
外部監(jiān)控工具 / 18
總結(jié) /19
第2 章 集群管理 /21
背景知識(shí)/ 23
Spark 組件 / 26
Driver / 27
workers 與executors /28
配置 / 30
Spark Standalone/33
架構(gòu) / 34
單節(jié)點(diǎn)設(shè)置場(chǎng)景 / 34
多節(jié)點(diǎn)設(shè)置 / 36
YARN / 36
架構(gòu) / 38
動(dòng)態(tài)資源分配 /41
場(chǎng)景 /43
Mesos/ 45
安裝/46
架構(gòu) / 47
動(dòng)態(tài)資源分配/ 49
基本安裝場(chǎng)景 / 50
比較 / 52
總結(jié) /56
第3 章 性能調(diào)優(yōu) /59
Spark 執(zhí)行模型/ 60
分區(qū) /62
控制并行度/62
分區(qū)器/64
shuffle 數(shù)據(jù) /65
shuffle 與數(shù)據(jù)分區(qū) / 67
算子與shuffle / 70
shuffle 并不總是壞事 /75
序列化 / 75
Kryo 注冊(cè)器 / 77
Spark 緩存 / 77
SparkSQL 緩存 / 81
內(nèi)存管理 /82
垃圾回收 / 83
共享變量 / 84
廣播變量 / 85
累加器 /87
數(shù)據(jù)局部性 / 90
總結(jié) / 91
第4 章 安全/ 93
架構(gòu)/ 94
Security Manager/ 94
設(shè)定配置 / 95
ACL / 97
配置 / 97
提交job / 98
Web UI/ 99
網(wǎng)絡(luò)安全 / 107
加密/ 108
事件日志 /113
Kerberos/114
Apache Sentry./114
總結(jié) /115
第5 章 容錯(cuò)或job 執(zhí)行/ 117
Spark job 的生命周期 /118
Spark master /119
Spark driver/ 122
Spark worker /124
job 生命周期 /124
job 調(diào)度 /125
應(yīng)用程序內(nèi)部調(diào)度 / 125
用外部工具進(jìn)行調(diào)度 / 133
容錯(cuò) /135
內(nèi)部容錯(cuò)與外部容錯(cuò) / 136
SLA/ 137
RDD / 138
Batch vs Streaming / 145
測(cè)試策略 / 148
推薦配置/ 155
總結(jié) / 158
第6 章 超越Spark /159
數(shù)據(jù)倉(cāng)庫(kù) /159
SparkSQL CLI/161
Thrift JDBC/ODBC 服務(wù)器 / 162
Hive on Spark/ 162
機(jī)器學(xué)習(xí) / 164
DataFrame / 165
MLlib 和ML / 167
Mahout on Spark / 174
Hivemall On Spark/ 175
外部的框架 / 176
Spark Package / 177
XGBoost/ 179
spark-jobserver / 179
未來(lái)的工作 /182
與參數(shù)服務(wù)器集成 / 184
深度學(xué)習(xí) / 192
Spark 在企業(yè)中的應(yīng)用 / 200
用Spark 及Kafka 收集用戶(hù)活動(dòng)日志 / 200
用Spark 做實(shí)時(shí)推薦/ 202
Twitter Bots 的實(shí)時(shí)分類(lèi) / 204
總結(jié) / 205