2021年大数据Spark(二十三):SparkSQL 概述
目錄
SparkSQL 概述
前世今生
Shark 框架-淘汰了
SparkSQL?模塊
Hive 與 SparkSQL
官方定義
?第一、針對結構化數據處理,屬于Spark框架一個部分
?第二、抽象數據結構:DataFrame
?第三、分布式SQL引擎,類似Hive框架
SparkSQL 特性
?第一、易整合
?第二、統一的數據訪問
?第三、兼容Hive
?第四、標準的數據連接
?
SparkSQL 概述
Spark SQL允許開發人員直接處理RDD,同時可以查詢在Hive上存儲的外部數據。Spark SQL的一個重要特點就是能夠統一處理關系表和RDD,使得開發人員可以輕松的使用SQL命令進行外部查詢,同時進行更加復雜的數據分析。
前世今生
?????SparkSQL模塊一直到Spark 2.0版本才算真正穩定,發揮其巨大功能,發展經歷如下幾個階段。
?
?
Shark 框架-淘汰了
首先回顧SQL On Hadoopp框架:Hive(可以說Hive時大數據生態系統中第一個SQL框架),架構如下所示:
?
可以發現Hive框架底層就是MapReduce,所以在Hive中執行SQL時,往往很慢很慢。
?
Spark出現以后,將HiveQL語句翻譯成基于RDD操作,此時Shark框架誕生了。
?
Spark SQL的前身是Shark,它發布時Hive可以說是SQL on Hadoop的唯一選擇(Hive負責將SQL編譯成可擴展的MapReduce作業),鑒于Hive的性能以及與Spark的兼容,Shark由此而生。Shark即Hive on Spark,本質上是通過Hive的HQL進行解析,把HQL翻譯成Spark上對應的RDD操作,然后通過Hive的Metadata獲取數據庫里表的信息,實際為HDFS上的數據和文件,最后有Shark獲取并放到Spark上計算。
但是Shark框架更多是對Hive的改造,替換了Hive的物理執行引擎,使之有一個較快的處理速度。然而不容忽視的是Shark繼承了大量的Hive代碼,因此給優化和維護帶來大量的麻煩。為了更好的發展,Databricks在2014年7月1日Spark Summit上宣布終止對Shark的開發,將重點放到SparkSQL模塊上。
文檔:https://databricks.com/blog/2014/07/01/shark-spark-sql-hive-on-spark-and-the-future-of-sql-on-spark.html
?
SparkSQL模塊主要將以前依賴Hive框架代碼實現的功能自己實現,稱為Catalyst引擎。
Catalyst: SQL翻譯器
?
SparkSQL?模塊
?????從Spark框架1.0開始發布SparkSQL模塊開發,直到1.3版本發布SparkSQL Release版本可以在生產環境使用,此時數據結構為DataFrame = RDD + Schame。
?1)、解決的問題
Spark SQL 執行計劃和優化交給優化器 Catalyst;
內建了一套簡單的SQL解析器,可以不使用HQL;
還引入和 DataFrame 這樣的DSL API,完全可以不依賴任何 Hive 的組件;
?2)、新的問題
對于初期版本的SparkSQL,依然有挺多問題,例如只能支持SQL的使用,不能很好的兼容命令式,入口不夠統一等;
SparkSQL 在 1.6 時代,增加了一個新的API叫做 Dataset,Dataset 統一和結合了 SQL 的訪問和命令式 API 的使用,這是一個劃時代的進步。在 Dataset 中可以輕易的做到使用 SQL 查詢并且篩選數據,然后使用命令式 API 進行探索式分析。
Spark 2.x發布時,將Dataset和DataFrame統一為一套API,以Dataset數據結構為主(Dataset = RDD + Schema),其中DataFrame = Dataset[Row]。
?
?
???????Hive 與 SparkSQL
從SparkSQL模塊前世今生可以發現,從Hive框架衍生逐漸發展而來,Hive框架提供功能SparkSQL幾乎全部都有,并且SparkSQL完全兼容Hive,從其加載數據進行處理。
?
Hive是將SQL轉為MapReduce,SparkSQL可以理解成是將SQL解析成RDD + 優化再執行。
?
???????官方定義
SparkSQL模塊官方定義:針對結構化數據處理Spark Module模塊。
?
主要包含三層含義:
?
?第一、針對結構化數據處理,屬于Spark框架一個部分
結構化數據:一般指數據有固定的 Schema(約束),例如在用戶表中,name 字段是 String 型,那么每一條數據的 name 字段值都可以當作 String 來使用;
半結構化數據
?
[{"name": "jack","tel": "1388888888",},{"name": "jack","tel": "1388888888","age":18},{"name": "jack","tel": "1388888888","age": "18"}]
?
?
schema信息,包含字段的名稱和字段的類型;
?
?第二、抽象數據結構:DataFrame
將要處理的結構化數據封裝在DataFrame中,來源Python數據分析庫Pandas和R語言dataframe;
DataFrame = RDD + Schema信息;
?
?第三、分布式SQL引擎,類似Hive框架
從Hive框架繼承而來,Hive中提供bin/hive交互式SQL命令行及HiveServer2服務,SparkSQL都可以;
Spark SQL模塊架構示意圖如下:
?
???????SparkSQL 特性
Spark SQL是Spark用來處理結構化數據的一個模塊,主要四個特性:
?
?第一、易整合
可以使用Java、Scala、Python、R等語言的API操作。
?
?第二、統一的數據訪問
?
????連接到任何數據源的方式相同。
?
?第三、兼容Hive
????支持Hive HQL的語法,兼容hive(元數據庫、SQL語法、UDF、序列化、反序列化機制)。
?
?第四、標準的數據連接
可以使用行業標準的JDBC或ODBC連接。
?
SparkSQL模塊官方文檔:http://spark.apache.org/docs/2.4.5/sql-programming-guide.html
總結
以上是生活随笔為你收集整理的2021年大数据Spark(二十三):SparkSQL 概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Spark(二十二):内
- 下一篇: 2021年大数据Spark(二十五):S