關(guān)注公眾號(hào):登峰大數(shù)據(jù),閱讀Spark實(shí)戰(zhàn)第二版(完整中文版),系統(tǒng)學(xué)習(xí)Spark3.0大數(shù)據(jù)框架!
如果您覺(jué)得作者翻譯的內(nèi)容有幫助,請(qǐng)分享給更多人。您的分享,是作者翻譯的動(dòng)力!
關(guān)于這本書(shū)
當(dāng)我開(kāi)始寫這本書(shū)的時(shí)候,也就是你們現(xiàn)在讀的這本書(shū),Spark實(shí)戰(zhàn)(第二版),我的目標(biāo)是:
幫助Java社區(qū)的朋友使用Apache Spark,并且說(shuō)明使用Spark,不需要學(xué)習(xí)Scala或Python。
解釋Apache Spark、(大)數(shù)據(jù)工程和數(shù)據(jù)科學(xué)背后的關(guān)鍵概念,除了關(guān)系數(shù)據(jù)庫(kù)和一些SQL之外,您不需要了解其他任何東西。
宣傳Spark是一個(gè)為分布式計(jì)算和分析而設(shè)計(jì)的操作系統(tǒng)。
我相信在教授任何計(jì)算機(jī)科學(xué)知識(shí)時(shí),都應(yīng)該有大量的例子。書(shū)中的例子是學(xué)習(xí)過(guò)程中必不可少的一部分。我把它們?cè)O(shè)計(jì)得盡可能接近真實(shí)場(chǎng)景。我的數(shù)據(jù)集來(lái)自有質(zhì)量缺陷的現(xiàn)實(shí)生活;它們不是理想的教科書(shū)數(shù)據(jù)集:“總是可以正常工作”。這就是為什么,當(dāng)結(jié)合這些例子和數(shù)據(jù)集時(shí),您將以一種比消毒的方式更實(shí)用的方式工作和學(xué)習(xí)。我把這些例子稱為實(shí)驗(yàn),希望你們能從中得到啟發(fā),并用它們來(lái)進(jìn)行實(shí)驗(yàn)。
插圖無(wú)處不在?!耙粓D勝千言”這句名言為您省去了額外閱讀的183,000字。
誰(shuí)該讀本書(shū)
將工作頭銜與一本書(shū)聯(lián)系起來(lái)是一項(xiàng)困難的任務(wù),所以如果你的頭銜是數(shù)據(jù)工程師、數(shù)據(jù)科學(xué)家、軟件工程師或數(shù)據(jù)/軟件架構(gòu)師,你肯定會(huì)很高興。如果你是一個(gè)企業(yè)架構(gòu)師,嗯,你可能知道所有這些,就像企業(yè)架構(gòu)師知道關(guān)于一切的一切,不是嗎?更重要的是,如果你想收集更多關(guān)于這些主題的知識(shí),這本書(shū)會(huì)很有幫助:
使用Apache Spark構(gòu)建分析和數(shù)據(jù)管道:接入、轉(zhuǎn)換和導(dǎo)出/發(fā)布數(shù)據(jù)。
不需要學(xué)習(xí)Scala或Hadoop就可以使用Spark:用Java學(xué)習(xí)Spark。
理解關(guān)系數(shù)據(jù)庫(kù)和Spark之間的區(qū)別。
關(guān)于大數(shù)據(jù)的基本概念,包括在Spark環(huán)境中可能遇到的關(guān)鍵Hadoop組件。
Spark在企業(yè)架構(gòu)中的位置。
在大數(shù)據(jù)環(huán)境中使用您現(xiàn)有的Java和RDBMS技能。
理解dataframe API。
通過(guò)在Spark中接入數(shù)據(jù)來(lái)集成關(guān)系數(shù)據(jù)庫(kù)。
通過(guò)流收集數(shù)據(jù)。
了解這個(gè)行業(yè)的發(fā)展,以及為什么Spark是一個(gè)很好的選擇。
理解和使用核心角色:DAAataFrame。
了解什么是彈性分布式數(shù)據(jù)集(RDDs),以及為什么不應(yīng)該(再)使用它們。
理解如何與Spark交互。
了解Spark的各個(gè)組成部分:driver, executors, master and workers, Catalyst, Tungsten。
學(xué)習(xí)關(guān)鍵hadoop派生技術(shù)(如YARN或HDFS)的作用。
理解資源管理器(如YARN、Mesos和內(nèi)置管理器)的角色。
以批處理模式和流方式從各種文件中接入數(shù)據(jù)。
使用SQL和Spark。
操作Spark提供的靜態(tài)函數(shù)。
理解什么是不可變性以及它為什么重要。
使用Java用戶自定義函數(shù)(udf)擴(kuò)展Spark。
使用新的數(shù)據(jù)源擴(kuò)展Spark。
將數(shù)據(jù)從JSON線性化,這樣就可以使用SQL了。
在dataframe上執(zhí)行聚合和聯(lián)合。
使用用戶定義聚合函數(shù)(UDAFs)擴(kuò)展聚合。
理解緩存和檢查點(diǎn)之間的區(qū)別,并提高Spark應(yīng)用程序的性能。
導(dǎo)出數(shù)據(jù)到文件和數(shù)據(jù)庫(kù)。
了解AWS、Azure、IBM Cloud、GCP和本地集群上的部署。
從CSV、XML、JSON、文本、Parquet、ORC和Avro文件中獲取數(shù)據(jù)。
擴(kuò)展數(shù)據(jù)源,并舉例說(shuō)明如何使用EXIF獲取照片元數(shù)據(jù),重點(diǎn)介紹數(shù)據(jù)源API v1。
在構(gòu)建管道時(shí)使用帶Spark的Delta Lake。
你將從這本書(shū)中學(xué)到什么?這本書(shū)的目的是教你如何在應(yīng)用程序中使用Spark,或者為Spark構(gòu)建特定的應(yīng)用程序。我為數(shù)據(jù)工程師和Java軟件工程師設(shè)計(jì)了這本書(shū)。當(dāng)我開(kāi)始學(xué)習(xí)Spark時(shí),所有東西都是用Scala編寫的,幾乎所有文檔都在官方網(wǎng)站上,Stack Overflow每隔幾個(gè)月就會(huì)顯示一次Spark問(wèn)題。當(dāng)然,文檔聲稱Spark有一個(gè)Java API,但是高級(jí)示例很少。當(dāng)時(shí),我的團(tuán)隊(duì)成員對(duì)學(xué)習(xí)Spark,還是學(xué)習(xí)Scala感到困惑,管理層希望得到結(jié)果。我的團(tuán)隊(duì)成員是我寫這本書(shū)的動(dòng)力。
我假設(shè)您具有基本的Java和RDBMS知識(shí)。我在所有示例中使用Java 8,即使Java 11已經(jīng)存在。
閱讀本書(shū)不需要具備Hadoop知識(shí),但是因?yàn)槟鷮⑿枰恍〩adoop組件(非常少),所以我將介紹它們。如果你已經(jīng)知道Hadoop,你肯定會(huì)發(fā)現(xiàn)這本書(shū)令人耳目一新。您不需要任何Scala知識(shí),因?yàn)檫@是一本關(guān)于Spark和Java的書(shū)。當(dāng)我還是個(gè)孩子的時(shí)候(我必須承認(rèn),現(xiàn)在仍然如此),我讀了很多連環(huán)畫,介于漫畫書(shū)和漫畫小說(shuō)之間。因此,我喜歡插圖,在這本書(shū)中我有很多插圖。圖1顯示了一個(gè)帶有幾個(gè)組件、圖標(biāo)和圖例的典型圖表。
圖1 ?在本書(shū)的一個(gè)典型插圖中使用的圖例
本書(shū)是如何組織的
本書(shū)共分四部分和十八個(gè)附錄。
第1部分給出Spark的關(guān)鍵內(nèi)容。你將學(xué)習(xí)理論和一般概念,但不要絕望(現(xiàn)在);我提供了許多示例和圖表。它讀起來(lái)就像一本漫畫書(shū)。
第1章是一個(gè)簡(jiǎn)單例子的全面介紹。您將了解Spark為什么是分布式分析操作系統(tǒng)。
第2章介紹了一個(gè)簡(jiǎn)單的Spark過(guò)程。
第3章介紹了dataframe的強(qiáng)大功能,它結(jié)合了Spark的API和存儲(chǔ)能力。
第4章介紹延遲執(zhí)行,比較Spark和RDBMS,并介紹了有向無(wú)環(huán)圖(DAG)。
第5章和第6章是相關(guān)的:將構(gòu)建一個(gè)小型應(yīng)用程序,構(gòu)建一個(gè)集群,并部署您的應(yīng)用程序。第5章是關(guān)于構(gòu)建一個(gè)小應(yīng)用程序,而第6章是部署應(yīng)用程序。
在第2部分中,您將開(kāi)始深入了解有關(guān)接入數(shù)據(jù)的實(shí)際示例。接入是將數(shù)據(jù)帶入Spark的過(guò)程。它并不復(fù)雜,但有很多可能性和組合。
第7章描述了從文件中接入的數(shù)據(jù):CSV、文本、JSON、XML、Avro、ORC和Parquet。每種文件格式都有自己的示例。
第8章介紹了從數(shù)據(jù)庫(kù)中接入數(shù)據(jù):數(shù)據(jù)將來(lái)自關(guān)系數(shù)據(jù)庫(kù)和其他數(shù)據(jù)存儲(chǔ)。
第9章是關(guān)于從自定義數(shù)據(jù)源接入任何東西。
第10章關(guān)注流數(shù)據(jù)。
第3部分是關(guān)于數(shù)據(jù)轉(zhuǎn)換的:我將其稱為重?cái)?shù)據(jù)提升。您將了解已處理數(shù)據(jù)的數(shù)據(jù)質(zhì)量、轉(zhuǎn)換和發(fā)布。這部分的大部分內(nèi)容討論了使用SQL和它的API、聚合、緩存以及使用UDF擴(kuò)展Spark。
第11章是關(guān)于眾所周知的查詢語(yǔ)言SQL。
第12章教你如何執(zhí)行轉(zhuǎn)換。
第13章將轉(zhuǎn)換擴(kuò)展到整個(gè)文檔的層次。本章還解釋了靜態(tài)函數(shù),這是Spark的許多重要方面之一。
第14章是關(guān)于使用用戶定義函數(shù)擴(kuò)展Spark的。
聚合也是一個(gè)眾所周知的數(shù)據(jù)庫(kù)概念,它可能是分析的關(guān)鍵。第15章介紹了聚合,包括Spark和自定義聚合。
最后,第4部分將更接近生產(chǎn)環(huán)境,并關(guān)注更高級(jí)的主題。您將學(xué)習(xí)分區(qū)和導(dǎo)出數(shù)據(jù)、部署約束(包括云計(jì)算)和優(yōu)化
第16章著重于優(yōu)化技術(shù):緩存和檢查點(diǎn)。
第17章是關(guān)于將數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫(kù)和文件的。本章還解釋了如何使用Delta Lake,這是一個(gè)接近Spark內(nèi)核的數(shù)據(jù)庫(kù)。
第18章詳細(xì)介紹了部署所需的參考架構(gòu)和安全性。這絕對(duì)是少動(dòng)手,但充滿了關(guān)鍵信息。
這些附錄雖然不是必需的,但也提供了豐富的信息:安裝、故障排除和上下文。其中很多都是在Java上下文中針對(duì)Apache Spark的精心策劃的引用。
關(guān)于代碼
正如我所說(shuō)的,每一章(除了6章和18章)都有結(jié)合代碼和數(shù)據(jù)的實(shí)驗(yàn)。源代碼存在編號(hào)清單中,和與正常文本一致的行中。在這兩種情況下,源代碼都使用固定寬度的字體進(jìn)行格式化,以便與普通文本分開(kāi)。有時(shí)代碼也用粗體顯示,以突出顯示代碼塊中更重要的代碼。
在Apache 2.0許可下,所有代碼都可以在GitHub上免費(fèi)獲得。數(shù)據(jù)可能有不同的許可證。每個(gè)章節(jié)都有自己的存儲(chǔ)庫(kù):第1章將在https://github.com/jgperrin/net.jgp.books.spark.ch01,第15章的代碼在https://github.com/jgperrin/net.jgp.books.spark.ch15,等等,以此類推。有兩個(gè)例外:
第6章使用第5章的代碼。
第18章詳細(xì)討論了部署,沒(méi)有代碼。
由于源代碼控制工具允許分支,主分支包含針對(duì)最新產(chǎn)品版本的代碼,而每個(gè)存儲(chǔ)庫(kù)都包含適用于特定版本的分支。實(shí)驗(yàn)的編號(hào)是三位數(shù),從100開(kāi)始。有兩種實(shí)驗(yàn):書(shū)中描述的實(shí)驗(yàn)和網(wǎng)上提供的額外實(shí)驗(yàn):
書(shū)中所描述的實(shí)驗(yàn)是按章節(jié)編號(hào)的。因此,第12章的實(shí)驗(yàn)200在第12章第2節(jié)中有介紹。同樣,第17章的第100號(hào)實(shí)驗(yàn)也在第17章的第1節(jié)中詳細(xì)說(shuō)明。
書(shū)中沒(méi)有描述的實(shí)驗(yàn)以9開(kāi)頭,如900,910等等。900系列的實(shí)驗(yàn)正在增長(zhǎng):我還在不斷增加。實(shí)驗(yàn)號(hào)不是連續(xù)的,就像基本代碼中的行號(hào)一樣。
在GitHub中,您將發(fā)現(xiàn)使用Python、Scala和Java編寫的代碼(除非它不適用)。然而,為了保持書(shū)中的清晰度,只使用了Java。
在許多情況下,原始的源代碼被重新格式化;我們添加了換行符并修改了縮進(jìn)以適應(yīng)書(shū)中可用的頁(yè)空間。在極少數(shù)情況下,這是不夠的,清單包括續(xù)行標(biāo)記(?)。此外,當(dāng)在文本中描述代碼時(shí),源代碼中的注釋經(jīng)常從清單中刪除。代碼注釋伴隨著許多清單,突出了重要的概念。
第一部分 用實(shí)例來(lái)闡述晦澀的理論
與學(xué)習(xí)任何技術(shù)一樣,在深入使用它之前,需要了解一些“晦澀”的理論。這一部分,我用了六章內(nèi)容,來(lái)闡述這些理論,并通過(guò)實(shí)例來(lái)闡述。
第1章是一個(gè)詳細(xì)介紹的簡(jiǎn)單例子。您將了解為什么Spark不僅僅是一組簡(jiǎn)單的工具,而是一個(gè)真正的分布式分析操作系統(tǒng)。在第一章之后,您將能夠在Spark中運(yùn)行一個(gè)簡(jiǎn)單的數(shù)據(jù)接入操作。
第2章將向您展示Spark是如何工作的。您將通過(guò)詳細(xì)步驟,構(gòu)建一個(gè)心智模型(表示您自己的思維過(guò)程)來(lái)構(gòu)建Spark組件的表示。本章的實(shí)驗(yàn)向您展示了如何導(dǎo)出數(shù)據(jù)庫(kù)中的數(shù)據(jù)。本章包含了大量的插圖,這將使你的學(xué)習(xí)過(guò)程比僅僅從文字和代碼中學(xué)習(xí)更容易!
第3章將帶您進(jìn)入一個(gè)全新的維度:發(fā)現(xiàn)強(qiáng)大的dataframe,它結(jié)合了Spark的API和存儲(chǔ)功能。在本章的實(shí)驗(yàn)室中,你將加載兩個(gè)數(shù)據(jù)集并將它們union在一起。
第4章介紹了Spark的延遲加載,并解釋了Spark使用延遲加載優(yōu)化的原因。您將了解有向無(wú)環(huán)圖(DAG)并比較Spark和RDBMS。本章的實(shí)驗(yàn)教你如何開(kāi)始使用dataframe API操作數(shù)據(jù)。
第5章和第6章是內(nèi)容相關(guān)的:將構(gòu)建一個(gè)小型應(yīng)用程序,構(gòu)建一個(gè)集群,并部署應(yīng)用程序。這兩章非常有實(shí)戰(zhàn)性。