SparkSQL中的兩種Optimizer_Catalyst與Tungsten記憶體優化

https://www.learntospark.com/2020/02/spark-sql-catalyst-optimizer.html





 Spark SQL 支援基於規則基於成本的查詢優化。(以下先名詞解說這兩個定義差異)
  • Rule-Based Optimization 代表著 How to run the SQL query
    (比方:一個表是否有使用到Index、檢查一個查詢是否僅包含所需的欄位。)
  • Cost-Based Optimization 代表著 當一個query執行時所需耗費多少時間跟memory。
    (例如:基於查詢消耗的時間和記憶體來衡量和計算成本。)

Catalyst
  • 也稱為 Catalyst Optimizer,是 Spark SQL 內置的基於規則的查詢優化器。
  • 基於 Scala 函數式編程構造。
  • Catalyst 優化器選擇會以最低耗時和記憶體消耗較少的查詢路徑評估。
  • 開發人員可以通過添加數據源特定的規則和支持新數據類型來擴展優化器。
  • Catalyst Optimizer 背後使用一種樹狀數據結構並提供數據樹規則集。
  • 在基於規則的優化期間,SQL 優化器遵循預定義的規則,確定如何運行 SQL 查詢。
  • Catalyst 執行以下四個高階任務或階段: 分析、邏輯優化、物理規劃和代碼生成。(Analysis, logistical optimization, physical planning, and code generation)


Catalyst 將 SQL 查詢轉換為抽象語法樹,以便進一步優化
Apache Spark Catalyst SQL 優化器中的示例樹



https://bigdataschool.ru/blog/spark-sql-catalyst-ast-query-plans.html



Tungsten 
  • 優化了基礎硬件的性能,著重於 CPU 性能而非 IO。
    (要知道Java 最初是為交易型應用程序設計的。) 
  • Tungsten 旨在通過一種更適合於數據處理的方法來提高 CPU 和 記憶體性能,讓 JVM 處理數據。 
  • 為了達到最佳的 CPU 性能,Tungsten 應用以下能力:
    Tungsten 明確管理記憶體,不依賴於 JVM object model或garbage collection。
    Tungsten 創建了易於安排且更安全的「緩存友好型數據結構」 (cache-friendly),使用基於 STRIDE-based記憶體訪問而非隨機記憶體訪問。
    支援按需(on-demand) JVM byte code 產生。
    Tungsten 不啟用「虛擬函數分派」(virtual function dispatches),減少多次 CPU 調用。
    Tungsten 將「中間數據」(intermediate data)放置在 CPU registers中,並啟用「循環展開」(loop unrolling)。



Q1.Which of the following is a feature of Tungsten?

Generates an optimized physical query plan from the logical query plan
(O)Utilizes CPU registers for storing intermediate data
Depends on the JVM object model
Enhances security by restricting developers from adding data source-specific rules



Q2.While adhering to best practices, in what order does a typical data engineer perform operations on Apache Spark?

Read, analyze, transform, load, and write
(O)Analyze, read, transform, load, and write
Analyze, read, load, transform, and write
Read, analyze, load, transform, and write

Read, analyze, transform, load, and write is the order in which a typical data engineer performs Extract, Transform, and Load (ETL) operations on Apache Spark.





Ref:
Cost-Based Optimizer in Apache Spark 2.2 Ron Hu, Sameer Agarwal, Wenchen Fan and Zhenhua Wang
https://www.slideshare.net/slideshow/costbased-optimizer-in-apache-spark-22-ron-hu-sameer-agarwal-wenchen-fan-and-zhenhua-wang/76949857

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題