Preface前言為什么寫這本書給本書寫前言時(shí),讓我想起了兩年前給《深入理解Spark:核心思想與源碼分析》一書寫前言的經(jīng)歷。我不禁想起崔護(hù)的《題都城南莊》這首詩,詩的內(nèi)容是:
去年今日此門中,人面桃花相映紅。
人面不知何處去,桃花依舊笑春風(fēng)。
從核心思想和架構(gòu)來看,Spark依然是那個(gè)Spark,但是我已經(jīng)找了一個(gè)新的“東家”。我的年齡不知不覺中又長了兩歲,Spark也在大數(shù)據(jù)領(lǐng)域從“新貴”變成了“老人”。Spark的版本從0.x.x到2.x.x基本上也是用了兩年時(shí)間。
自從《深入理解Spark:核心思想與源碼分析》一書出版后,引起了一些市場反響,更難得的是得到了很多讀者的反饋。一些熱心的讀者通過微信或者郵件向我指出了書中內(nèi)容的很多不足之處,包括錯別字、錯誤的描述、代碼分析有點(diǎn)像流水賬、提綱挈領(lǐng)的內(nèi)容偏少、代碼版本過低等。一些錯誤在修訂的版本中得到了解決,有些修正的內(nèi)容則通過單獨(dú)寫博客來補(bǔ)充。在與讀者的溝通過程中,也糾正了我對一些問題的理解偏差。再次深深地感謝廣大讀者的支持與幫助!
一些讀者對《深入理解Spark:核心思想與源碼分析》一書的內(nèi)容非常肯定,希望能夠出第2版,高婧雅編輯也一再“慫恿”我,但是我一直沒有寫第2版的打算。我當(dāng)時(shí)希望有人能夠以更好的方式寫一本介紹和分析Spark 2.0版本的源碼分析書籍,因?yàn)槲腋杏X之前的寫作方式的確不是很好。在我心中一直有個(gè)矛盾:如果源碼太少,源碼分析的書籍將退化成單純講原理的書籍,對于想深入理解Spark實(shí)現(xiàn)的讀者來說這是不夠的;如果源碼太多,又讓人有堆砌代碼或者“混”篇幅的感覺。很多源碼分析的書只是簡單說說接口或者方法的功能,讓人始終有種“霧里看花”的感覺。所以我一直很期待能有更好的方式來寫作源碼分析類的書。
在一年多的等待中,我始終沒有發(fā)現(xiàn)類似書籍的出現(xiàn),于是我打算再做一次嘗試。這次擯棄了《深入理解Spark:核心思想與源碼分析》一書中按照代碼執(zhí)行流程分析的方式,改為先從整體上介紹一個(gè)系統(tǒng),然后逐個(gè)分析每個(gè)組件的功能,最后將這些組件之間的關(guān)系用流程圖的方式串聯(lián)起來。本書的寫作方式依然犯有代碼過多的“毛病”,但我還是期待本書能帶來一些新的氣象。
本書的主要特色按照源碼分析的習(xí)慣設(shè)計(jì),從腳本分析到初始化,再到核心內(nèi)容。整個(gè)過程遵循由淺入深的基本思路。
每一章先對本章的內(nèi)容有個(gè)總體介紹,然后深入分析各個(gè)組件的實(shí)現(xiàn)原理,最后將各個(gè)組件之間的關(guān)系通過執(zhí)行流程來展現(xiàn)。
本書盡可能地用圖來展示原理,以加速讀者對內(nèi)容的掌握。
本書講解的很多實(shí)現(xiàn)及原理都值得借鑒,可以幫助讀者提升架構(gòu)設(shè)計(jì)、程序設(shè)計(jì)等方面的能力。
本書盡可能保留較多的源碼,以便于初學(xué)者能夠在脫離辦公環(huán)境的地方(如地鐵、公交等),也能輕松閱讀。
讀者對象源碼閱讀是一項(xiàng)苦差事,人力和時(shí)間成本都很高,尤其對于剛剛接觸Spark的人來說更是如此。本書盡可能保留源碼,使得分析過程不至于產(chǎn)生跳躍感,目的是降低大多數(shù)人的學(xué)習(xí)門檻。如果你是從事IT工作1~3年的新人或者希望開始學(xué)習(xí)Spark的核心知識,本書非常適合你。如果你已經(jīng)對Spark有所了解或者已經(jīng)使用它,還想進(jìn)一步提高自己,那么本書更適合你。如果你是一個(gè)開發(fā)新手,對Java、Linux等基礎(chǔ)知識還不是很了解的話,本書可能不太適合你。如果你已經(jīng)對Spark有深入的研究,本書也許可以作為你的參考資料。
總體來說,本書適合以下人群:
已經(jīng)了解過Spark,但還想深入理解Spark實(shí)現(xiàn)原理的人;大數(shù)據(jù)技術(shù)愛好者;對性能優(yōu)化和部署方案感興趣的運(yùn)維工程師與架構(gòu)師;開源代碼愛好者,喜歡研究源碼的同學(xué)可以通過本書學(xué)到一些閱讀源碼的方式、方法。
本書不會教你如何開發(fā)Spark應(yīng)用程序,而只拿word count的經(jīng)典例子做演示。本書會簡單介紹Hadoop MapReduce、Hadoop YARN、Mesos、Alluxio(Tachyon)、ZooKeeper、HDFS、Akka、Jetty、Netty,但不會過多介紹這些框架的使用,因?yàn)槭袌錾弦呀?jīng)有豐富的書籍供讀者挑選。本書也不會過多介紹Scala、Java、Shell的語法,讀者可以在市場上選擇適合自己的書籍閱讀。本書將無比適合那些想要破解“潘多拉魔盒”的人!
如何閱讀本書本書一共有10章內(nèi)容,主要包括以下部分。
準(zhǔn)備部分(第1~2章):簡單介紹了Spark的環(huán)境搭建和基本原理,幫助讀者了解一些背景知識。
基礎(chǔ)部分(第3~5章):介紹Spark的基礎(chǔ)設(shè)施、SparkContext的初始化、Spark執(zhí)行環(huán)境等內(nèi)容。
核心部分(第6~9章):這是Spark最為核心的部分,包括存儲體系、調(diào)度系統(tǒng)、計(jì)算引擎、部署模式等。
API部分(第10章):這部分主要對Spark的新舊API進(jìn)行對比,對新API進(jìn)行介紹。
本書最后的附錄中還包括一些內(nèi)容:附錄A介紹的是Spark中最常用的工具類Utils;附錄B是Akka的簡介;附錄C為Jetty的簡介和工具類JettyUtils的介紹;附錄D為Metrics庫的簡介和Metrics中部分API的介紹;附錄E演示了Hadoop 1.0版本中的word count例子;附錄F
耿嘉安,藝龍大數(shù)據(jù)平臺架構(gòu)師,前阿里巴巴高級開發(fā)工程師,11年開發(fā)經(jīng)驗(yàn),對Spark有深入研究,精通大數(shù)據(jù)業(yè)務(wù)、Java架構(gòu)設(shè)計(jì),擅長J2EE,有9年Java相關(guān)開發(fā)經(jīng)驗(yàn),關(guān)注Spark、Storm、ODPS。