-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Spark SQL內核剖析

( 簡體 字)
作者:朱鋒,張韶全,黃明類別:1. -> 程式設計 -> Spark
譯者:
出版社:電子工業出版社Spark SQL內核剖析 3dWoo書號: 49756
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:8/1/2018
頁數:268
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121343148
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

推薦序1
互聯網技術經過幾十年的發展已經滲透到人們生活的方方面面,從云計算、大數據到如今如火如荼的人工智能和區塊鏈,相信無論是圈內人還是圈外人,對這些名詞都耳熟能詳了。仔細一算,“大數據”這個概念的出現已經有十多年了,背后催生的技術可以說是百花齊放、百家爭鳴。
2009 年年初,騰訊從傳統的數據倉庫轉向基于 Hadoop 架構的大數據平臺,至今將近 10 年, 歷經了 3 代跨越式的發展:2009—2011 年是以 Hadoop 為基礎的離線計算時代,2012—2014 年 是以 Spark 和 Storm 為引擎的實時計算時代,2015 年至今是以騰訊自研的高性能機器學習平臺 Angel 為核心的智能學習時代。從最簡單的統計報表的計算,到萬億特征維度的算法訓練,從結構化數據到圖片、語音、文本等非結構化數據,騰訊一直用前沿技術來挖掘大數據背后的價值。
如今,騰訊大數據集群規模達到幾萬臺服務器,存儲數據量有幾百 PB,每天有幾十 PB 的 計算量,支撐著騰訊包括微信、QQ、游戲、廣告、支付、視頻、音樂等關鍵業務,助力騰訊業務發展,服務著十億級別的用戶。正是歷經了騰訊數以億計的海量數據的錘煉,讓騰訊大數據 平臺得到快速的發展,其技術在業內處于領先水平。
騰訊大數據起源于網絡社區,并一直積極參與網絡社區的建設。2014年,騰訊大數據平臺(TDW)的核心組件進行開源,我們在 Hadoop、Spark、Docker、Ceph、HBase、Kubernetes、 Kafka、Storm、Flink、PostgreSQL 等眾多社區項目上積極“反哺”社區。2017 年 6 月,我們在 GitHub 上把騰訊大數據第三代的高性能分布式機器學習平臺 Angel 進行了開源,吸引了海內外 眾多知名企業用戶,并于 2018 年 3 月貢獻給 Linux 深度學習基金會(LF Deep Learning)。
除代碼層面的開源外,近年來,騰訊也把大數據能力開放給傳統企業,我們服務了政務民 生、金融、交通、零售、教育、工業等各行各業的用戶,旨在讓沒有大數據人才的企業也能具 備使用大數據的能力。我們樂于把騰訊積累了十年的大數據技術和運維經驗對外分享、對外輸出,本書也可以看作是騰訊大數據技術開放的一部分。
本書的內容最初是騰訊內部為進行 Spark SQL 開發而整理的技術文檔,最后剝離出通用的 部分集結成冊。從數據的維度來看,無論是單機還是分布式環境,SQL 對用戶來說都是非常重 要的。Spark SQL 作為騰訊大數據平臺中最基礎的部分,支撐全公司的數據分析業務。因此,書 中的內容并非是針對 Spark SQL 技術的空談,而是立足于騰訊大數據平臺的大量實踐經驗。 本書的幾位作者正是工作在騰訊大數據一線的工程師和技術專家,在日均百萬級別的SQL業務處理和優化中積累了豐富的經驗。綜觀全書,條理非常清晰,讀者既能在高度上知曉來龍 去脈和他山之石,又能在深度上體會源碼級別的技術點剖析。同時,書中結合實踐展示了一些 通用案例,避免讀者陷入到代碼的汪洋大海中。
于我個人而言,大學畢業后在傳統的銀行工作。后來,在數據爆發的時代,我有幸在國內 數據最多的兩家公司工作,我在阿里巴巴負責支付寶 BI 數據平臺基礎架構和應用架構,來到騰 訊后一直負責騰訊的大數據業務。十多年的職業生涯,轉換了公司,也轉換了工作和生活的城 市,但一直不變的是我的工作始終圍繞著“數據”展開,無論是在傳統 IT 行業,還是在互聯網 行業,“數據”始終是我工作的核心內容,而我自己最大的職業追求也離不開“數據”。
未來,在人們的生活中,數據將無時無刻無處不在,數據與商業的真正結合將爆發出強大 的生命力和價值。作為服務于上層業務的基礎支撐平臺,最重要的地方在于技術的沉淀和積累, 不斷打磨優化。從技術研發人員的角度來講,最重要的是修煉好自己的“內功”,不忘初心。最 后,希望每一位讀者都能夠從本書中有所收獲,練好數據的“內功”,與數據結緣。

蔣杰 博士 騰訊首席數據官、騰訊數據平臺部總經理
CCF 大數據專家委員會委員
2018 年 7 月



推薦序2
非常高興收到了師弟朱鋒、張博士和明哥關于 Spark SQL 的書稿,也非常榮幸被邀請為本 書作友情序言。本人是朱鋒在中科院軟件所讀博時的師兄,2014 年也曾經在明哥組內實習,目 前在中科院從事大數據方面的科研工作,主要關注 Spark/Flink 等大數據處理系統及大數據分析 算法,之前也在 GitHub 上寫過 SparkInternals 等介紹技術原理的文章。
去年就聽聞師弟他們在寫一本關于 Spark SQL 的書,希望能夠將生產環境中平臺開發建設 的一些經驗總結出來。當時感覺有些驚訝,驚訝師弟從學術界到工業界能夠快速轉變,短時間 內深入理解了整個系統,并能將經驗總結成書。后來想了一下,這也是在情理之中的。朱鋒的 博士論文的內容就和 SQL-on-Hadoop 解決方案相關,在 Hadoop、Hive、HBase 等系統上也積累 了多年的開發應用經驗,在騰訊接觸工業界實際案例后能夠迅速應用所學知識,加上讀博期間 訓練出來的抽象表達能力,與張博士一起,在明哥的全力支持下,足以寫出一本有深度的技術 圖書。
雖然是熟人,但剛收到書時,我也有著顧慮。相信大多數讀者也是如此,就是想知道這本 書是否值得讀,講沒講干貨,能否讓讀者快速理解 Spark SQL 的原理,能否對讀者的實際工作 有用。帶著這些問題,我開始了閱讀,發現越讀干貨越多,從 Spark SQL 歷史到 Spark SQL 語法 解析,從邏輯執行計劃和物理執行計劃生成,繼續往下切入到 Tungsten 內存管理,全面講述了 Spark SQL 技術的方方面面,不僅有原理介紹,還有實現細節的描述和總結,更有在海量數據和 海量業務下的實踐經驗的總結。這些對想深入理解 Spark SQL,并對其進行優化改進,以及想更 高效地使用 Spark SQL 的開發者、用戶都有莫大的幫助。
抱著學習的態度讀完本書,我在以下幾個方面受益匪淺:邏輯執行計劃、物理執行計劃、 優化方法等背后的技術原理,本書均透徹地講清楚了。在讀的過程中,我也在感概,記得前幾 年帶組里的師弟師妹們想在 Spark SQL 中添加關鍵詞查詢功能(類似 MySQL 中的 MATCH 關鍵 詞),發現需要在 Spark SQL 中添加新語法、改進語法解析、對翻譯生成執行計劃等一系列模塊 進行改進,由于當時缺少 Spark SQL 技術體系引導和深入解析的書籍,因此我們花了不少時間 扎入代碼,并自行總結技術體系和實現原理。本書的內容對于想對 Spark SQL 進行二次開發的 讀者非常有用,可以讓二次開發事半功倍。
因為平時工作需要寫論文,同時也會寫技術報告和文檔,所以深知寫一本簡潔易懂又包含 復雜技術知識的圖書有多困難,不僅需要花費大量精力閱讀代碼、分析細節,還需要在高層進 行抽象總結、簡潔表達。在閱讀本書的過程中,可以從字里行間感受到作者們的用心和付出的 努力。例如,作者在講解 ANTLR 4 時,首先自己設計一個簡單的例子,并進行相應的代碼實現, 在生成邏輯算子樹時用到的訪問者模式也會以實例進行說明。在技術展現方面,要畫出圖3.8、 圖 7.10 等,不僅需要仔細閱讀代碼中的每個類的實現,而且需要考慮圖形布局以達到直觀的效 果。
Spark 是一個易用性、通用性都很高的框架,除 Spark SQL 外,上層還有面向圖計算的 GraphX 框架、機器學習 MLlib 庫,流處理的 Spark Streaming 庫,希望包括幾位作者在內的業界 專家能夠為讀者帶來更多高水平的解析和總結。Spark SQL 本身也在演變中,希望本書有第二 版、第三版等,能夠不斷加入更多的技術解析,不斷完善。作為一名研究者,我自己也會努力去設計實現更多能夠解決大數據實際問題的系統和方法,共勉之。

許利杰
中科院軟件所
2018 年 6 月 15 日


前言
極其迅速的信息傳播將人們帶入了大數據時代,也推動了大數據技術的發展。Spark 于 2009 年誕生于伯克利大學 AMP 實驗室,至今已經形成完整的生態圈。除參與度高的開源社區外,各 種相關的技術分享和論壇(如每年的 Spark Summit)也是如火如荼。得益于其靈活的 RDD 計算 模型,Spark 系統高效地支持了各類應用,涉及 SQL 處理、圖計算和機器學習等。
本書重點講解 Spark SQL,該系統在企業中的應用非常廣泛,也是 Spark 生態圈中較活躍的 部分。從另一個視角來看,Spark SQL 是近年來 SQL-on-Hadoop 解決方案(包括 Hive、Presto 和 Impala 等)中的佼佼者,結合了數據庫 SQL 處理和 Spark 分布式計算模型兩個方面的技術,目 標是取代傳統的數據倉庫。
在實際生產環境中,因為一些個性化的需求,往往涉及對原生的 Spark SQL 系統進行定制 化的改造或新特性的添加,此過程需要開發人員對內部實現有深入的了解。然而筆者發現,目 前業界在這方面的資料還比較缺乏,雖然已經涌現了一系列的文章和書籍,但內容通常都以 Spark 本身為主,或者停留在 API 使用和概括性介紹層面,難以滿足開發人員的需求。
本書定位于彌補這方面的空白,對 Spark 的基本概念和功能(如 RDD 和調度等)不再展開 講解,而是將內容重點放在 SQL 內核實現的剖析上,旨在同讀者一起“入于其中”,從源碼實 現上學習分布式計算和數據庫領域的相關技術。

本書面向的讀者
本書主要面向在企業中任職的系統架構師和軟件開發人員,以及對大數據、分布式計算和 數據庫系統實現感興趣的研究人員。需要注意的是,本書對讀者在大數據系統和數據庫方面的 基礎知識(SQL)上有一定的要求。對于初學者來說,最好能夠首先參考相關資料,做到有所了解。

本書的主要內容
本書的內容可以分成 4 個部分:(1)背景和基礎知識概述(第 1 ∼ 2 章),這兩章分別介紹 Spark SQL 的前生今世和與 Spark 相關的基礎知識,對此熟悉的讀者可以直接跳過;(2)Spark SQL 功能實現的各個階段(第 3 ∼ 6 章),這 4 章結合簡單例子分別從整體和每個階段的細節介 紹內部機制,涉及 SQL 編譯、邏輯計劃和物理計劃;(3)專題展開(第 7 ∼ 10 章),這 4 章重 點介紹 Spark SQL 中 Aggregation 和 Join 實現,深入分析 Tungsten 計劃中的幾項優化技術,以及 Spark SQL 連接 Hive 的實現;(4)實踐部分(第 11 章),這一章分享 Spark SQL 系統在生產環境 中的應用和一些改造優化經驗。

一些約定和說明
? 相關術語:Spark 依賴于 JVM,主體采用 Scala 開發語言,部分功能也用到了 Java 語言來 實現。本書沒有嚴格地區分兩種語言的術語,例如 Scala 語言中的 trait(特質)和 Java 語 言中的 interface(接口)等,書中一般以 Java 語言的術語為主。此外,本書涉及的源碼分 析較多,不方便直接翻譯的類或接口命名,以其英文命名為主。一些 SQL 關鍵詞(例如 Select、Join 等)或 Spark 術語(例如 Shuffle、Partition、Executor 等)在不同上下文環境中 也會出現大小寫混用的情況。另外,Map 和 Reduce 雖然是來自 MapReduce 中的概念,但 本書在介紹 Spark SQL 時也使用了這兩個概念,分別用來表示 Shuffle 前的階段和 Shuffle 后的階段。
? 版本說明:本書使用的 Spark 版本是 Spark 2.X。筆者在寫作時,以 2.1 版本和 2.2 版本中的 實現機制為主。然而,Spark 社區活躍,版本的演化非常迅速(平均半年一個版本),讀者 在理解基本的框架和思路后可以結合 JIRA 上的相關 Issue 和對應的 Patch 進行跟蹤。當然, 后期最好的方式是參與到社區的貢獻中。
? 推薦的閱讀方式:本書內容涉及的實現細節較多,因此建議的閱讀方式是結合代碼進行理 解。調試環境搭建好之后,在關鍵步驟插入日志信息,縱向(宏觀)和橫向(細節)分析 交叉進行,最終做到在腦海中將上層的 SQL 語句映射為底層的 RDD 模型。

前沿技術的整理和分析并不是一件輕松的工作,從大綱的確定、內容的選擇到最終出版得 益于多方的大力支持。在此感謝電子工業出版社的各位編輯對本書出版提供的幫助,感謝馬朋 勃、馬?和鄧飛等提出的寶貴修改建議。寫作是一個不斷學習并進行歸納和整理的過程,筆者 在寫作中也受到相關技術博客和論文思路的啟發,在此一并感謝。
因筆者水平有限,本書的錯漏和不足之處歡迎廣大讀者朋友批評指證。
內容簡介:

經過多年的發展,大數據處理技術逐步成熟。作為業界大數據計算的事實標準,Apache Spark系統已經廣泛應用于各大企業與研究機構,并形成完整的生態系統。Spark系統包含了SQL、GraphX和R等各個子系統以支持不同業務領域的需求。作為傳統關系數據庫/數據倉庫在大數據場景下的解決方案,Spark SQL已經成為了業界的重要選擇方案,同時也成為了Spark開源社區中最為活躍的部分。本書聚焦于Spark SQL系統,對其整體架構、內部各個模塊的技術實現機制進行源碼級別的剖析,涉及到SQL編譯、邏輯計劃、物理執行計劃、重要查詢(如Aggregation與Join等)的技術細節。此外,本書內容上還會結合生產環境的海量應用,分享大量真實開發案例與實踐優化經驗。

目錄:

第 1 章 Spark SQL 背景
1.1 大數據與 Spark 系統
1.2 關系模型與 SQL 語言
1.3 Spark SQL 發展歷程
1.4 本章小結
第 2 章 Spark 基礎知識介紹
2.1 RDD 編程模型
2.2 DataFrame 與 Dataset
2.3 本章小結
第 3 章 Spark SQL 執行全過程概述
3.1 從 SQL 到 RDD:一個簡單的案例
3.2 重要概念
3.2.1 InternalRow 體系
3.2.2 TreeNode 體系
3.2.3 Expression 體系
3.3 內部數據類型系統
3.4 本章小結
第 4 章 Spark SQL 編譯器 Parser
4.1 DSL 工具之 ANTLR 簡介
4.1.1 基于 ANTLR 4 的計算器
4.1.2 訪問者模式
4.2 SparkSqlParser 之 AstBuilder
4.3 常見 SQL 生成的抽象語法樹概覽
4.4 本章小結
第 5 章 Spark SQL 邏輯計劃(LogicalPlan)
5.1 Spark SQL 邏輯計劃概述
5.2 LogicalPlan 簡介
5.2.1 QueryPlan 概述
5.2.2 LogicalPlan 基本操作與分類
5.2.3 LeafNode 類型的 LogicalPlan
5.2.4 UnaryNode 類型的 LogicalPlan
5.2.5 BinaryNode 類型的 LogicalPlan
5.2.6 其他類型的 LogicalPlan
5.3 AstBuilder 機制:Unresolved LogicalPlan 生成
5.4 Analyzer 機制:Analyzed LogicalPlan 生成
5.4.1 Catalog 體系分析
5.4.2 Rule 體系
5.4.3 Analyzed LogicalPlan 生成過程
5.5 Spark SQL 優化器 Optimizer
5.5.1 Optimizer 概述
5.5.2 Optimizer 規則體系
5.5.3 Optimized LogicalPlan 的生成過程
5.6 本章小結
第 6 章 Spark SQL 物理計劃(PhysicalPlan)
6.1 Spark SQL 物理計劃概述
6.2 SparkPlan 簡介
6.2.1 LeafExecNode 類型
6.2.2 UnaryExecNode 類型
6.2.3 BinaryExecNode 類型
6.2.4 其他類型的 SparkPlan
6.3 Metadata 與 Metrics 體系
6.4 Partitioning 與 Ordering 體系
6.4.1 Distribution 與 Partitioning 的概念
6.4.2 SparkPlan 的常用分區排序操作
6.5 SparkPlan 生成
6.5.1 物理計劃 Strategy 體系
6.5.2 常見 Strategy 分析
6.6 執行前的準備
6.6.1 PlanSubqueries 規則
6.6.2 EnsureRequirements 規則
6.7 本章小結
第 7 章 Spark SQL 之 Aggregation 實現
7.1 Aggregation 執行概述
7.1.1 文法定義
7.1.2 聚合語句 Unresolved LogicalPlan 生成
7.1.3 從邏輯算子樹到物理算子樹
7.2 聚合函數(AggregateFunction)
7.2.1 聚合緩沖區與聚合模式(AggregateMode)
7.2.2 DeclarativeAggregate 聚合函數
7.2.3 ImperativeAggregate 聚合函數
7.2.4 TypedImperativeAggregate 聚合函數
7.3 聚合執行
7.3.1 執行框架 AggregationIterator
7.3.2 基于排序的聚合算子 SortAggregateExec
7.3.3 基于 Hash 的聚合算子 HashAggregateExec
7.4 窗口(Window)函數
7.4.1 窗口函數定義與簡介
7.4.2 窗口函數相關表達式
7.4.3 窗口函數的邏輯計劃階段與物理計劃階段
7.4.4 窗口函數的執行
7.5 多維分析
7.5.1 OLAP 多維分析背景
7.5.2 Spark SQL 多維查詢
7.5.3 多維分析 LogicalPlan 階段
7.5.4 多維分析 PhysicalPlan 與執行
7.6 本章小結
第 8 章 Spark SQL 之 Join 實現
8.1 Join 查詢概述
8.2 文法定義與抽象語法樹
8.3 Join 查詢邏輯計劃
8.3.1 從 AST 到 Unresolved LogicalPlan
8.3.2 從 Unresolve LogicalPlan 到 Analyzed LogicalPlan
8.3.3 從 Analyzed LogicalPlan 到 Optimized LogicalPlan
8.4 Join 查詢物理計劃
8.4.1 Join 物理計劃的生成
8.4.2 Join 物理計劃的選取
8.5 Join 查詢執行
8.5.1 Join 執行基本框架
8.5.2 BroadcastJoinExec 執行機制
8.5.3 ShuffledHashJoinExec 執行機制
8.5.4 SortMergeJoinExec 執行機制
8.6 本章小結
第 9 章 Tungsten 技術實現
9.1 內存管理與二進制處理
9.1.1 Spark 內存管理基礎
9.1.2 Tungsten 內存管理優化基礎
9.1.3 Tungsten 內存優化應用
9.2 緩存敏感計算(Cache-aware computation)
9.3 動態代碼生成(Code generation)
9.3.1 漫談代碼生成
9.3.2 Janino 編譯器實踐
9.3.3 基本(表達式)代碼生成
9.3.4 全階段代碼生成(WholeStageCodegen)
9.4 本章小結
第 10 章 Spark SQL 連接 Hive
10.1 Spark SQL 連接 Hive 概述
10.2 Hive 相關的規則和策略
10.2.1 HiveSessionCatalog 體系
10.2.2 Analyzer 之 Hive-Specific 分析規則
10.2.3 SparkPlanner 之 Hive-Specific 轉換策略
10.2.4 Hive 相關的任務執行
10.3 Spark SQL 與 Hive 數據類型
10.3.1 Hive 數據類型與 SerDe 框架
10.3.2 DataTypeToInspector 與 Data Wrapping
10.3.3 InspectorToDataType 與 Data Unwrapping
10.4 Hive UDF 管理機制
10.5 Spark Thrift Server 實現
10.5.1 Service 體系
10.5.2 Operation 與 OperationManager
10.5.3 Session 與 SessionManager
10.5.4 Authentication 安全認證管理
10.5.5 Spark Thrift Server 執行流程
10.6 本章小結
第 11 章 Spark SQL 開發與實踐
11.1 騰訊大數據平臺(TDW)簡介
11.2 騰訊大數據平臺 SQL 引擎(TDW-SQL-Engine)
11.2.1 SQL-Engine 背景與演化歷程
11.2.2 SQL-Engine 整體架構
11.3 TDW-Spark SQL 開發與優化
11.3.1 業務運行支撐框架
11.3.2 新功能開發案例
11.3.3 性能優化開發案例
11.4 業務實踐經驗與教訓
11.4.1 Spark SQL 集群管理的經驗
11.4.2 Spark SQL 業務層面調優
11.4.3 SQL 寫法的“陷阱”
11.5 本章小結
總結
參考文獻
序: