一.sparkSQL發展歷程及定義
1.發展歷程
Hive——>shark(Hive on Spark)-->SparkSQL
2.官方定義
(1)處理結果化數據的spark模塊
什麼是結果化數據???
包含列名 + 列值 + 列類型的數據
(2)提供了一個分佈式數據處理抽象:DataFrame
(3)提供一個分佈式sql引擎
3.開發願景
寫更少的代碼
讀更少的數據
做最大的優化
二.sparkSQL和shark的區別
shark:
完全依賴hive和spark:
依賴hive的hql解析模塊
依賴hihve的元數據管理
依賴spark的rdd的操作
問題:
shark的版本迭代依賴hive和spark的版本迭代
shark的後期的代碼維護和優化比較困難
sparkSQL:
catalyst:hql解析模塊
先產生邏輯計劃,然後再產生物理計劃
SparkSQL1.x:對於訪問hive中的數據,需要依賴hive的metastore服務
SparkSQL2.x:完全不需要依賴hive的metastore服務
DataFrame是SparkSQL中的主要抽象,是一個核心
三.SparkSQL和hive的區別
1.和Hive的比較
支持UDF、UDAF的創建
是一個庫,而不是一個框架
元數據管理可選
支持兩種方式獲取數據:
HQL/SQL
DSL(Domain Specific Language)
提供了Hive Thrift Server(基於hiveserver2服務)
提交JDBC/ODBC連接
2.已有的BI報表可以通過spark提供的jdbc接口獲取spark中的數據
3.可以支持多種語言
四.Spark和Hive的集成
1.要求Spark的編譯支持hive:
-Phive -Phive-thriftserver
2.配置相關參數
cd /opt/cdh-5.3.6/spark/conf
創建hive-site.xml的軟連接
ln -s /opt/cdh-5.3.6/hive/conf/hive-site.xml
或者將hive-site.xml複製到spark的conf文件夾中
3.根據hive的配置參數不同,採用不同的步驟:
參數是:hive.metastore.uris
(1)給定該參數的值
啓動hive的metastore服務
cd /opt/cdh-5.3.6/hive/
bin/hive --service metastore &
## 看到Starting Hive Metastore Server,表示成功
(2)如果沒有給定該參數的中,默認情況
在hive-site.xml中必須給定元數據管理庫的driver、url、username和pasword,將對應數據庫的驅動添加到spark的classpath中
4.直接運行spark/bin/spark-sql的即可
bin/spark-sql ## hive中能夠執行的hql語句在這裏都可以執行
5.運行bin/spark-shell