溫馨提示×

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

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

如何理解 SQL及Thrift

發(fā)布時(shí)間:2021-11-23 15:01:29 來(lái)源:億速云 閱讀:215 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)如何理解 SQL及Thrift,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

1

Hive SQL &Spark SQL

這是一個(gè)復(fù)雜的歷史,基本上是一個(gè)“忒修斯船”(Ship of Theseus)的故事。最開始的時(shí)候,Spark SQL的代碼幾乎全部都是Hive的照搬,隨著時(shí)間的推移,Hive的代碼被逐漸替換,直到幾乎沒有原始的Hive代碼保留。

參考:https://en.wikipedia.org/wiki/Ship_of_Theseus

Spark最開始打包的是Shark和SharkServer(Spark和Hive的結(jié)合體)。那個(gè)時(shí)候,這個(gè)結(jié)合體包含了大量的Hive代碼。SharkServer就是Hive,它解析HiveQL,在Hive中進(jìn)行優(yōu)化,讀取Hadoop的輸入格式,到最后Shark甚至在Spark引擎上運(yùn)行Hadoop風(fēng)格的MapReduce任務(wù)。這一點(diǎn)在當(dāng)時(shí)來(lái)說(shuō)其實(shí)很酷的,因?yàn)樗峁┝艘环N無(wú)需進(jìn)行任何編程就能使用Spark的方式,HQL做到了。不幸的是,MapReduce和Hive并不能完全融入Spark生態(tài)系統(tǒng),2014年7月,社區(qū)宣布Shark的開發(fā)在Spark1.0的時(shí)終止,因?yàn)镾park開始轉(zhuǎn)向更多Spark原生的SQL表達(dá)式。同時(shí)社區(qū)將重心轉(zhuǎn)向原生的Spark SQL的開發(fā),并且對(duì)已有的Hive用戶提供過(guò)渡方案Hive on Spark來(lái)進(jìn)行將Hive作業(yè)遷移到Spark引擎執(zhí)行。

參考:https://github.com/amplab/shark/wiki/Shark-User-Guidehttps://databricks.com/blog/2014/07/01/shark-spark-sql-hive-on-spark-and-the-future-of-sql-on-spark.html

Spark引入SchemaRDDs,Dataframes和DataSets來(lái)表示分布式數(shù)據(jù)集。有了這些,一個(gè)名為Catalyst的全新Spark原生優(yōu)化引擎引入到Spark,它是一個(gè)Tree Manipulation Framework,為從GraphFrames到Structured Streaming的所有查詢優(yōu)化提供依據(jù)。Catalyst的出現(xiàn)意味著開始丟棄MapReduce風(fēng)格的作業(yè)執(zhí)行,而是可以構(gòu)建和運(yùn)行Spark優(yōu)化的執(zhí)行計(jì)劃。此外,Spark發(fā)布了一個(gè)新的API,它允許我們構(gòu)建名為“DataSources”的Spark-Aware接口。DataSources的靈活性結(jié)束了Spark對(duì)Hadoop輸入格式的依賴(盡管它們?nèi)允苤С郑?。DataSource可以直接訪問Spark生成的查詢計(jì)劃,并執(zhí)行謂詞下推和其他優(yōu)化。

Hive Parser開始被Spark Parser替代,Spark SQL仍然支持HQL,但語(yǔ)法已經(jīng)大大擴(kuò)展。Spark SQL現(xiàn)在可以運(yùn)行所有TPC-DS查詢,以及一系列Spark特定的擴(kuò)展。(在開發(fā)過(guò)程中有一段時(shí)間你必須在HiveContext和SqlContext之間進(jìn)行選擇,兩者都有不同的解析器,但我們不再討論它了。今天所有請(qǐng)求都以SparkSession開頭)?,F(xiàn)在Spark幾乎沒有剩下Hive代碼。雖然Sql Thrift Server仍然構(gòu)建在HiveServer2代碼上,但幾乎所有的內(nèi)部實(shí)現(xiàn)都是完全Spark原生的。

2

Spark Thrift Server介紹

Thrift Server是Spark提供的一種JDBC/ODBC訪問Spark SQL的服務(wù),它是基于Hive1.2.1的HiveServer2實(shí)現(xiàn)的,只是底層的SQL執(zhí)行改為了Spark,同時(shí)是使用spark submit啟動(dòng)的服務(wù)。同時(shí)通過(guò)Spark Thrift JDBC/ODBC接口也可以較為方便的直接訪問同一個(gè)Hadoop集群中的Hive表,通過(guò)配置Thrift服務(wù)指向連接到Hive的metastore服務(wù)即可。

如何理解 SQL及Thrift

參考:http://spark.apache.org/docs/latest/sql-distributed-sql-engine.html#running-the-thrift-jdbcodbc-server

如何理解 SQL及Thrift

3

Spark Thrift的缺陷

1.不支持用戶模擬,即Thrift Server并不能以提交查詢的用戶取代啟動(dòng)Thrift Server的用戶來(lái)執(zhí)行查詢語(yǔ)句,具體對(duì)應(yīng)到Hive的hive.server2.enable.doAs參數(shù)不支持。參考:

https://issues.apache.org/jira/browse/SPARK-5159https://issues.apache.org/jira/browse/SPARK-11248https://issues.apache.org/jira/browse/SPARK-21918

2.因?yàn)樯鲜龅谝稽c(diǎn)不支持用戶模擬,導(dǎo)致任何查詢都是同一個(gè)用戶,所有沒辦法控制Spark SQL的權(quán)限。

3.單點(diǎn)問題,所有Spark SQL查詢都走唯一一個(gè)Spark Thrift節(jié)點(diǎn)上的同一個(gè)Spark Driver,任何故障都會(huì)導(dǎo)致這個(gè)唯一的Spark Thrift節(jié)點(diǎn)上的所有作業(yè)失敗,從而需要重啟Spark Thrift Server。

4.并發(fā)差,上述第三點(diǎn)原因,因?yàn)樗械牟樵兌家ㄟ^(guò)一個(gè)Spark Driver,導(dǎo)致這個(gè)Driver是瓶頸,于是限制了Spark SQL作業(yè)的并發(fā)度。

因?yàn)橐陨舷拗?,主要是安全性上的(即上面描述的第一和第二點(diǎn)),所以CDH的企業(yè)版在打包Spark的時(shí)候?qū)park Thrift服務(wù)并沒有打包。如果用戶要在CDH中使用Spark Thrift服務(wù),則需要自己打包或單獨(dú)添加這個(gè)服務(wù),但Cloudera官方并不會(huì)提供支持服務(wù)??梢詤⒖既缦耲ira:

https://issues.cloudera.org/browse/DISTRO-817

關(guān)于Spark Thrift的缺陷,也可以參考網(wǎng)易的描述:

如何理解 SQL及Thrift

所以網(wǎng)易才自己做了一個(gè)Thrift服務(wù)取名Kyuubi,F(xiàn)ayson在后面的文章中會(huì)用到,參考:

http://blog.itpub.net/31077337/viewspace-2212906/

4

Spark Thrift在現(xiàn)有CDH5中的使用

從CDH5.10到最新的CDH5.16.1,都支持同時(shí)安裝Spark1.6以及最新的Spark2.x,Spark2具體包含從Spark2.0到最新的Spark2.4都可以安裝到CDH5中。具體可以參考Cloudera官網(wǎng)的說(shuō)明:

https://www.cloudera.com/documentation/spark2/latest/topics/spark2_requirements.html#cdh_versions

如何理解 SQL及Thrift

在CDH5中通過(guò)自己?jiǎn)为?dú)安裝的方式運(yùn)行Thrift服務(wù)現(xiàn)在已經(jīng)調(diào)通并在使用的是如下版本組合:

1.在CDH5中安裝Spark1.6的Thrift服務(wù),參考《0079-如何在CDH中啟用Spark Thrift》

2.在CDH5中安裝Spark2.1的Thrift服務(wù),參考《0280-如何在Kerberos環(huán)境下的CDH集群部署Spark2.1的Thrift及spark-sql客戶端》

如何理解 SQL及Thrift

從Spark2.2開始到最新的Spark2.4,因?yàn)樽兓^大,不能夠采用上述兩種辦法直接替換jar包的方式實(shí)現(xiàn),更多的依賴問題導(dǎo)致需要重新編譯或者修改更多的東西才能在CDH5中使用最新的Spark2.4的Thrift。

看完上述內(nèi)容,你們對(duì)如何理解 SQL及Thrift有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

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

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

AI