- Spark內核設計的藝術:架構設計與實現
- 耿嘉安
- 2221字
- 2019-01-04 04:03:47
前言
為什么寫這本書
給本書寫前言時,讓我想起了兩年前給《深入理解Spark:核心思想與源碼分析》一書寫前言的經歷。我不禁想起崔護的《題都城南莊》這首詩,詩的內容是:
去年今日此門中,人面桃花相映紅。
人面不知何處去,桃花依舊笑春風。
從核心思想和架構來看,Spark依然是那個Spark,但是我已經找了一個新的“東家”。我的年齡不知不覺中又長了兩歲,Spark也在大數據領域從“新貴”變成了“老人”。Spark的版本從0.x.x到2.x.x基本上也是用了兩年時間。
自從《深入理解Spark:核心思想與源碼分析》一書出版后,引起了一些市場反響,更難得的是得到了很多讀者的反饋。一些熱心的讀者通過微信或者郵件向我指出了書中內容的很多不足之處,包括錯別字、錯誤的描述、代碼分析有點像流水賬、提綱挈領的內容偏少、代碼版本過低等。一些錯誤在修訂的版本中得到了解決,有些修正的內容則通過單獨寫博客來補充。在與讀者的溝通過程中,也糾正了我對一些問題的理解偏差。再次深深地感謝廣大讀者的支持與幫助!
一些讀者對《深入理解Spark:核心思想與源碼分析》一書的內容非常肯定,希望能夠出第2版,高婧雅編輯也一再“慫恿”我,但是我一直沒有寫第2版的打算。我當時希望有人能夠以更好的方式寫一本介紹和分析Spark 2.0版本的源碼分析書籍,因為我感覺之前的寫作方式的確不是很好。在我心中一直有個矛盾:如果源碼太少,源碼分析的書籍將退化成單純講原理的書籍,對于想深入理解Spark實現的讀者來說這是不夠的;如果源碼太多,又讓人有堆砌代碼或者“混”篇幅的感覺。很多源碼分析的書只是簡單說說接口或者方法的功能,讓人始終有種“霧里看花”的感覺。所以我一直很期待能有更好的方式來寫作源碼分析類的書。
在一年多的等待中,我始終沒有發現類似書籍的出現,于是我打算再做一次嘗試。這次擯棄了《深入理解Spark:核心思想與源碼分析》一書中按照代碼執行流程分析的方式,改為先從整體上介紹一個系統,然后逐個分析每個組件的功能,最后將這些組件之間的關系用流程圖的方式串聯起來。本書的寫作方式依然犯有代碼過多的“毛病”,但我還是期待本書能帶來一些新的氣象。
本書的主要特色
按照源碼分析的習慣設計,從腳本分析到初始化,再到核心內容。整個過程遵循由淺入深的基本思路。
每一章先對本章的內容有個總體介紹,然后深入分析各個組件的實現原理,最后將各個組件之間的關系通過執行流程來展現。
本書盡可能地用圖來展示原理,以加速讀者對內容的掌握。
本書講解的很多實現及原理都值得借鑒,可以幫助讀者提升架構設計、程序設計等方面的能力。
本書盡可能保留較多的源碼,以便于初學者能夠在脫離辦公環境的地方(如地鐵、公交等),也能輕松閱讀。
讀者對象
源碼閱讀是一項苦差事,人力和時間成本都很高,尤其對于剛剛接觸Spark的人來說更是如此。本書盡可能保留源碼,使得分析過程不至于產生跳躍感,目的是降低大多數人的學習門檻。如果你是從事IT工作1~3年的新人或者希望開始學習Spark的核心知識,本書非常適合你。如果你已經對Spark有所了解或者已經使用它,還想進一步提高自己,那么本書更適合你。如果你是一個開發新手,對Java、Linux等基礎知識還不是很了解的話,本書可能不太適合你。如果你已經對Spark有深入的研究,本書也許可以作為你的參考資料。
總體來說,本書適合以下人群:
已經了解過Spark,但還想深入理解Spark實現原理的人;
大數據技術愛好者;
對性能優化和部署方案感興趣的運維工程師與架構師;
開源代碼愛好者,喜歡研究源碼的同學可以通過本書學到一些閱讀源碼的方式、方法。
本書不會教你如何開發Spark應用程序,而只拿word count的經典例子做演示。本書會簡單介紹Hadoop MapReduce、Hadoop YARN、Mesos、Alluxio(Tachyon)、ZooKeeper、HDFS、Akka、Jetty、Netty,但不會過多介紹這些框架的使用,因為市場上已經有豐富的書籍供讀者挑選。本書也不會過多介紹Scala、Java、Shell的語法,讀者可以在市場上選擇適合自己的書籍閱讀。本書將無比適合那些想要破解“潘多拉魔盒”的人!
如何閱讀本書
本書一共有10章內容,主要包括以下部分。
準備部分(第1~2章):簡單介紹了Spark的環境搭建和基本原理,幫助讀者了解一些背景知識。
基礎部分(第3~5章):介紹Spark的基礎設施、SparkContext的初始化、Spark執行環境等內容。
核心部分(第6~9章):這是Spark最為核心的部分,包括存儲體系、調度系統、計算引擎、部署模式等。
API部分(第10章):這部分主要對Spark的新舊API進行對比,對新API進行介紹。
本書最后的附錄中還包括一些內容:附錄A介紹的是Spark中最常用的工具類Utils;附錄B是Akka的簡介;附錄C為Jetty的簡介和工具類JettyUtils的介紹;附錄D為Metrics庫的簡介和Metrics中部分API的介紹;附錄E演示了Hadoop 1.0版本中的word count例子;附錄F介紹了工具類CommandUtils的常用方法;附錄G是關于Netty的簡介和工具類NettyUtils的介紹;附錄H是對Spark中的RPC工具類RpcUtils的介紹。
為了降低讀者閱讀理解Spark源碼的門檻,本書盡可能保留源碼實現。本書以Spark 2.1.0版本為主,有興趣的讀者也可按照本書的方式,閱讀Spark的最新源碼。
勘誤
本書內容很多,限于筆者水平有限,書中內容難免有錯誤之處。如果你對本書有任何問題或者意見,都可以通過郵箱beliefer@163.com或者博客http://blog.csdn.net/beliefer聯系我,給我提交你的建議或者想法,我將懷著一顆謙卑之心與大家共同進步。
致謝
感謝我們生活在信息時代,讓我們有機會接觸互聯網與大數據;感謝父母多年來在學習、工作及生活上的幫助與支持;感謝妻子在生活中的照顧和謙讓。
感謝高婧雅編輯給予本書出版的大力支持與幫助。
感謝我在大數據路上的領路人——和仲;感謝熱衷于技術的王歡對本書內容提出的寶貴建議;感謝對本書內容進行審閱的余堯堯和馬曉波;感謝對本書內容有過幫助的讀者朋友們。
耿嘉安
- 前端跨界開發指南:JavaScript工具庫原理解析與實戰
- Offer來了:Java面試核心知識點精講(原理篇)
- PyTorch自然語言處理入門與實戰
- Java虛擬機字節碼:從入門到實戰
- Scala編程實戰(原書第2版)
- Nginx Lua開發實戰
- AIRIOT物聯網平臺開發框架應用與實戰
- UI設計全書(全彩)
- Webpack實戰:入門、進階與調優(第2版)
- 大學計算機基礎實訓教程
- Mudbox 2013 Cookbook
- Maven for Eclipse
- Oracle Database XE 11gR2 Jump Start Guide
- 軟件測試項目實戰之功能測試篇
- Computer Vision with Python 3