我們處於一個資料爆炸的時代!
大量湧現的智慧型手機、平板、可穿戴裝置及物聯網裝置每時每刻都在產生新的資料,然而帶來革命性變革的並非巨量資料本身,而是我們如何從這些資料中採擷到有價值的資訊,來輔助我們做出更加智慧的決策。我們知道,在生產環境下,所謂的大數據常常是由數千萬筆、上億筆具有多個預先定義欄位的資料單元組成的資料集,是不是很像傳統關聯式資料庫的二維資料表呢?那麼我們是否也能找到一個像SQL 查詢那樣簡便的工具來高效率地分析處理大數據領域中的巨量結構化資料呢?沒錯,這個工具就是Spark SQL。
Spark SQL 是Spark 用來操作結構化資料的進階模組,在程式中透過引用SparkSQL 模組,我們便可以像從前在關聯式資料庫利用SQL(結構化查詢語言)分析關聯式資料庫表一樣簡單快速地在Spark 大數據分析平台上對巨量結構化資料進行快速分析,而Spark 平台隱藏了底層分散式儲存、計算、通訊的細節以及作業解析、排程的細節,使開發者僅需關注如何利用SQL 進行資料分析的程式邏輯就可以方便地操控叢集來分析我們的資料。
本書內容
礎篇、實作篇、最佳化篇,所有程式均採用簡潔而優雅的Scala 語言撰寫,Spark 架構也是使用Scala 語言撰寫的。
第一部分入門篇(第1、2 章)
第1 章簡介Spark 的誕生、Spark SQL 的發展歷史以及Spark SQL 的用處等內容,讓讀者快速了解Spark SQL 背景知識,為以後的學習奠定基礎。
第2 章透過說明Spark SQL 開發環境的架設、Spark 作業的包裝傳送、常見問題的解答,並結合大量圖示,讓讀者快速掌握開發環境的架設以及傳送應用程式到叢集上,為後面章節的學習奠定堅實的基礎。
第二部分基礎篇(第3、4、5、6 章)
第3 章是真正開始學習Spark SQL 必要的先修課,詳盡地介紹Spark 架構對資料的核心抽象--RDD(彈性分散式資料集)的各方面。先介紹與RDD 相關的基本概念,例如轉化操作、行動操作、惰性求值、快取,說明的過程伴隨著豐富的範例,加強讀者對RDD 的了解與RDD 程式設計基礎。在說明RDD 中基礎內容的同時,又深入地剖析了疑點、困難,例如RDD Lineage(RDD 相依關係圖)、向Spark 傳遞函數、對閉包的了解等。在之前對基本類型RDD 的學習基礎上,又引用了對特殊類別RDD-- 鍵值對RDD 的大致介紹,在鍵值對RDD介紹中對combineByKey 操作的說明,深入地從程式實現的角度洞悉了Spark分散式運算的實質,幫助對RDD 具有濃厚興趣的讀者做進一步的擴充。最後,站在RDD 設計者的角度重新檢查RDD 快取、持久化、checkpoint 機制,進一步詮釋RDD 為什麼能夠極佳地適應大數據分析業務的特點,有天然強大的容錯性、易恢復性和高效性。
第4 章對Spark 進階模組--Spark SQL, 也就是本書的主題, 進行簡明扼要的概述,並說明對應的Spark SQL 程式設計基礎。先是透過與前一章所學的Spark 對資料的核心抽象--RDD 的比較,引出Spark SQL 中核心的資料抽象--DataFrame,說明兩者的異同,點明Spark SQL 是針對結構化資料處理的進階模組的原因,在於其內建豐富結構資訊的資料抽象。後一部分透過豐富的範例說明如何利用Spark SQL 模組來程式設計的主要步驟,舉例來說,從結構化資料來源中建立DataFrames、DataFrames 基本操作以及執行SQL 查詢等。
第5、6 章屬於Spark SQL 程式設計的進階內容,也是我們將Spark SQL 應用於生產、科學研究計算環境下,真正開始分析多類別資料來源、實現各種複雜業務需求必須要掌握的知識。第5 章,以包含簡單且典型的學生資訊表的JSON 檔案作為資料來源,深入對DataFrame 豐富強大的API 進行研究,以操作說明加範例的形式涵蓋DataFrame 中每一個常用的行動、轉化操作,進而幫助讀者輕鬆高效率地組合使用DataFrame 所提供的API 來實現業務需求。第6章,介紹Spark SQL 可處理的各種資料來源,包含Hive 表、JSON 和Parquet檔案等,從廣度上讓讀者了解Spark SQL 在大數據領域對典型結構化資料來源的皆可處理性,進一步讓讀者真正在工作中掌握一種結構化資料的分析利器。
第三部分實作篇(第7、8 章)
第7 章透過說明大型商業實例專案(以WiFi 探針為基礎的商業大數據分析技術)的功能需求、系統架構、功能設計、資料庫結構,幫助讀者了解如何在實際開發中應用Spark SQL 處理結構化資料,加強讀者的工程思維,同時為第8章的學習做好準備。
第8 章透過說明分散式環境架設以及專案程式的解析,幫助讀者進一步了解Spark SQL 應用程式的執行過程,在後一部分介紹Spark SQL 程式的遠端偵錯方法和Spark 的Web 介面,幫助讀者更加方便地了解程式的執行狀態。
第四部分最佳化篇(第9 章)
最佳化篇由第9 章組成,本篇從Spark 的執行流程到記憶體以及工作的劃分,再到Spark 應用程式的撰寫技巧,接著到Spark 本身的最佳化,最後引出資料傾斜的解決想法,層層遞進,逐步解析Spark 的最佳化思想。最後,以對Spark 執行引擎Tungsten 與Spark SQL 的解析引擎Catalyst 的介紹作為本部分的結尾。筆者將在本篇中帶領讀者掌握Spark 的最佳化方式以及思想,讓Spark 程式再快一點。
繁體中文版注意事項
為維持原作者內容,本書部分畫面會保留原作者之簡體中文介面,請讀者自行參照內文對照。
本書適合讀者
本書適合於學習資料採擷、有巨量結構化資料分析需求的大數據從業者及同好閱讀,也可以作為大專院校相關科系的教材。建議在學習本書內容的過程中,理論結合實務,獨立進行一些程式的撰寫,採取開放式的實驗方法,即讀者自行準備實驗資料和實驗環境,解決實際問題,最後達到理論結合實務的目的。
本書在寫作過程中獲得家人以及編輯的大力支持,在此對他們一併表示感謝。本書由紀涵(負責基礎篇的撰寫)主筆,其他參與著作的還有靖曉文(負責實作篇的撰寫)、趙政達(負責入門篇、最佳化篇的撰寫),排名不分先後。