SparkSQL 調(diào)優(yōu)

對(duì)一些SparkSQL任務(wù),可以通過(guò)緩存數(shù)據(jù)、調(diào)優(yōu)參數(shù)、增加并行度提升性能

緩存數(shù)據(jù)
sqlContext.cacheTable("tableName")或dataFrame.cache()構(gòu)建一個(gè)內(nèi)存中的列格式緩存
使用sqlContext.uncacheTable("tableName")移除緩存

緩存設(shè)置
可以通過(guò)sqlContext.setConf或在SQL中運(yùn)行SET key=value
setConf("spark.sql.inMemoryColumnarStorage.compressed","true") ,為每列自動(dòng)選擇壓縮碼
setConf("spark.sql.inMemoryColumnarStorage.batchSize","1000") ,列式緩存的批處理大小,大批量可以提升內(nèi)存使用率和壓縮了,但是緩存是會(huì)有溢出風(fēng)險(xiǎn)

調(diào)優(yōu)參數(shù)

參數(shù) 默認(rèn)值 解釋
spark.sql.autoBroadcastJoinThreshold 10485760(10M) Join操作時(shí),要被廣播的表的最大字節(jié)數(shù),-1為禁止廣播
spark.sql.tungsten.enabled true 開(kāi)啟tungsten優(yōu)化
spark.sql.shuffle.partitions 200 shuffle數(shù)據(jù)時(shí),可用分區(qū)數(shù)
spark.sql.planner.externalSort true 根據(jù)需要執(zhí)行Sort溢出到磁盤上,否則在每個(gè)分區(qū)內(nèi)存中

增加并行度
Spark采用內(nèi)存列式存儲(chǔ),實(shí)際執(zhí)行查詢效率很高,相對(duì)而言數(shù)據(jù)加載階段耗時(shí)較長(zhǎng),合理設(shè)置并行度提升文件加載效率

Spark的并行度指的是什么?
spark作業(yè)中,各個(gè)stage的task的數(shù)量,也就代表了spark作業(yè)在各個(gè)階段stage的并行度

如何提高并行度?
可以參考Spark調(diào)優(yōu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容