SparkSQL 結構化數據處理流程及原理是什么?Spark SQL 可以使用現有的Hive元存儲、SerDes 和 UDF。它可以使用 JDBC/ODBC 連接到現有的 BI 工具。有了 Spark SQL,用戶可以編寫 SQL 風格的查詢。
Spark SQL 是 Spark 生態系統中處理結構化格式數據的模塊。它在內部使用 Spark Core API 進行處理,但對用戶的使用進行了抽象。這篇文章深入淺出地告訴你 Spark SQL 3.x 的新內容。
這對于精通結構化查詢語言或 SQL 的廣大用戶群體來說,基本上是很有幫助的。用戶也將能夠在結構化數據上編寫交互式和臨時性的查詢。Spark SQL 彌補了彈性分布式數據集RDD和關系表之間的差距。RDD 是 Spark 的基本數據結構。它將數據作為分布式對象存儲在適合并行處理的節點集群中。RDD 很適合底層處理,但在運行時很難調試,程序員不能自動推斷模式schema。另外,RDD 沒有內置的優化功能。Spark SQL 提供了數據幀DataFrame和數據集來解決這些問題。
Spark SQL 可以使用現有的 Hive 元存儲、SerDes 和 UDF。它可以使用 JDBC/ODBC 連接到現有的 BI 工具。
數據源
大數據處理通常需要處理不同的文件類型和數據源(關系型和非關系型)的能力。Spark SQL 支持一個統一的數據幀接口來處理不同類型的源,如下所示。
文件:
CSV
Text
JSON
XML
JDBC/ODBC:
MySQL
Oracle
Postgres
帶模式的文件:
AVRO
Parquet
Hive 表:
Spark SQL 也支持讀寫存儲在 Apache Hive 中的數據。
通過數據幀,用戶可以無縫地讀取這些多樣化的數據源,并對其進行轉換/連接。
Spark SQL 3.x 的新內容
在以前的版本中(Spark 2.x),查詢計劃是基于啟發式規則和成本估算的。從解析到邏輯和物理查詢計劃,最后到優化的過程是連續的。這些版本對轉換和行動的運行時特性幾乎沒有可見性。因此,由于以下原因,查詢計劃是次優的:
1、缺失和過時的統計數據
2、次優的啟發式方法
3、錯誤的成本估計
Spark 3.x 通過使用運行時數據來迭代改進查詢計劃和優化,增強了這個過程。前一階段的運行時統計數據被用來優化后續階段的查詢計劃。這里有一個反饋回路,有助于重新規劃和重新優化執行計劃。
自適應查詢執行(AQE)
查詢被改變為邏輯計劃,最后變成物理計劃。這里的概念是“重新優化”。它利用前一階段的可用數據,為后續階段重新優化。正因為如此,整個查詢的執行要快得多。
動態合并“洗牌”分區
Spark 在“洗牌shuffle”操作后確定最佳的分區數量。在 AQE 中,Spark 使用默認的分區數,即 200 個。這可以通過配置來啟用。
動態切換連接策略
廣播哈希是最好的連接操作。如果其中一個數據集很小,Spark 可以動態地切換到廣播連接,而不是在網絡上“洗牌”大量的數據。
動態優化傾斜連接
如果數據分布不均勻,數據會出現傾斜,會有一些大的分區。這些分區占用了大量的時間。Spark 3.x 通過將大分區分割成多個小分區來進行優化。
其他改進措施
此外,Spark SQL 3.x還支持以下內容。
動態分區修剪
3.x 將只讀取基于其中一個表的值的相關分區。這消除了解析大表的需要。
連接提示
如果用戶對數據有了解,這允許用戶指定要使用的連接策略。這增強了查詢的執行過程。
兼容 ANSI SQL
在兼容 Hive 的早期版本的 Spark 中,我們可以在查詢中使用某些關鍵詞,這樣做是完全可行的。然而,這在 Spark SQL 3 中是不允許的,因為它有完整的 ANSI SQL 支持。例如,“將字符串轉換為整數”會在運行時產生異常。它還支持保留關鍵字。
較新的 Hadoop、Java 和 Scala 版本
從 Spark 3.0 開始,支持 Java 11 和 Scala 2.12。 Java 11 具有更好的原生協調和垃圾校正,從而帶來更好的性能。 Scala 2.12 利用了 Java 8 的新特性,優于 2.11。
Spark 3.x 提供了這些現成的有用功能,而無需開發人員操心。這將顯著提高 Spark 的整體性能。
更多關于大數據培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。