我正在尝试使用 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 问题?