0

我正在尝试使用 partition by 将 spark 数据帧写入 hdfs。

但它抛出java堆空间错误。

下面是集群配置和我的spark配置。

集群配置:

5 nodes
No of cores/node: 32 cores
RAM/Node: 252GB 

火花配置:

spark.driver.memory = 50g
spark.executor.cores = 10
spark.executor.memory = 40g

df_final 是通过读取 avro 文件并进行一些转换来创建的(非常简单的转换,如列拆分和添加具有默认值的新列)

源文件大小在15M左右

df_final.count() = 361016

在将最终的 df 写入 hdfs 时,我遇到了 java 堆空间错误:

df_final.write.partitionBy("col A", "col B", "col C", "col D").mode("append").format("orc").save("output")

我什至尝试使用 spark 动态配置:

spark.dynamicAllocation.enabled = 'true'
spark.shuffle.service.enabled = 'true'

仍然有 java 堆空间错误。

我什至尝试编写没有分区的 df,但它仍然因 java 堆空间错误或 GC 开销错误而失败。

这是我遇到 java 堆空间错误的确切阶段:

WARN TaskSetManager: Stage 30 contains a task of very large size (16648KB). The maximum recommended task size is 100 KB

如何微调我的 spark 配置以避免这个 java head space 问题?

4

0 回答 0