Spark SQL性能調(diào)優(yōu)

2018-11-26 16:33 更新

Spark SQL性能調(diào)優(yōu)

對于某些工作負(fù)載,可以在通過在內(nèi)存中緩存數(shù)據(jù)或者打開一些實驗選項來提高性能。

在內(nèi)存中緩存數(shù)據(jù)

Spark SQL可以通過調(diào)用sqlContext.cacheTable("tableName")方法來緩存使用柱狀格式的表。然后,Spark將會僅僅瀏覽需要的列并且自動地壓縮數(shù)據(jù)以減少內(nèi)存的使用以及垃圾回收的壓力。你可以通過調(diào)用sqlContext.uncacheTable("tableName")方法在內(nèi)存中刪除表。

注意,如果你調(diào)用schemaRDD.cache()而不是sqlContext.cacheTable(...),表將不會用柱狀格式來緩存。在這種情況下,sqlContext.cacheTable(...)是強(qiáng)烈推薦的用法。

可以在SQLContext上使用setConf方法或者在用SQL時運行SET key=value命令來配置內(nèi)存緩存。

Property NameDefaultMeaning
spark.sql.inMemoryColumnarStorage.compressedtrue當(dāng)設(shè)置為true時,Spark SQL將為基于數(shù)據(jù)統(tǒng)計信息的每列自動選擇一個壓縮算法。
spark.sql.inMemoryColumnarStorage.batchSize10000柱狀緩存的批數(shù)據(jù)大小。更大的批數(shù)據(jù)可以提高內(nèi)存的利用率以及壓縮效率,但有OOMs的風(fēng)險

其它的配置選項

以下的選項也可以用來調(diào)整查詢執(zhí)行的性能。有可能這些選項會在以后的版本中棄用,這是因為更多的優(yōu)化會自動執(zhí)行。

Property NameDefaultMeaning
spark.sql.autoBroadcastJoinThreshold10485760(10m)配置一個表的最大大小(byte)。當(dāng)執(zhí)行join操作時,這個表將會廣播到所有的worker節(jié)點??梢詫⒅翟O(shè)置為-1來禁用廣播。注意,目前的統(tǒng)計數(shù)據(jù)只支持Hive Metastore表,命令ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan已經(jīng)在這個表中運行。
spark.sql.codegenfalse當(dāng)為true時,特定查詢中的表達(dá)式求值的代碼將會在運行時動態(tài)生成。對于一些擁有復(fù)雜表達(dá)式的查詢,此選項可導(dǎo)致顯著速度提升。然而,對于簡單的查詢,這個選項會減慢查詢的執(zhí)行
spark.sql.shuffle.partitions200配置join或者聚合操作shuffle數(shù)據(jù)時分區(qū)的數(shù)量
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號