1. 程式人生 > >《深入理解SPARK:核心思想與原始碼分析》一書正式出版上市

《深入理解SPARK:核心思想與原始碼分析》一書正式出版上市

自己犧牲了7個月的週末和下班空閒時間,通過研究Spark原始碼和原理,總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究原始碼時的Spark版本是1.2.0,經過7個多月的研究和出版社近4個月的流程,Spark自身的版本迭代也很快,如今最新已經是1.6.0。目前市面上另外2本原始碼研究的Spark書籍的版本分別是0.9.0版本和1.2.0版本,看來這些書的作者都與我一樣,遇到了這種問題。由於研究和出版都需要時間,所以不能及時跟上Spark的腳步,還請大家見諒。但是Spark核心部分的變化相對還是很少的,如果對版本不是過於追求,依然可以選擇本書。

為了讓大家對本書有個大致瞭解,這裡將本書的前言及目錄附上:

前言

為什麼寫這本書

         要回答這個問題,需要從我個人的經歷說起。說來慚愧,我第一次接觸計算機是在高三。當時跟大家一起去網咖玩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)到火花(Saprk),足足有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的最新原始碼。

聯絡方式

         本書內容很多,限於筆者水平有限,書中內容難免有錯誤之處。在本書出版的任何時間,如果你對本書有任何問題或者意見都可以通過郵箱[email protected]或者部落格http://www.cnblogs.com/jiaan-geng/聯絡我,給我提交你的建議或者想法,我本人將懷著一顆謙卑之心與大家共同進步。

致謝

         感謝蒼天,讓我生活在這樣一個時代接觸網際網路和大資料;感謝父母,這麼多年來,在學習、工作及生活上的幫助與支援;感謝妻子在生活中的照顧和謙讓。

         感謝楊福川編輯和高婧雅編輯給予本書出版的大力支援與幫助。

         感謝冰夷老大和王賁老大讓我有幸加入阿里,接觸大資料應用;感謝和仲對Galaxy和Garuda耐心細緻的講解以及對Spark的推薦;感謝張中在百忙之中給本書寫評語;感謝周亮、澄蒼、民瞻、石申、清無、少俠、徵宇、三步、謝衣、曉五、法星、曦軒、九翎、峰閱、丁卯、阿末、紫丞、海炎、涵康、雲颺、孟天、零一、六仙、大知、井凡、隆君、太奇、晨炫、既望、寶升、都靈、鬼厲、歸鍾、梓撤、昊蒼、水村、惜冰、惜陌、元乾等同學在工作上的支援和幫助。

耿嘉安

北京

相關推薦

深入理解Spark核心思想原始碼分析》(第2章)

《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 本文主要展示本書的第2章內容: Spark設計理念與基本架構 “若夫乘天地之正,而御六氣之辯,以遊無窮者,彼且惡乎待哉?” ——《莊子·逍遙遊》 n本章導讀: 上一章,介紹了Spark環境的搭建,為方便讀

深入理解SPARK核心思想原始碼分析正式出版上市

自己犧牲了7個月的週末和下班空閒時間,通過研究Spark原始碼和原理,總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究原始碼時的Spark版本是1.2.0,經過7個多月的研

深入理解Spark核心思想原始碼分析》(前言及第1章)

  自己犧牲了7個月的週末和下班空閒時間,通過研究Spark原始碼和原理,總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前亞馬遜、京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究原始碼時的Spark版本是1.2.0,經過7個多月的研究和出版社近4個月的流

深入理解SPARK核心思想原始碼分析》——SparkContext的初始化(仲篇)——SparkUI、環境變數及排程

《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 《深入理解Spark:核心思想與原始碼分析》一書第二章的內容請看連結《第2章 SPARK設計理念與基本架構》 由於本書的第3章內容較多,所以打算分別開闢四篇隨筆分別展現。 本文展現第3章第二部分的內容:

深入理解Spark核心思想原始碼分析》——SparkContext的初始化(伯篇)——執行環境元資料清理器

《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 《深入理解Spark:核心思想與原始碼分析》一書第二章的內容請看連結《第2章 SPARK設計理念與基本架構》 由於本書的第3章內容較多,所以打算分別開闢四篇隨筆分別展現。本文展現第3章第一部分的內容: 第3章

深入理解Spark-核心思想原始碼分析》讀書筆記(1)

前兩章 第一章主要是講如何安裝和配置spark,以及如何匯入spark原始碼除錯執行;第二章主要講的是上次那本書《Spark快速大資料分析》的內容,科普一下spark的知識。 第三章 SparkContext的初始化 1. 概述 這章的主要內容就

深入理解Nginx模組開發架構解析

讀書筆記 第一部分         Nginx能幫我們做什麼 第1章 研究Nginx前的準備工作         1.1Nginx是什麼         1.2

《圖解Spark核心技術案例實戰》介紹及附資源

本書中所使用到的測試資料、程式碼和安裝包放在百度盤提供 下載 ,連結: https://pan.baidu.com/s/1sXuOC3J-aHEc0E_kVWLqFg#list/path=%2F  另外在百度盤提供本書附錄  下載 ,連結: https://pan.baidu.com/s/1sO8NXqry

深入理解Nginx模組開發架構解析 讀書筆記

Nginx的作用 當我們在設計高效能web伺服器的時候,我們第一選擇是使用Nginx,因為nginx對伺服器效能上的挖掘已經到了非常高的水平,Nginx採用了無阻塞分階段的事件驅動框架。當nginx不能那個完全實現我們的業務需求的時候,我們可以在Nginx後端搭建一個非ng

《大型網站技術架構核心原理案例分析》-- 讀書筆記 (5) 網購秒殺系統

案例 並發 刷新 隨機 url 對策 -- 技術 動態生成 1. 秒殺活動的技術挑戰及應對策略 1.1 對現有網站業務造成沖擊 秒殺活動具有時間短,並發訪問量大的特點,必然會對現有業務造成沖擊。對策:秒殺系統獨立部署 1.2 高並發下的應用、

《大型網站技術架構核心原理案例分析》【PDF】下載

優化 均衡 1.7 3.3 架設 框架 應用服務器 博客 分布式服務框架 《大型網站技術架構:核心原理與案例分析》【PDF】下載鏈接: https://u253469.pipipan.com/fs/253469-230062557 內容簡介 本書通過梳理大型網站技

閱讀《大型網站技術架構核心原理案例分析》第五、六、七章,結合《河北省重大技術需求征集系統》,列舉實例分析采用的可用性和可修改性戰術

定時 並不會 表現 做出 span class 硬件 進行 情況   網站的可用性描述網站可有效訪問的特性,網站的頁面能完整呈現在用戶面前,需要經過很多個環節,任何一個環節出了問題,都可能導致網站頁面不可訪問。可用性指標是網站架構設計的重要指標,對外是服務承諾,對內是考核指

《大型網站技術架構核心原理案例分析》結合需求征集系統分析

運行 模塊 正常 一致性hash 產品 進行 OS 很多 層次 閱讀《大型網站技術架構:核心原理與案例分析》第五、六、七章,結合《河北省重大技術需求征集系統》,列舉實例分析采用的可用性和可修改性戰術,將上述內容撰寫成一篇1500字左右的博客闡述你的觀點。 閱

《大型網站技術架構核心原理案例分析》讀後感

TP bubuko 一個 nbsp 分享 架構 優化 技術分享 src 李智慧的著作《大型網站技術架構:核心原理與案例分析》,寫得非常好, 本著學習的態度,對於書中的關於性能優化的講解做了一個思維導圖,供大家梳理思路和學習之用。拋磚引玉。 《大型網站技術架構

老生常談Promise 用法原始碼分析

此文章是幾個月前寫得,發現沒有發表過,就在此發表一下。 背景 Promise本身是一個非同步程式設計的方案,讓處理過程變得更簡單。es6引入promise特性來處理JavaScript中的非同步場景。以前,處理非同步最常用的方法就是回撥函式,但是當過程稍微複雜一點,多個非同步操作集中在一起的時候

《大型網站技術架構核心原理案例分析》筆記

· 大型網站軟體系統的特點 · 大型網站架構演化發展歷程     · 初始階段的網站架構         · 需求/解決問題         · 架構     · 應用服務和資料

《大型網站技術架構核心原理案例分析李智慧》pdf附網盤下載連結送給還在迷茫的你

Detect languageAfrikaansAlbanianAmharicArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chines

《大型網站技術架構核心原理案例分析》讀書筆記 - 第2篇 架構

第2篇 架構 4 瞬時響應:網站的高效能架構 34 4.1 網站效能測試 35 效能測試是效能優化的前提和基礎,也是效能優化結果的檢查和度量標準。 4.1.1 不同視角下的網站效能 35 使用者:直觀感受到的快慢 開發:應用程式本身 運維:基礎設施效能和資源利用率 4.1.2 效

Spark:BlockManager原理剖析原始碼分析

BlockManager是Spark的分散式儲存系統,與我們平常說的分散式儲存系統是有區別的,區別就是這個分散式儲存系統只會管理Block塊資料,它執行在所有節點上。BlockManager的結構是Maser-Slave架構,Master就是Driver上的BlockManagerMaste

Spark:Shuffle原理剖析原始碼分析

spark中的Shuffle是非常重要的,shuffle不管在Hadoop中還是Spark中都是重重之重,特別是在Spark shuffle優化的時間。更是非常的重要。 普通shuffle操作的原理剖析(spark 2.x棄用) 每一個Job提交後都會生成一個ResultStage和