中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

利用 Apache Spark SQL 和 DataFrames 擴(kuò)展關(guān)系數(shù)據(jù)庫

2019-04-03    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

 

無論怎樣大肆宣傳 NoSQL 數(shù)據(jù)庫的出現(xiàn),關(guān)系數(shù)據(jù)庫都還將繼續(xù)存在。原因很簡單,關(guān)系數(shù)據(jù)庫強(qiáng)制執(zhí)行基本的結(jié)構(gòu)和約束,并提供了很好的聲明式語言來查詢數(shù)據(jù)(我們都喜歡它):SQL!

但是,規(guī)模一直是關(guān)系數(shù)據(jù)庫的問題。21 世紀(jì)的大多數(shù)企業(yè)都擁有豐富的數(shù)據(jù)存儲和倉庫,并希望最大限度地利用大數(shù)據(jù)來獲得可操作的洞見。關(guān)系數(shù)據(jù)庫可能很受歡迎,但除非我們投資了適當(dāng)?shù)拇髷?shù)據(jù)管理策略,否則不能很好地對它們進(jìn)行擴(kuò)展。這包括考慮潛在的數(shù)據(jù)源,數(shù)據(jù)量,約束,模式,ETL(提取 - 轉(zhuǎn)換 - 加載),訪問和查詢模式等等!

 

 

Apache Spark 中的大規(guī)模數(shù)據(jù)科學(xué)

本文將介紹在關(guān)系數(shù)據(jù)庫的強(qiáng)大功能方面取得的一些優(yōu)秀進(jìn)展,而對于“大規(guī)模”,會介紹 Apache Spark – Spark SQL 和 DataFrames 中的一些新組件。最值得注意的是,將涵蓋以下主題:

關(guān)系數(shù)據(jù)庫擴(kuò)展的動機(jī)和挑戰(zhàn)
了解 Spark SQL 和 DataFrames
目標(biāo)
架構(gòu)和功能
性能

人們努力地工作并投入時間在 ApacheShark 中構(gòu)建新組件,我們關(guān)注他們的主要挑戰(zhàn)和動機(jī),以便能夠大規(guī)模執(zhí)行 SQL。我們還將研究 Spark SQL 和 DataFrames 的主要體系結(jié)構(gòu)、接口、功能和性能基準(zhǔn)。在本文最后,最重要的一點,我們將介紹一個分析入侵攻擊的真實案例研究,基于KDD 99 CUP 數(shù)據(jù),利用 Spark SQL 和 DataFrames,通過Databricks 云平臺來平衡從而實現(xiàn) Spark。

為大數(shù)據(jù)而擴(kuò)展關(guān)系數(shù)據(jù)庫的動機(jī)和挑戰(zhàn)

關(guān)系數(shù)據(jù)存儲易于構(gòu)建和查詢。此外,用戶和開發(fā)人員通常更喜歡用類似人類的可讀語言(如 SQL)編寫易于解釋的聲明式查詢。然而,隨著數(shù)據(jù)的數(shù)量和多樣性的增加,關(guān)系方法的伸縮性不足以構(gòu)建大數(shù)據(jù)應(yīng)用程序和分析系統(tǒng)。以下是一些主要挑戰(zhàn):

♦ 處理不同類型數(shù)據(jù)源,可以是結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化的;

♦ 建立各種數(shù)據(jù)源之間的 ETL 管道,這可能導(dǎo)致要開發(fā)大量特定的自定義代碼,隨著時間的推移會增加技術(shù)債務(wù)

♦ 能夠執(zhí)行基于傳統(tǒng)商業(yè)智能(BI)的分析和高級分析(機(jī)器學(xué)習(xí)、統(tǒng)計建模等),后者在關(guān)系系統(tǒng)中執(zhí)行肯定具有挑戰(zhàn)性

大數(shù)據(jù)分析并不是昨天才發(fā)明的!我們在 Hadoop 和 MapReduce 范式方面取得了成功,這很厲害但進(jìn)展太慢,它為用戶提供了一個低級的、程序化的編程接口,需要人們編寫大量代碼來進(jìn)行非常簡單的數(shù)據(jù)轉(zhuǎn)換。然而,自從 Spark 的發(fā)布,它真正改變了大數(shù)據(jù)分析的方式,不需要再把重點放在內(nèi)存計算、容錯、高級抽象和易用性上。

 

 

從那時起,一些框架和系統(tǒng),如 Hive、Pig 和 Shark(演變成 Spark SQL),為大數(shù)據(jù)存儲提供了豐富的關(guān)系接口和聲明式查詢機(jī)制。挑戰(zhàn)在于,這些工具要么是基于關(guān)系的,要么是基于過程的,但是魚和熊掌無法兩者兼得。

然而,在現(xiàn)實世界中,大多數(shù)數(shù)據(jù)分析管道可能涉及到關(guān)系代碼和過程代碼的組合。如果強(qiáng)迫用戶選擇其中一個會最終讓事情變得復(fù)雜,并增加用戶在開發(fā)、構(gòu)建和維護(hù)不同應(yīng)用程序和系統(tǒng)方面的工作量。Apache Spark SQL 建立在前面提到的 SQL on Spark(稱為 Shark)的基礎(chǔ)上,它不強(qiáng)制要求用戶在關(guān)系 API 或過程 API 之間進(jìn)行選擇,而是試圖讓用戶無縫地混合使用它們,來對大數(shù)據(jù)進(jìn)行大規(guī)模的數(shù)據(jù)查詢、檢索和分析。

了解 Spark SQL 和 DataFrame

Spark SQL 本質(zhì)上試圖用兩個主要組件彌合我們之前提到的兩個模型(關(guān)系模型和過程模型)之間的差距。

♦ Spark SQL 提供了一個 DataFrame API,可以對外部數(shù)據(jù)源和 Spark 的內(nèi)置分布式集合進(jìn)行大規(guī)模的關(guān)系操作!

♦ 為了支持大數(shù)據(jù)中各種各樣的數(shù)據(jù)源和算法,Spark SQL 引入了一種名為 Catalyst 的新型可擴(kuò)展優(yōu)化器,可以輕松地為機(jī)器學(xué)習(xí)等高級分析添加數(shù)據(jù)源、優(yōu)化規(guī)則和數(shù)據(jù)類型。

從本質(zhì)上講,Spark SQL 利用 Spark 的強(qiáng)大功能在大數(shù)據(jù)上大規(guī)模地執(zhí)行分布式的、健壯的內(nèi)存計算。Spark SQL 提供了最先進(jìn)的 SQL 性能,并且兼容 Apache Hive(一種流行的大數(shù)據(jù)倉庫框架)支持的所有現(xiàn)有結(jié)構(gòu)和組件,包括數(shù)據(jù)格式、用戶定義函數(shù)(UDF)和 Metastore。除此之外,它還有助于從大數(shù)據(jù)源和企業(yè)數(shù)據(jù)倉庫(如 JSON,Hive,Parquet 等)中提取各種數(shù)據(jù)格式,并執(zhí)行關(guān)系和過程操作的組合,以實現(xiàn)更復(fù)雜的高級分析。

目標(biāo)

讓我們看一下有關(guān) Spark SQL 的一些有趣的事實,包括它的使用、采用和目標(biāo),其中一些我將再次從“ Spark 中的關(guān)系數(shù)據(jù)處理 ”的優(yōu)秀原始論文中復(fù)制過來。Spark SQL 于 2014 年 5 月首次發(fā)布,現(xiàn)在可能是 Spark 中最活躍的組件之一。Apache Spark 絕對是大數(shù)據(jù)處理最活躍的開源項目,有數(shù)百個貢獻(xiàn)者。

除了作為一個開源項目,Spark SQL 已經(jīng)開始得到主流行業(yè)的采用,并部署在了非常大規(guī)模的環(huán)境中。Facebook 有一個關(guān)于“ Apache Spark @Scale:一個 60TB+ 的生產(chǎn)用例 ” 的優(yōu)秀案例研究,他們正在為實體排名做數(shù)據(jù)準(zhǔn)備,其 Hive 的工作過去需要幾天時間并面臨許多挑戰(zhàn),但 Facebook 成功地使用 Spark 進(jìn)行擴(kuò)展并提高了性能。接下來讓我們看看他們在這次旅程中遇到的有趣挑戰(zhàn)!

另一個有趣的事實是,三分之二的 Databricks 云(運(yùn)行 Spark 的托管服務(wù))客戶在其他編程語言中使用了 Spark SQL。在本系列的第二部分中,我們還將展示使用 Spark SQL on Databricks 的實際案例研究。

Spark SQL 的主要目標(biāo)是由它的創(chuàng)建者所定義的:

♦ 無論是在 Spark 程序(在本機(jī) RDD 上)還是在外部數(shù)據(jù)源上,都使用對程序員友好的 API 來支持關(guān)系處理

♦ 使用已建立的 DBMS 技術(shù)提供高性能

♦ 輕松支持新的數(shù)據(jù)源,包括半結(jié)構(gòu)化數(shù)據(jù)和易于查詢聯(lián)合的外部數(shù)據(jù)庫

♦ 使用高級分析算法(如圖形處理和機(jī)器學(xué)習(xí))進(jìn)行擴(kuò)展

架構(gòu)和功能

現(xiàn)在我們來看看 Spark SQL 和 DataFrames 的主要功能和架構(gòu)。這里需要牢記圍繞著 Spark 生態(tài)系統(tǒng)的一些關(guān)鍵概念,隨著時間的推移這個生態(tài)一直在不斷發(fā)展。

 

 

RDD(彈性分布式數(shù)據(jù)集)可能是 Spark 所有成功案例背后的最大貢獻(xiàn)者。它基本上是一種數(shù)據(jù)結(jié)構(gòu),或者更確切地說是分布式存儲器的抽象,它允許程序員在大型分布式集群上執(zhí)行內(nèi)存計算,同時保留容錯等方面的特性。還可以并行化大量計算和轉(zhuǎn)換,并跟蹤轉(zhuǎn)換的整個過程,這有助于有效地重新計算丟失的數(shù)據(jù)。此外,Spark 使用驅(qū)動程序和執(zhí)行程序的概念,如下圖所示。

 

 

通?梢詮奈募、數(shù)據(jù)庫讀取數(shù)據(jù),并行化現(xiàn)有集合甚至轉(zhuǎn)換來創(chuàng)建 RDD。通常,轉(zhuǎn)換是將數(shù)據(jù)轉(zhuǎn)換為不同方面和維度的操作,具體取決于我們想要整理和處理數(shù)據(jù)的方式。它們也會被延遲地評估,這意味著即使定義了轉(zhuǎn)換,在執(zhí)行動作之前也不會計算結(jié)果,通常需要將結(jié)果返回到驅(qū)動程序(然后它會計算所有應(yīng)用的轉(zhuǎn)換!)。

 

 

既然已經(jīng)了解了 Spark 工作原理的架構(gòu),那么讓我們更深入地了解 Spark SQL。通常,Spark SQL 在 Spark 之上作為庫運(yùn)行,正如我們在圖中看到的那樣,它覆蓋了 Spark 生態(tài)系統(tǒng)。下圖詳細(xì)介紹了 Spark SQL 的典型體系結(jié)構(gòu)和接口。

 

 

該圖清楚地顯示了各種 SQL 接口,通過 JDBC/ODBC 或命令行控制臺來訪問,集成到 Spark 支持的編程語言中的 DataFrame API(我們將使用 Python)。DataFrame API 非常強(qiáng)大,允許用戶最終混合程序代碼和關(guān)系代碼!諸如 UDF(用戶定義函數(shù))之類的高級函數(shù)可以在 SQL 中使用,BI 工具也可以使用它。

Spark DataFrames 非常有趣,可以幫助我們利用 Spark SQL 的強(qiáng)大功能,并根據(jù)需要結(jié)合其過程式范例。Spark DataFrame 基本上是具有相同模式的行(行類型)的分布式集合,它基本上是被組織成一些命名列的Spark 數(shù)據(jù)集。這里需要注意的是,數(shù)據(jù)集是 DataFrame API 的擴(kuò)展,它提供了一種 * 類型安全的、面向?qū)ο蟮木幊探涌凇? 它們僅在 Java 和 Scala 中可用,因此我們將專注于 DataFrame。

 

 

DataFrame 等同于關(guān)系數(shù)據(jù)庫中的表(但在引擎蓋下具有更多優(yōu)化),并且還可以以類似于 Spark(RDD)中的“本機(jī)”分布式集合的方式進(jìn)行操作。Spark DataFrames 有一些有趣的屬性,例如:

與 RDD 不同,DataFrame 通常會跟蹤 schema 并支持各種關(guān)系操作,從而實現(xiàn)更優(yōu)化的執(zhí)行。

DataFrame 可以通過表來構(gòu)建,就像大數(shù)據(jù)基礎(chǔ)結(jié)構(gòu)中現(xiàn)有的 Hive 表一樣,甚至可以從現(xiàn)有的 RDD 來構(gòu)建。

DataFrames 可以使用直接 SQL 查詢操作,也可以使用 DataFrame DSL(特定領(lǐng)域語言),以及使用各種關(guān)系運(yùn)算符和變換器,例如 where 和 groupBy。

此外,每個 DataFrame 也可以被視為行對象的 RDD,允許用戶調(diào)用過程化的 Spark API,例如 map。

最后,與傳統(tǒng)的 Dataframe API(Pandas)不同,Spark DataFrames 具有延遲性,因為每個 DataFrame 對象都代表一個邏輯計劃來計算數(shù)據(jù)集,但在用戶調(diào)用特殊的“輸出操作”(如 save)之前,不會執(zhí)行任何操作。

這應(yīng)該讓您對 Spark SQL、數(shù)據(jù)框架、基本特性、概念、體系結(jié)構(gòu)和接口有了足夠的了解。下面讓我們看一下性能基準(zhǔn)來完成這一部分。

性能

在沒有正確優(yōu)化的情況下發(fā)布一個新特性是致命的,構(gòu)建 Spark 的人做了大量的性能測試和基準(zhǔn)測試!讓我們看看一些有趣的結(jié)果,下面描述了展示一些結(jié)果的第一個圖。

 

 

在這些實驗中,他們使用 AMPLab 的大數(shù)據(jù)基準(zhǔn)測試比較了 Spark SQL 與 Shark 和 Impala 的性能,后者使用了 Pavlo 等人開發(fā)的網(wǎng)絡(luò)分析工作負(fù)載;鶞(zhǔn)測試包含帶不同參數(shù)的四種類型查詢,這些查詢具有執(zhí)行掃描、聚合、連接和基于 UDF 的 MapReduce 作業(yè)。使用列式 Parquet 格式壓縮后,數(shù)據(jù)集包含了 110GB 的數(shù)據(jù)。我們看到,在所有查詢中,Spark SQL 比 Shark 快得多,通常與 Impala 競爭。Catalyst 優(yōu)化器負(fù)責(zé)這個壓縮,降低了 CPU 開銷(后面會簡要介紹這一點)。此功能使 Spark SQL 在許多查詢中與基于 C ++ 和 LLVM 的 Impala 引擎競爭,與 Impala 的最大差距在于Query 3a中 Impala 選擇更好的 join 計劃,查詢的選擇性使得其中一個表非常小。

下面的圖表顯示了 DataFrames 和常規(guī) Spark API 以及 Spark + SQL 的一些性能基準(zhǔn)。

 

Spark DataFrames vs. RDD 和 SQL

 

最后,下圖顯示了不同語言中 DataFrames 與 RDD 的一個很好的基準(zhǔn)測試結(jié)果,從而為優(yōu)化的 DataFrames 提供了一個有趣的視角。

 

比較 Spark DataFrames 和 RDD

 

性能秘訣:Catalyst 優(yōu)化器

為什么 Spark SQL 如此快速和優(yōu)化?原因是因為新的可擴(kuò)展優(yōu)化器 Catalyst,基于 scala 中的函數(shù)式編程結(jié)構(gòu)。雖然不會在這里詳細(xì)介紹 Catalyst,但值得一提的是,它有助于優(yōu)化 DataFrames 的操作和查詢。

 

 

Catalyst 的可擴(kuò)展設(shè)計有兩個目的:

可以輕松地為 Spark SQL 添加新的優(yōu)化技術(shù)和功能,尤其是解決大數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和高級分析方面的各種問題

易于優(yōu)化器的擴(kuò)展 – 例如,通過添加定制于數(shù)據(jù)源的規(guī)則,可以將過濾或聚合推送到外部存儲系統(tǒng),或支持新的數(shù)據(jù)類型

Catalyst 支持基于規(guī)則和基于成本的優(yōu)化。雖然可擴(kuò)展優(yōu)化器在過去已經(jīng)被提出,但它們通常需要一種復(fù)雜的特定于域的語言來指定規(guī)則。通常,這會導(dǎo)致顯著的學(xué)習(xí)曲線和維護(hù)負(fù)擔(dān)。相比之下,Catalyst 使用 Scala 編程語言的標(biāo)準(zhǔn)特性,例如模式匹配,讓開發(fā)人員使用完整的編程語言,同時仍然使規(guī)則易于指定。

 

 

Catalyst 的核心包含了一個通用庫,用于表示樹狀結(jié)構(gòu)并應(yīng)用規(guī)則來操作它們。在這個框架的頂部,包含關(guān)系查詢處理(例如,表達(dá)式、邏輯查詢計劃)的庫,以及處理查詢執(zhí)行的不同階段的若干規(guī)則:分析、邏輯優(yōu)化、物理規(guī)劃和代碼生成,以將查詢的部分編譯成 Java 字節(jié)碼。

關(guān)于作者

Dipanjan(DJ)Sarkar – Dipanjan(DJ)Sarkar 是 RedHat 的數(shù)據(jù)科學(xué)家、出版作家、顧問和培訓(xùn)師。他曾在多家創(chuàng)業(yè)公司以及英特爾等財富 500 強(qiáng)公司做過顧問和合作。他主要致力于利用數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)來構(gòu)建大規(guī)模智能系統(tǒng)。他擁有數(shù)據(jù)科學(xué)和軟件工程專業(yè)的技術(shù)碩士學(xué)位。他也是自學(xué)者和大規(guī)模開放在線課程的狂熱支持者。

查看英文原文:Scaling relational databases with Apache Spark SQL and DataFrames

標(biāo)簽: [db:TAGG]

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:微軟亞太區(qū)總裁:中國發(fā)展人工智能有天然優(yōu)勢

下一篇:數(shù)據(jù)庫設(shè)計中的 9 大常見錯誤