我在Yarn上运行spark但是我的应用程序在尝试加载大型RDD时仍然会出现Out of Memory Exception,即使我将动态调度设置为true
...
.set("spark.shuffle.service.enabled", "true")
.set("spark.dynamicAllocation.enabled", "true")
.set("spark.default.parallelism", String.valueOf(cpu * 3))
要解决这个问题,我必须指定执行程序内存
...
.set("spark.driver.memory", "5g")
.set("spark.executor.memory", "30g")
.set("spark.shuffle.service.enabled", "true")
.set("spark.dynamicAllocation.enabled", "true")
.set("spark.default.parallelism", String.valueOf(cpu * 3))
```
但不是从Yarn分配所需资源的动态调度的全部内容吗?
答案 0 :(得分:2)
来自documentation on YARN dynamic resource allocation:
在Spark中,动态资源分配是根据执行程序的粒度执行的
这意味着它会启动更多的执行程序,但这并不意味着它会改变单个执行程序的内存量。如果要将更多资源加载到内存中而不是单个执行程序可以处理的内容,那么激活更多资源就不会有任何好处。