SparkSQL调优
1、執(zhí)行計(jì)劃(過往記憶https://www.iteblog.com/archives/2562.html)
df.explain(true)//顯示邏輯計(jì)劃和物理計(jì)劃,不加true只顯示物理計(jì)劃2、邏輯計(jì)劃優(yōu)化方法:
謂詞下推,列裁剪,常量替換,常量累加
?
3、優(yōu)化方法
數(shù)據(jù)源方面:
1、hive 使用parquet格式,不要用textfile。列式存儲(chǔ)便于查詢引擎做謂詞下推、更優(yōu)的壓縮算法(不同列可以采取不同的壓縮算法)減少IO,塊遍歷等優(yōu)化方法。
2、Kafka根據(jù)key的hash值分區(qū),OGG到Kafka 表名作為key,因此不同大小的表可以更改表名,均衡分到不同partition。
sparkSQL程序方面(spark優(yōu)化):
1、多次用到的表,做cache。默認(rèn)進(jìn)行壓縮。
spark.sql.inMemoryColumnarStorage.compressed //默認(rèn)為true,為每個(gè)列選擇壓縮方式 spark.sql.inMemoryColumnarStorage.batchSize //默認(rèn)為10000 byte 控制列緩存的批量大小。批次大有助于改善內(nèi)存使用和壓縮,但是緩存數(shù)據(jù)會(huì)有OOM的風(fēng)險(xiǎn)2、小于10M的表會(huì)自動(dòng)broadcast,走broadcast join,調(diào)高廣播表的大小,使其走broadcast join ,但是太大有可能driver端OOM,-1為禁止自動(dòng)廣播。
當(dāng)使用的外部變量較大時(shí),也可把外部變量作為廣播變量進(jìn)行廣播。
spark.sql.autoBroadcastJoinThreshold //默認(rèn)10485760 (10 MB)val listBrodcast = spark.sparkContext.broadcast(list)
3、sparkSQL shuffle read partition默認(rèn)為200,提高可解決部分?jǐn)?shù)據(jù)傾斜問題。
spark.sql.shuffle.partitions //默認(rèn)2004、讀不可分割的文件,一個(gè)文件一個(gè)partition,若小文件過多,影響效率,設(shè)置多個(gè)文件寫入一個(gè)分區(qū)
spark.sql.files.openCostInBytes //默認(rèn)4194304 (4 MB),打開一個(gè)文件的時(shí)間可讀取4MB數(shù)據(jù),因此小于4M的文件讀入一個(gè)分區(qū)(待驗(yàn)證) spark.sql.files.maxPartitionBytes //默認(rèn)134217728 (128 MB),文件傳入一個(gè)分區(qū)里的最大字節(jié)數(shù)?5、使用高效的算子
1、reduceByKey/aggregateByKey代替groupByKey//前者partition內(nèi)部會(huì)進(jìn)行預(yù)聚合,后者不進(jìn)行預(yù)聚合直接全局shuffle 2、mapPartitions代替map,foreachpartitions 代替foreach//前者會(huì)一次性讀取整個(gè)partition的數(shù)據(jù)進(jìn)行處理,比如建立數(shù)據(jù)庫(kù)連接在foreachpartitions中,不要在foreach 3、filter之后coallease6、修改序列化器為kryo,并注冊(cè)序列化類
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")conf.registerKryoClasses(Array(classOf[MyClass1],?classOf[MyClass2])
?7、join方式(https://www.cnblogs.com/suanec/p/7560399.html)
轉(zhuǎn)載于:https://www.cnblogs.com/csyusu/p/11048383.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的SparkSQL调优的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真正的maven私服搭建器--Artif
- 下一篇: 用java连接Excel和SQLite3