Spark SQL Configuration and Performance Tuning
Configuration Properties
- Spark SQL Performance Tuning
- 下面列出需要關注的屬性,以及其對應的Spark source code
- Spark source code: org.apache.spark.sql.internal.SQLConf.scala
- buildConf指出可以透過–conf傳入的屬性名稱,例如–conf spark.sql.sources.default
- createWithDefault指出屬性的預設值
- DEFAULT_DATA_SOURCE_NAME
- 在Load或Save外部數據源時所使用的格式
|
|
- COMPRESS_CACHED
- Columnar存儲壓縮是否進行壓縮
|
|
- COLUMN_BATCH_SIZE
- Columnar緩存的每個批次處理多少數據
|
|
- IN_MEMORY_PARTITION_PRUNING
- Columnar table是否支持分區裁減(Partition pruning)
|
|
- PREFER_SORTMERGEJOIN
- 是否優先採用Sort merge join
|
|
- AUTO_BROADCASTJOIN_THRESHOLD
- Broadcast join的閾值
|
|
- SHUFFLE_PARTITIONS
- Join或Aggregation操作進行shuffle步驟時,預設的Partition數量
|
|
- CASE_SENSITIVE
- Query語句分析時是否區分大小寫
|
|
- PARQUET_SCHEMA_MERGING_ENABLED
- 當外部數據源為Parquet時,是否支持Schema合併
- 建議關閉
|
|
- PARQUET_COMPRESSION
- 寫出Parquet格式時所採用的Codec
- 預設值snappy的壓縮比例較低(CPU耗費較小),輸出的檔案較大(存儲空間較大),會導致無法進行分片,並且對整體性能造成影響
|
|
- PARQUET_FILTER_PUSHDOWN_ENABLED
- Parquet是否支持Pushdown
|
|
- ORC_FILTER_PUSHDOWN_ENABLED
- ORC是否支持Pushdown
- 預設值要特別注意
|
|
- HIVE_METASTORE_PARTITION
- Metastore是否支持分區裁減(Partition pruning)
- Metastore儲存在MySQL當中,一個分區就是一個紀錄,如果分區很多會導致Metadata查詢效率極低
- 若為True,會將分區Pushdown到Hive的Metastore(MySQL)中,將沒有被匹配到Partition可以提早被過濾,提升查詢效率,否則需要將所有Partition查完
|
|
- COLUMN_NAME_OF_CORRUPT_RECORD
- JSON或CSV當字段解析失敗時,會放入的Column
|
|
- THRIFTSERVER_UI_SESSION_LIMIT
- thriftserver UI上最多保留多少Session
|
|
- CONVERT_CTAS
- 是否支持Hive中的CTAS
|
|
- CROSS_JOINS_ENABLED
- 是否支持Cross join(迪卡爾積)
|
|
Knowledge is a city to building of which every human-been bring a stone