溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SparkSQL指的是什么

發(fā)布時(shí)間:2022-01-13 16:02:31 來源:億速云 閱讀:166 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“SparkSQL指的是什么”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“SparkSQL指的是什么”這篇文章吧。

一、 Spark SQL介紹

        

        Spark SQL是Apache Spark's的一個(gè)模塊,用來處理結(jié)構(gòu)化數(shù)據(jù),1.0后產(chǎn)生;SQL語句主要體現(xiàn)在關(guān)系型數(shù)據(jù)庫上,大數(shù)據(jù)中基于Hadoop的SQL有Hive(SQL on Hadoop)但是MapReduce計(jì)算過程中大量的磁盤落地過程消耗了大量I/O,降低運(yùn)行效率,簡單說就是穩(wěn)定性高,計(jì)算慢,離線批處理的框架,因此其他的SQL on Hadoop工具產(chǎn)生。

        SQL on Hadoop

        •  Hive        -- 把HQL語句轉(zhuǎn)換MapReduce作業(yè) 提交到Y(jié)arn執(zhí)行(元數(shù)據(jù)重要性)

        •  Impala    -- 開源的交互式SQL查詢引擎,基于內(nèi)存處理

        •  Presto    -- 分布式SQL查詢引擎

        •  Shark     -- SQL語句翻譯Spark作業(yè),Hive跑在Spark之上,依賴Hive與Hive兼容性差

        •  Drill        -- 查詢引擎包括SQL/FILE/HDFS/S3

        • Phoenix  -- 基于Hbase上的SQL引擎



        Hive on SQL是社區(qū)發(fā)展另外一個(gè)路線,屬于Hive發(fā)展計(jì)劃,把Spark作為Hive的執(zhí)行引擎;之前我們說的HIve作業(yè)跑在Hadoop的MapReduce上的;現(xiàn)在Hive不受限于一個(gè)引擎,可以采用MapReduce、Tez、Spark等引擎。

二、 Spark SQL特性

        • 集成性-SQL查詢與應(yīng)用程序?qū)?/p>

        • 統(tǒng)一的數(shù)據(jù)訪問-連接各種數(shù)據(jù)源(Hive, Avro, Parquet, ORC, JSON, and JDBC)

        • 與Hive的集成性,不需要Hive,使用Hive存在Metastores即可或者使用Hive-site文件

        • 通過JDBC和ODBC連接,start-thriftserver底層走的也是Thrift協(xié)議(Hive_server2底層基于Thrift協(xié)議,)

        • Spark SQL不僅僅是SQL,遠(yuǎn)超出SQL

三、 Spark SQL優(yōu)勢

      A:內(nèi)存列存儲(In-Memory Columnar Storage)

    Spark SQL的表數(shù)據(jù)在內(nèi)存中的存儲采用是內(nèi)存列式存儲,而不是原生態(tài)JVM對象存儲方式。

     SparkSQL指的是什么

     Spark SQL列式存儲將數(shù)據(jù)類型相同列采用原生數(shù)組來存儲,將Hive支持的復(fù)雜數(shù)據(jù)類型(如array、map等)先序化后并接成一個(gè)字節(jié)數(shù)組來存儲。這樣,每個(gè)列創(chuàng)建一個(gè)JVM對象,從而導(dǎo)致可以快速的GC和緊湊的數(shù)據(jù)存儲;額外的,還可以使用低廉CPU開銷的高效壓縮方法(如字典編碼、行長度編碼等壓縮方法)降低內(nèi)存開銷;更有趣的是,對于分析查詢中頻繁使用的聚合特定列,性能會得到很大的提高,原因就是這些列的數(shù)據(jù)放在一起,更容易讀入內(nèi)存進(jìn)行計(jì)算

    B:字節(jié)碼生成技術(shù)(bytecode generation,即CG)

        數(shù)據(jù)庫查詢中有一個(gè)昂貴的操作是查詢語句中的表達(dá)式,主要是由于JVM的內(nèi)存模型引起的。比如如下一個(gè)查詢:

中有一個(gè)昂在這個(gè)查詢里,如果采用通用的SQL語法途徑去處理,會先生成一個(gè)表達(dá)式樹。

select a+b from table

SparkSQL指的是什么

在物理處理這個(gè)表達(dá)式樹的時(shí)候,將會如圖所示的7個(gè)步驟

    1.  調(diào)用虛函數(shù)Add.eval(),需要確認(rèn)Add兩邊的數(shù)據(jù)類型

    2.  調(diào)用虛函數(shù)a.eval(),需要確認(rèn)a的數(shù)據(jù)類型

    3.  確定a的數(shù)據(jù)類型是Int,裝箱

    4.  調(diào)用虛函數(shù)b.eval(),需要確認(rèn)b的數(shù)據(jù)類型

    5.  確定b的數(shù)據(jù)類型是Int,裝箱

    6.  調(diào)用Int類型的Add

    7.  返回裝箱后的計(jì)算結(jié)果

  C:Scala代碼優(yōu)化

   ...............

四、 Spark SQL運(yùn)行架構(gòu)

          Catalyst就SparkSQL核心部分,性能的優(yōu)劣影響整體的性能,由于發(fā)展時(shí)間短,虛線部分是以后版本要實(shí)現(xiàn)功能,實(shí)現(xiàn)部分是已經(jīng)實(shí)現(xiàn)功能。
        Unresolved Logical Plan:未解析的邏輯執(zhí)行計(jì)劃

        Schema Catalog:元數(shù)據(jù)管理套用Unresolved Logical Plan生成Logical Plan

        Logical Plan:生成邏輯執(zhí)行計(jì)劃

        Optimized Logical Plan:對生生成的Logical Plan進(jìn)行優(yōu)化,生成物理邏計(jì)劃
        Physical Plans:物理邏輯計(jì)劃,可能是多個(gè),根據(jù)Cost Model生成最佳的物理邏輯化

以上是“SparkSQL指的是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI