apachespark性能调优

nbnkbykc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(413)

我在用upsert(insert&updaterecords)逻辑将4mb文件加载到配置单元表时遇到性能问题。作为负载的一部分,我们有两个阶段-
阶段1-将4mb文本文件加载到表a
第2阶段-通过从表a中排除不在“”中的源代码来加载表b,表a返回大约600万条记录

val finalizedDf= sparkSession.sql(s"""select * from $tableA where $source_code not in ("ABC")""")

finalizedDf.write.format("parquet").mode("Overwrite").insertInto(tableB)

在插入表b时,由于内存限制超过executor memoryoverhead,作业失败。此外,负载运行超过5小时。请为以上情况推荐性能转折点:)

k10s72fa

k10s72fa1#

在spark中执行性能调优时,需要考虑多种因素。
什么是洗牌分区集?默认情况下,设置为200。你需要把它改成更大的数字。 spark.sql.shuffle.partitions=1000 执行器核心和执行器内存。从描述上看,在我看来,执行者的记忆比较少。更少的内存将触发gc,从而经常减慢spark的执行。试着增加它。
你不需要 overwrite 在执行插入时。
改用这个。 finalizedDf.write.format("parquet") .insertInto(tableB)

相关问题