Spark _21 _SparkSQL介绍
Shark
Shark是基于Spark計算框架之上且兼容Hive語法的SQL執(zhí)行引擎,由于底層的計算采用了Spark,性能比MapReduce的Hive普遍快2倍以上,當(dāng)數(shù)據(jù)全部load在內(nèi)存的話,將快10倍以上,因此Shark可以作為交互式查詢應(yīng)用服務(wù)來使用。除了基于Spark的特性外,Shark是完全兼容Hive的語法,表結(jié)構(gòu)以及UDF函數(shù)等,已有的HiveSql可以直接進行遷移至Shark上Shark底層依賴于Hive的解析器,查詢優(yōu)化器,但正是由于SHark的整體設(shè)計架構(gòu)對Hive的依賴性太強,難以支持其長遠(yuǎn)發(fā)展,比如不能和Spark的其他組件進行很好的集成,無法滿足Spark的一棧式解決大數(shù)據(jù)處理的需求。
SparkSQL
- SparkSQL介紹
Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL產(chǎn)生的根本原因是其完全脫離了Hive的限制。
- Spark on Hive和Hive on Spark
Spark on Hive: Hive只作為儲存角色,Spark負(fù)責(zé)sql解析優(yōu)化,執(zhí)行。
Hive on Spark:Hive即作為存儲又負(fù)責(zé)sql的解析優(yōu)化,Spark負(fù)責(zé)執(zhí)行。
- DataFrame
DataFrame也是一個分布式數(shù)據(jù)容器。與RDD類似,然而DataFrame更像傳統(tǒng)數(shù)據(jù)庫的二維表格,除了數(shù)據(jù)以外,還掌握數(shù)據(jù)的結(jié)構(gòu)信息,即schema。同時,與Hive類似,DataFrame也支持嵌套數(shù)據(jù)類型(struct、array和map)。從API易用性的角度上 看, DataFrame API提供的是一套高層的關(guān)系操作,比函數(shù)式的RDD API要更加友好,門檻更低。
DataFrame的底層封裝的是RDD,只不過RDD的泛型是Row類型。
- SparkSQL的數(shù)據(jù)源
SparkSQL的數(shù)據(jù)源可以是JSON類型的字符串,JDBC,Parquent,Hive,HDFS等。
- SparkSQL底層架構(gòu)
首先拿到sql后解析一批未被解決的邏輯計劃,再經(jīng)過分析得到分析后的邏輯計劃,再經(jīng)過一批優(yōu)化規(guī)則轉(zhuǎn)換成一批最佳優(yōu)化的邏輯計劃,再經(jīng)過SparkPlanner的策略轉(zhuǎn)化成一批物理計劃,隨后經(jīng)過消費模型轉(zhuǎn)換成一個個的Spark任務(wù)執(zhí)行。
- 謂詞下推(predicate Pushdown)
總結(jié)
以上是生活随笔為你收集整理的Spark _21 _SparkSQL介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark2.3.0的DataFrame
- 下一篇: Spark _22 _创建DataFra