您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“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對象存儲方式。
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
在物理處理這個(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è)資訊頻道!
免責(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)容。