一、Spark SQL介紹
1、為什麼需要SQL
1) 事實上的标準
2) 易學易用
3) 閱聽人面大
2、Shark(已經停止維護,不建議在生産上使用。)
Shark産生的目的就是為了讓hive跑在spark之上。
Hive: 類似于sql的Hive QL語言, sql 翻譯成 mapreduce
特點: 使用mapreduce作為引擎
改進: hive on tez、hive on spark、hive on mapreduce
Spark: hive on spark ===> (也就是)shark
shark剛推出時,很受歡迎。計算速度快,基于spark、基于記憶體的列式存儲,與hive能夠相容。
缺點: hive ql的解析、邏輯執行計劃生成、執行計劃優化都要依賴于hive
僅僅隻是把實體執行計劃從mr作業替換成spark作業。
Shark終止以後,産生了2個分支
1) hive on spark
Hive社群,源碼是在Hive中
2) Spark SQL
Spark社群,源碼是在Spark中
支援多種資料源,多種優化技術,擴充性好很多。
二、SQL on Hadoop常用架構介紹
常用的架構如下圖所示,包括HIVE,Impala,DRILL,Spark,presto,都是基于Hadoop的。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN5YWMkJzMhJzYwUTYjhDM2kzY3U2NzMjM0MTZkVWNk9CX1AzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLzM3Lc9CX6MHc0RHaiojIsJye.png)
1、HIVE(facebook開源)
将sql裝換成mapreduce
提出了metastore(中繼資料)概念,例如Hive表的名字,表裡有什麼列,每個列的資料類型,資料存放在hdfs的路徑上。這些中繼資料,在Spark也能使用。
2、Impala(cloudera公司開發的, hadoop常用版本cdh也是這家公司開發的,也是生産上建議使用的cdh版本)
提供了cm,web方式安裝hadoop。
Impala提供了sql,有自己的守護程序執行的,非mr,基于記憶體的,對記憶體的要求比較高。
metastore(中繼資料)
3、presto (facebook開源)
國内用的比較多的如京東
4、DRILL
基于sql
通路hdfs, rdbms,json、hbase,mangodb,s3、hive
5、Spark SQL
sql
dataframe/dataset api
metastore
通路hdfs, rdbms,json、hbase,mangodb,s3、hive ==> 外部資料源
三、Spark SQL概述
1、Spark Sql是Spark的核心元件,在Spark1.0中開始出現(April 2014)
2、能有運作SQL和Hive QL,包括UDFs UDAFs 和SerDes。
3、通過JDBC的方式連接配接已經存在的BI工具
4、能夠支援多種語言,包括Python,Scala,Java 和R語言。
5、Spark SQL能處理結構化的資料。不僅僅有通路或者操作SQL的功能,還提供了 其他豐富的操作:外部資料源、優化
總結:
1) Spark SQL的應用不局限于SQL
2) 通路hive、json、parquet等檔案資料
3) SQL隻是Spark SQL的一個功能而已。
4) Spark SQL提供了SQL的api、DataFrame和Dataset的API。
四、Spark SQL願景
Write less code: 寫更少的代碼
Read less data: 讀更少的資料(優化引擎去掉不必要的資料)
Let the optimizer do the hard work: 将優化的工作交給底層的優化器。