1. 程式人生 > >大資料系統-SparkSQL基於記憶體的大資料分析引擎

大資料系統-SparkSQL基於記憶體的大資料分析引擎

[1]參考文章:高彥傑,陳冠誠 Spark SQL : 基於記憶體的大資料分析引擎《程式設計師》2014 . 8

AMPLab將大資料分析負載分為三大型別:批量資料處理、互動式查詢、實時流處理。而其中很重要的一環便是互動式查詢。大資料分析棧中需要滿足使用者ad-hoc、reporting、iterative等型別的查詢需求,也需要提供SQL介面來相容原有資料庫使用者的使用習慣,同時也需要SQL能夠進行關係模式的重組。完成這些重要的SQL任務的便是 Spark SQL和Shark這兩個開源分散式大資料查詢引擎,它們可以理解為輕量級Hive SQL在Spark上的實現,業界將該類技術統稱為SQL on Hadoop。

在Spark 峰會2014上,Databricks宣佈不再支援Shark的開發,全力以赴開發Shark的下一代技術Spark SQL,同時Hive社群也啟動了Hive onSpark專案,將Spark作為Hive(除MapReduce和Tez之外的)新執行引擎。根據伯克利的BigData Benchmark測試對比資料,Shark的In Memory 效能可以達到Hive的100倍,即使是On Disk 也能達到10倍的效能提升,是Hive的強有力的替代解決方案。而作為Shark的進化版本的Spark SQL,在AMPLab最新的測試中的效能已經超過Shark。圖3-1展示了Spark SQL和Hive on Spark是新的發展方向。

Development……to Spark SQL:Shark開發終止,轉向Spark SQL

A new……for Spark:基於Spark的新的SQL查詢引擎

Help……to Spark:幫助現有Hive使用者遷移到Spark


圖3-1  Spark SQL和Hive on Spark是新的發展方向

.1.1為什麼使用Spark SQL

由於Shark底層依賴於Hive,這個架構的優勢是對傳統Hive使用者可以將Shark無縫整合進現有系統執行查詢負載。但是我們也看到一些問題:隨著版本升級,查詢優化器依賴於Hive,不方便新增新的優化策略,需要進行另一套系統的學習和二次開發,學習成本很高。另一方面,MapReduce是程序級並行,例如:Hive在不同的程序空間會使用一些靜態變數,當在同一程序空間進行多執行緒並行執行,多執行緒同時寫同名稱的靜態變數會產生一致性問題,所以Shark需要使用另外一套獨立維護的Hive原始碼分支。而為了解決這個問題AMPLab和Databricks利用Catalyst開發了SparkSQL。

Spark的全棧解決方案為使用者提供了多樣的資料分析框架,機器學習、圖計算、流計算如火如荼的發展和流行吸引了大批的學習者,為什麼我們今天還是要重視的在大資料環境下使用SQL呢?筆者認為主要有以下幾點原因:

1)易用性與使用者慣性。在過去的很多年中,有大批的程式設計師的工作是圍繞著資料庫+應用的架構來做的,因為SQL的易用性提升了應用的開發效率。程式設計師已經習慣了業務邏輯程式碼呼叫SQL的模式去寫程式,慣性的力量是強大的,如果還能用原有的方式解決現有的大資料問題,何樂而不為呢?提供SQL和JDBC的支援會讓傳統使用者像以前一樣的書寫程式,大大減少遷移成本。

2)生態系統的力量。很多系統軟體效能好,但是未取得成功和沒落,很大程度上因為生態系統問題。傳統的SQL在JDBC、ODBC、SQL的各種標準下形成了一整套成熟的生態系統,很多應用元件和工具可以遷移使用,像一些視覺化的工具、資料分析工具等,原有企業的IT工具可以無縫過渡。

3)資料解耦,Spark SQL正在擴充套件支援多種持久化層,使用者可以使用原有的持久化層儲存資料,但是也可以體驗和遷移到Spark SQL提供的資料分析環境下進行Big Data的分析。

2Spark SQL架構分析

Spark SQL與傳統的DBMS的查詢優化器+執行器的架構較為類似,只不過其執行器是在分散式環境中實現,並採用的Spark作為執行引擎。SparkSQL的查詢優化是Catalyst,其基於Scala語言開發,可以靈活利用Scala原生的語言特性很方便進行功能擴充套件,奠定了Spark SQL的發展空間。Catalyst將SQL語言翻譯成最終的執行計劃,並在這個過程中進行查詢優化。這裡和傳統不太一樣的地方就在於,SQL經過查詢優化器最終轉換為可執行的查詢計劃是一個查詢樹,傳統DB就可以執行這個查詢計劃了。而Spark SQL最後執行還是會在Spark內將這棵執行計劃樹轉換為Spark的有向無環圖DAG再進行執行。

1.Catalyst架構及執行流程分析

下面我們可以看到Catalyst的整體架構:

Phases……relational queries:規則分析,優化,查詢計劃的各個階段

Unresolved Logical Plan :未解析的邏輯查詢計劃

Logical Plan:邏輯查詢計劃

Optimized Logical Plan:優化的邏輯查詢計劃

Physical Plans:物理查詢計劃

Analysis Rules:分析規則

Optimization Rules:優化規則

Planning Rules:計劃規則

圖3-2  Spark SQL查詢引擎Catalyst的架構

我們從圖3-2中可以看到整個的Catalyst是Spark SQL的排程核心,遵循傳統資料庫的查詢解析步驟,對SQL進行解析,轉換為邏輯查詢計劃,物理查詢計劃,最終轉換為Spark的DAG進行執行。圖3-3為Catalyst的執行流程。


圖3-3  Catalyst的執行流程

SQlParser將SQL語句轉換為邏輯查詢計劃,Analyzer對邏輯查詢計劃進行屬性和關係關聯檢驗,之後Optimizer通過邏輯查詢優化將邏輯查詢計劃轉換為優化的邏輯查詢計劃,QueryPlanner將優化的邏輯查詢計劃轉換為物理查詢計劃,prepareForExecution調整資料分佈,最後將物理查詢計劃轉換為執行計劃進入Spark執行任務。

2.Spark SQL優化策略

查詢優化是傳統資料庫中最為重要的一環,這項技術在傳統資料庫中已經很成熟。除了查詢優化,Spark SQL在儲存上也是進行了優化,下面我們從以下幾點看看Spark SQL的一些優化策略:

(1)記憶體列式儲存與記憶體快取表

Spark SQL可以通過cacheTable將資料儲存轉換為列式儲存,同時將資料載入到記憶體進行快取。cacheTable相當於在分散式叢集的記憶體物化檢視,將資料進行快取,這樣迭代的或者互動式的查詢不用再從HDFS讀資料,直接從記憶體讀取資料大大減少了I/O開銷。列式儲存的優勢在於Spark SQL只需要讀出使用者需要的列,而不需要像行儲存那樣需要每次將所有列讀出,從而大大減少記憶體快取資料量,更高效的利用記憶體資料快取,同時減少網路傳輸和IO開銷。資料按照列式儲存,由於是資料型別相同的資料連續儲存,能夠利用序列化和壓縮減少記憶體空間的佔用。

(2)列儲存壓縮

為了減少記憶體和硬碟空間佔用,Spark SQL採用了一些壓縮策略對記憶體列儲存資料進行壓縮。Spark SQL的壓縮方式要比Shark豐富很多,例如它支援PassThrough,RunLengthEncoding, DictionaryEncoding, BooleanBitSet, IntDelta, LongDelta等多種壓縮方式。這樣能夠大幅度減少記憶體空間佔用和網路傳輸開銷和I/O開銷。

(3)邏輯查詢優化

SparkSQL在邏輯查詢優化(見圖3-4)上支援列剪枝、謂詞下壓、屬性合併等邏輯查詢優化方法。列剪枝為了減少讀取不必要的屬性列,減少資料傳輸和計算開銷,在查詢優化器進行轉換的過程中會進行列剪枝的優化。

下面我們介紹一個邏輯優化例子:

SELECT ClassFROM (SELECT ID,Name,Class  FROM STUDENT) S WHERE S.ID=1

 

圖3-4  邏輯查詢優化

Catalyst將原有查詢通過謂詞下壓,將選擇操作ID=1優先執行,這樣過濾大部分資料,通過屬性合併將最後的投影只做一次最終保留Class屬性列。

(4)Join優化

Spark SQL深度借鑑傳統資料庫的查詢優化技術的精髓,同時也在分散式環境下進行特定的優化策略調整和創新。現在Spark SQL對Join進行了優化支援多種連線演算法,現在的連線演算法已經比Shark豐富,而且很多原來Shark的元素也逐步遷移過來。例如:BroadcastHashJoin、BroadcastNestedLoopJoin、HashJoin、LeftSemiJoin,等等。

下面我們介紹一個其中的BroadcastHashJoin演算法思想:BroadcastHashJoin將小錶轉化為廣播變數進行廣播,這樣避免Shuffle開銷,最後在分割槽內做Hash連線。這裡用的就是Hive中Map Side Join的思想。同時用了DBMS中的Hash連線演算法做連線。

隨著Spark SQL發展,未來會有更多的查詢優化策略加入進來。同時後續Spark SQL會支援像Shark Server一樣的服務端,JDBC介面,相容更多的持久化層例如NoSQL,傳統的DBMS等。一個強有力的結構化大資料查詢引擎正在崛起。

3.如何使用Spark SQL

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

// 在這裡引入sqlContext下所有的方法我們就可以直接用sql方法進行查詢。

import sqlContext._

case class Person(name: String, age: Int)

// 下面的people是含有case型別資料的RDD,會預設由Scala的implicit機制將RDD轉換為SchemaRDD,SchemaRDD是SparkSQL中的核心RDD。

val people =sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p=> Person(p(0), p(1).trim.toInt))

// 在記憶體的元資料中登錄檔資訊,這樣一個Spark SQL表就建立完成了。

people.registerAsTable("people")

// sql語句就會觸發上面分析的SparkSQL的執行過程,讀者可以參考上面的圖示。

val teenagers =sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")

// 最後生成teenagers也是一個RDD

teenagers.map(t=>"Name: " + t(0)).collect().foreach(println)

通過之前的介紹,讀者對支撐結構化資料分析任務的Spark SQL的原理與使用有了一定的瞭解。在生產環境中,有一類資料分析任務對響應延遲要求高,需要實時處理流資料,在BDAS中,Spark Streaming用於支撐大規模流式處理分析任務。


友情推薦:ABC技術研習社

為技術人打造的專屬A(AI),B(Big Data),C(Cloud)技術公眾號和技術交流社群。


相關推薦

資料系統-SparkSQL基於記憶體資料分析引擎

[1]參考文章:高彥傑,陳冠誠 Spark SQL : 基於記憶體的大資料分析引擎《程式設計師》2014 . 8AMPLab將大資料分析負載分為三大型別:批量資料處理、互動式查詢、實時流處理。而其中很重要的一環便是互動式查詢。大資料分析棧中需要滿足使用者ad-hoc、repo

學習資料課程 spark 基於記憶體的分散式計算框架(二)RDD 程式設計基礎使用

學習大資料課程 spark 基於記憶體的分散式計算框架(二)RDD 程式設計基礎使用   1.常用的轉換 假設rdd的元素是: {1,2,2,3}   很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完

資料實戰:基於Spark SQL統計分析函式求分組TopN

做大資料分析時,經常遇到求分組TopN的問題,如:求每一學科成績前5的學生;求今日頭條各個領域指數Top 30%的頭條號等等。Spark SQL提供了四個排名相關的統計分析函式: dense_rank() 返回分割槽內每一行的排名,排名是連續的。 rank() 返回分割槽

彈性分散式資料集:基於記憶體叢集計算的容錯抽象

摘要        我們提出的彈性分散式資料集(RDDs),是一個讓程式設計師在大型叢集上以容錯的方式執行基於記憶體計算的分散式記憶體抽象。RDDs受啟發於兩類使用當前計算框架處理不高效的應用:迭代演算法和互動式資料探勘工具。這二者在記憶體中儲存資料效能能

資料探勘——基於R文字情感分析(2)

姑且算是搞定了這個。 最後使用的是在twitter中搜索。因為callback url的關係,之前一直無法直接搜尋twitter內容,今天直接把callback url刪除了就成功了。 推薦兩個很好的

資料許可權設計——基於EntityFramework的資料許可權設計方案:一種設計思路

 前言:“我們有一個訂單列表,希望能夠根據當前登陸的不同使用者看到不同型別的訂單資料”、“我們希望不同的使用者能看到不同時間段的掃描報表資料”、“我們系統需要不同使用者檢視不同的生產報表列”。諸如此類,最近經常收到專案上面的客戶提出的這種問題,即所謂的“資料許可權”,經過開會討論決定:在目前的開發框架上面搭建

[資料專案]-0011-基於資料技術推薦系統演算法案例實戰視訊教

2018最新最全大資料技術、專案視訊。整套視訊,非那種淘寶雜七雜八網上能免費找到拼湊的亂八七糟的幾年前的不成體系浪費咱們寶貴時間的垃圾,詳細內容如下,視訊高清不加密,需要的聯絡QQ:3164282908(加Q註明51CTO)。     [大資料專案]-0010-基於大資料技術

[資料專案]-0016-基於Spark2.x新聞網資料實時分析視覺化系統

2018最新最全大資料技術、專案視訊。整套視訊,非那種淘寶雜七雜八網上能免費找到拼湊的亂八七糟的幾年前的不成體系浪費咱們寶貴時間的垃圾,詳細內容如下,視訊高清不加密,需要的聯絡QQ:3164282908(加Q註明51CTO)。   課程介紹 本專案基於某新聞網使用者日誌分析系統進行講解

細說Mammut資料系統測試環境Docker遷移之路

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 前言 最近幾個月花了比較多精力在專案的測試環境Docker遷移上,從最初的docker“門外漢”到現在組裡的同學(大部分測試及少數的開發)都可以熟練地使用docker環境開展測試工作,中間也積累了一些經驗和踩過不少坑,藉此2017覆盤的機會,總結一下整個環

資料結構實現 6.2:優先佇列_基於二叉堆實現(C++版)

資料結構實現 6.2:優先佇列_基於最大二叉堆實現(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入隊操作 2.2 出隊操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析

京東推薦系統架構揭祕:資料時代下的智慧化改造

在電商領域,推薦的價值在於挖掘使用者潛在購買需求,縮短使用者到商品的距離,提升使用者的購物體驗。 京東推薦的演進史是絢麗多彩的。京東的推薦起步於2012年,當時的推薦產品甚至是基於規則匹配做的。整個推薦產品線組合就像一個個鬆散的原始部落一樣,部落與部落之前沒有任何工程、演算法的交集。201

查詢Linux系統中的佔用磁碟空間最的前10個檔案或資料

   當磁碟空間被迅速佔用的時候,我們必須找出一些,比較佔用磁碟空間的檔案或者資料夾。通常情況下,最有可能找出佔用磁碟空間檔案或資料夾的地方,主要是 /tmp or /var or /home。       目前沒有單個命令來

[資料專案]-0017-基於資料體系構建資料倉庫

2018最新最全大資料技術、專案視訊。整套視訊,非那種淘寶雜七雜八網上能免費找到拼湊的亂八七糟的幾年前的不成體系浪費咱們寶貴時間的垃圾,詳細內容如下,視訊高清不加密,需要的聯絡QQ:3164282908(加Q註明51CTO)。   課程介紹 本課程系統的、全面的、深入的講解了,基於大資

探碼DYSON資料系統,助力企業資料資產化解析!

近日美國公佈了一份《2016-2045年新興科技趨勢報告》,該報告是在過去五年內由政府機構、諮詢機構、智囊團、科研機構等發表的32份科技趨勢相關研究調查報告的基礎上提煉形成的。詞報告是通過對近700項科技趨勢的綜合比對分析,最終明確了20項最值得關注的科技發展趨勢。 該報告

能源管控系統開發,BI資料視覺化管理分析平臺開發

能源管理系統是以幫助工業生產企業在擴大生產的同時,合理計劃和利用能源,降低單位產品能源消耗,提高經濟效益為目的資訊化管理系統。通過能源計劃,能源監控,能源統計,能源消費分析,重點能耗裝置管理,能源計量裝置管理等多種手段,是企業管理者對企業的能源成本比重發展趨勢有準確的掌握,並將企業的能源消費計劃任務分解到各個

將MySQL資料庫、系統盤中的檔案、日誌檔案放到掛載資料盤的方法

系統盤中的大檔案 tomcat的日誌檔案 mysql的資料庫 或者 其他大檔案 都可以使用如下方法 1已知資料庫的安裝目錄為“/usr/local/java/mysql”,而資料存放目錄則在“/usr/local/java/data/mysql”中. 2進入“

資料安全】基於Kerberos的資料安全驗證方案

1.背景 網際網路從來就不是一個安全的地方。很多時候我們過分依賴防火牆來解決安全的問題,不幸的是,防火牆是假設“壞人”是來自外部的,而真正具有破壞性的攻擊事件都是往往都是來自於內部的。 近幾年,在thehackernews等網站上總會時不時看到可以看到一些因為資料安全問題被大面積攻擊、勒索的事件。在Hadoo

entity framework6.0,只查詢資料,佔記憶體的情況

初步使用, 只做查詢使用,客戶電腦經常報 out of memory,程序記憶體達到1.4G,應該是記憶體佔用太大導致的,在entity後使用AsNoTracking(),可以取消與資料庫的連線,降低資

自學資料:Hive基於搜狗搜尋的使用者日誌行為分析

前言 ”大資料時代“,“大資料/雲端計算”,“大資料平臺”,每天聽到太多的大資料相關的詞語,好像現在說一句話不跟大資料沾邊都不好意思說自己是做IT的。可能這與整個IT圈子的炒作也有關聯,某一個方面來看其實就是一營銷術語。很多朋友就想問,我想做大資料,但是沒有這個條件,沒有這

廣電總局推出資料系統應戰收視造假

12月26日,國家廣播電視總局在北京舉行新聞釋出會,宣佈國家廣播電視總局廣播電視節目收視綜合評價大資料系統基本建成並開通試執行。 新聞釋出會上,承建運營廣播電視節目收視綜合評價大資料系統的主體單位,國家廣播電視總局廣播電視規劃院院長餘英介紹了有關情況。此次開通試執行的廣播電視節目收視綜合評價大資料系統,主要