我们在YARN集群中运行的Scala中编写了Spark 2.2作业,该作业执行以下操作:
以下配置通过java.lang.OutOfMemory java堆空间失败:
但是,如果我们完全删除 spark.executor.memory ,此工作将可靠地工作。这会给每个执行者1克ram。
如果我们执行以下任一操作,则此作业也会失败:
有人可以帮助我理解为什么由于内存不足而导致更多的内存和更多的执行程序导致作业失败吗?
答案 0 :(得分:0)
手动设置这些参数将禁用dynamic allocation。建议您不要尝试,因为它是建议初学者使用的。在您在PROD设置中微调群集大小之前,它对于实验也很有用。
在Spark上添加更多的内存/执行程序似乎是一个好主意,但在您的情况下,这可能会导致额外的改组和/或降低HDFS I / O吞吐量。该article稍有过时并针对Cloudera用户,它说明了如何通过调整执行程序的大小来调整并行性。