在Spark 2.2(通过YARN)中,我试图通过隔夜批处理作业将相当大的数据帧写入HDFS。我们先加入两个源表,然后编写连接结果。输出是压缩的镶木地板,但由于内存不足错误导致写入失败。
我们提供12个执行器,每个执行器有20g内存和4个内核,以及32g的驱动程序。
在像这样的写操作中,内存耗尽了什么?遗嘱执行人?如果没有盲目地投入更多内存,我们可以采取哪些措施来解决这个问题?
加入代码很简单:
joined.write.option("header", "true").parquet(destPath)
以下是一堆“堆转储”垃圾邮件之前的最终日志:
18/06/15 14:25:27 INFO BlockManagerInfo: Added broadcast_1385_piece0 in memory on company02.host.comp.com:43201 (size: 36.8 KB, free: 10.5 GB)
18/06/15 14:25:38 INFO TaskSetManager: Finished task 5982.0 in stage 1008.0 (TID 41953) in 63870 ms on company02.host.comp.com (executor 7) (5979/12136)
18/06/15 14:25:39 INFO TaskSetManager: Finished task 5984.0 in stage 1008.0 (TID 41955) in 65189 ms on company02.host.comp.com (executor 7) (5980/12136)
JVMDUMP039I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" at 2018/06/15 14:25:48 - please wait.