1.AQE(Adaptive Query Execution)
- 自適應查詢執行
- 默認不開啟,通過設置spark.sql.adaptive.enabled=true開啟
- 主要包括三方面:
- Join策略調整:運行時動態的將原來的Shuffle Join調整為Broadcast Join,依賴Shuffle中間文件的統計信息
- 分區自動合並:通過spark.sql.adaptive.advisoryPartitionSizeInBytes 來直接指定合並后的目標分區大小,spark.sql.adaptive.coalescePartitions.minPartitionNum用來限制Reduce階段在合並后的並行度不能小於該值
- 自動傾斜處理:兩個參數判斷傾斜分區,另一個參數用於拆分傾斜分區,將所有數據分區排序,取中位數作為基數,然后乘以比例系數,得到閾值,分區大於閾值的有可能判定為傾斜分區,同時還要大於最低閾值,才能被判定為傾斜分區
2.DPP(Dynamic Partition Pruning)
- 動態分區裁剪:基於運行時的信息進行分區裁剪,減少數據掃描量、降低I/O開銷等
- 需滿足三個條件:
- 必須是分區表
- 只支持等值join
- 小表過濾之后的數據必須小於廣播閾值