自己犧牲了7個月的周末和下班空閑時間,通過研究Spark源碼和原理,總結整理的《深入理解Spark:核心思想與源碼分析》一書現在已經正式出版上市,目前亞馬遜、京東、當當、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究源碼時的Spark版本是1.2.0,經過7個多月的研究和出版社近4個月的流程,Spark自身的版本迭代也很快,如今最新已經是1.6.0。目前市面上另外2本源碼研究的Spark書籍的版本分別是0.9.0版本和1.2.0版本,看來這些書的作者都與我一樣,遇到了這種問題。由於研究和出版都需要時間,所以不能及時跟上Spark的腳步,還請大家見諒。但是Spark核心部分的變化相對還是很少的,如果對版本不是過於追求,依然可以選擇本書。
京東:http://item.jd.com/11846120.html
當當:http://product.dangdang.com/23838168.html
亞馬遜:http://www.amazon.cn/gp/product/B01A5G5LHK/sr=8-1/qid=1452505597/ref=olp_product_details?ie=UTF8&me=&qid=1452505597&sr=8-1
為了讓大家對本書有個大致了解,這里將本書的前言及目錄附上:
前言
為什么寫這本書
要回答這個問題,需要從我個人的經歷說起。說來慚愧,我第一次接觸計算機是在高三。當時跟大家一起去網吧玩CS,跟身邊的同學學怎么“玩”。正是通過這種“玩”的過程,讓我了解到計算機並沒有那么神秘,它也只是台機器,用起來似乎並不比打開電視機復制多少。高考填志願的時候,憑着直覺“糊里糊塗”就選擇了計算機專業。等到真正學習計算機課程的時候卻又發現,它其實很難!
早在2004年,還在學校的我跟很多同學一樣,喜歡看Flash,也喜歡談論Flash甚至做Flash。感覺Flash正如它的名字那樣“閃光”。那些年,在學校里,知道Flash的人可要比知道Java的人多得多,這說明當時的Flash十分火熱。此外Oracle也成為關系型數據庫里的領軍人物,很多人甚至覺得懂Oracle要比懂Flash、Java及其它數據庫要厲害得多!
2007年,筆者剛剛參加工作不久。那時Struts1、Spring、Hibernate幾乎可以稱為那些用Java作為開發語言的軟件公司的三駕馬車。很快隨着Struts2的誕生,很快替代了Struts1的地位,讓我第一次意識到IT領域的技術更新竟然如此之快!隨着很多傳統軟件公司向互聯網公司轉型,更讓人吃驚的是,當初那個勇於技術更新的年輕人Gavin King,也許很難想象他創造的Hibernate也難以確保其地位,iBATIS誕生了!
2010年,有關Hadoop的技術圖書涌入中國,當時很多公司用它只是為了數據統計、數據挖掘或者搜索。一開始,人們對於Hadoop的認識和使用可能相對有限。大約2011年的時候,關於雲計算的概念在網上吵得火熱,當時依然在做互聯網開發的我,對其只是“道聽途說”。后來跟同事借了一本有關雲計算的書,回家挑着看了一些內容,之后什么也沒有弄到手,悵然若失!上世紀60年代,美國的軍用網絡作為互聯網的雛形,很多內容已經與雲計算中的某些說法相類似。到上世紀80年代,互聯網就已經開啟了雲計算,為什么如今又要重提這樣的概念?這個問題筆者可能回答不了,還是交給歷史吧。
2012年,國內又呈現出大數據熱的態勢。從國家到媒體、教育、IT等幾乎所有領域,人人都在談大數據。我的親戚朋友中,無論老師、銷售還是工程師們都可以對大數據談談自己的看法。我也找來一些Hadoop的書籍進行學習,希望能在其中探索到大數據的味道。
有幸在工作過程中接觸到阿里的開放數據處理服務(Open Data Processing Service, 簡稱ODPS),並且基於ODPS與其他小伙伴一起構建阿里的大數據商業解決方案——御膳房。去杭州出差的過程中,有幸認識和仲,跟他學習了阿里的實時多維分析平台——Garuda和實時計算平台——Galaxy的部分知識。和仲推薦我閱讀Spark的源碼,這樣會對實時計算及流式計算有更深入的了解。2015年春節期間,自己初次上網查閱Spark的相關資料學習,開始研究Spark源碼。還記得那時只是出於對大數據的熱愛,想使自己在這方面的技術能力有所提升。
從閱讀Hibernate源碼開始,到后來閱讀Tomcat、Spring的源碼,隨着挖掘源碼,從學習源碼的過程中成長,我對源碼閱讀也越來越感興趣。隨着對Spark源碼閱讀的深入,發現很多內容從網上找不到答案,只能自己硬啃了。隨着自己的積累越來越多,突然有天發現,我所總結的這些內容好像可以寫成一本書了!從閃光(Flash)到火花(Spark),足足有11個年頭了。無論是Flash、Java,還是Spring、iBATIS我一直扮演着一個追隨者,我接受這些書籍的洗禮,從未給予。如今我也是Spark的追隨者,不同的是,我不再只想簡單的攫取,還要給予。
最后還想說下2016年是我從事IT工作的第十個年頭,此書特別作為送給自己的十周年禮物。
本書的主要特色
- 按照源碼分析的習慣設計,從腳本分析到初始化再到核心內容,最后介紹Spark的擴展內容。整個過程遵循由淺入深,由深到廣的基本思路。
- 本書涉及的所有內容都有相應的例子,以便於對源碼的深入研究能有更好的理解。
- 本書盡可能的用圖來展示原理,加速讀者對內容的掌握。
- 本書講解的很多實現及原理都值得借鑒,能幫助讀者提升架構設計、程序設計等方面的能力。
- 本書盡可能保留較多的源碼,以便於初學者能夠在脫離辦公環境的地方(如地鐵、公交),也能輕松閱讀。
本書面向的讀者
源碼閱讀是一項苦差事,人力和時間成本都很高,尤其是對於Spark陌生或者剛剛開始學習的人來說,難度可想而知。本書盡可能保留源碼,使得分析過程不至於產生跳躍感,目的是降低大多數人的學習門檻。如果你是從事IT工作1~3年的新人或者希望開始學習Spark核心知識的人來說,本書非常適合你。如果你已經對Spark有所了解或者已經使用它,還想進一步提高自己,那么本書更適合你。
如果你是一個開發新手,對Java、Linux等基礎知識不是很了解的話,本書可能不太適合你。如果你已經對Spark有深入的研究,本書也許可以作為你的參考資料。
總體說來,本書適合以下人群:
- 想要使用Spark,但對Spark實現原理不了解,不知道怎么學習的人;
- 大數據技術愛好者,以及想深入了解Spark技術內部實現細節的人;
- 有一定Spark使用基礎,但是不了解Spark技術內部實現細節的人;
- 對性能優化和部署方案感興趣的大型互聯網工程師和架構師;
- 開源代碼愛好者,喜歡研究源碼的同學可以從本書學到一些閱讀源碼的方式方法。
本書不會教你如何開發Spark應用程序,只是拿一些經典例子演示。本書會簡單介紹Hadoop MapReduce、Hadoop YARN、Mesos、Tachyon、ZooKeeper、HDFS、Amazon S3,但不會過多介紹這些等框架的使用,因為市場上已經有豐富的這類書籍供讀者挑選。本書也不會過多介紹Scala、Java、Shell的語法,讀者可以在市場上選擇適合自己的書籍閱讀。本書實際適合那些想要破解一個個潘多拉魔盒的人!
如何閱讀本書
本書分為三大部分(不包括附錄):
第一部分為准備篇(第1 ~ 2章),簡單介紹了Spark的環境搭建和基本原理,幫助讀者了解一些背景知識。
第二部分為核心設計篇(第3 ~ 7章),着重講解SparkContext的初始化、存儲體系、任務提交與執行、計算引擎及部署模式的原理和源碼分析。
第三部分為擴展篇(第8 ~ 11章),主要講解基於Spark核心的各種擴展及應用,包括:SQL處理引擎、Hive處理、流式計算框架Spark Streaming、圖計算框架GraphX、機器學習庫MLlib等內容。
本書最后還添加了幾個附錄,包括:附錄A介紹的Spark中最常用的工具類Utils;附錄B是Akka的簡介與工具類AkkaUtils的介紹;附錄C為Jetty的簡介和工具類JettyUtils的介紹;附錄D為Metrics庫的簡介和測量容器MetricRegistry的介紹;附錄E演示了Hadoop1.0版本中的word count例子;附錄F 介紹了工具類CommandUtils的常用方法;附錄G是關於Netty的簡介和工具類NettyUtils的介紹;附錄H列舉了筆者編譯Spark源碼時遇到的問題及解決辦法。
為了降低讀者閱讀理解Spark源碼的門檻,本書盡可能保留源碼實現,希望讀者能夠懷着一顆好奇的心,Spark當前很火熱,其版本更新也很快,本書以Spark 1.2.3版本為主,有興趣的讀者也可按照本書的方式,閱讀Spark的最新源碼。
聯系方式
本書內容很多,限於筆者水平有限,書中內容難免有錯誤之處。在本書出版的任何時間,如果你對本書有任何問題或者意見都可以通過郵箱beliefer@163.com或者博客http://www.cnblogs.com/jiaan-geng/聯系我,給我提交你的建議或者想法,我本人將懷着一顆謙卑之心與大家共同進步。
致謝
感謝蒼天,讓我生活在這樣一個時代接觸互聯網和大數據;感謝父母,這么多年來,在學習、工作及生活上的幫助與支持;感謝妻子在生活中的照顧和謙讓。
感謝楊福川編輯和高婧雅編輯給予本書出版的大力支持與幫助。
感謝冰夷老大和王賁老大讓我有幸加入阿里,接觸大數據應用;感謝和仲對Galaxy和Garuda耐心細致的講解以及對Spark的推薦;感謝張中在百忙之中給本書寫評語;感謝周亮、澄蒼、民瞻、石申、清無、少俠、征宇、三步、謝衣、曉五、法星、曦軒、九翎、峰閱、丁卯、阿末、紫丞、海炎、涵康、雲颺、孟天、零一、六仙、大知、井凡、隆君、太奇、晨炫、既望、寶升、都靈、鬼厲、歸鍾、梓撤、昊蒼、水村、惜冰、惜陌、元乾等同學在工作上的支持和幫助。
耿嘉安
北京