我在用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小时。请为以上情况推荐性能转折点:)
1条答案
按热度按时间k10s72fa1#
在spark中执行性能调优时,需要考虑多种因素。
什么是洗牌分区集?默认情况下,设置为200。你需要把它改成更大的数字。
spark.sql.shuffle.partitions=1000
执行器核心和执行器内存。从描述上看,在我看来,执行者的记忆比较少。更少的内存将触发gc,从而经常减慢spark的执行。试着增加它。你不需要
overwrite
在执行插入时。改用这个。
finalizedDf.write.format("parquet") .insertInto(tableB)