Yarn上的Spark:在客户端检查驱动程序内存



我原以为我很了解纱线架构上的火花,但现在我想知道:当我启动时

spark-submit --master yarn-cluster --class     com.domain.xxx.ddpaction.DdpApp --num-executors 24 --deploy-mode cluster --driver-memory 4g --executor-memory 2g --executor-cores 1 --conf "spark.yarn.jar=/spark/lib/spark-assembly-1.1.0-hadoop2.4.0.jar" ddpaction-3.1.0.jar yarn-cluster config.yml

失败

# Native memory allocation (malloc) failed to allocate 2863333376 bytes for committing reserved memory

我启动spark-submit的服务器的可用内存不足2GB,这会导致错误,但驱动程序应该执行的资源管理器的驱动程序内存参数远远超过4GB。在我的理解中,驱动程序内存值只应该在资源管理器中的纱线集群上检查和分配,为什么会在以纱线集群模式启动spark-submit的服务器上分配?

这是Spark-1.4.0中修复的一个错误。请参阅Spark-3884

在spark-submit脚本中似乎有一个糟糕的简化:

elif [ "$1" = "--driver-memory" ]; then
    export SPARK_SUBMIT_DRIVER_MEMORY=$2

因此,spark-submit使用驱动程序内存参数值来设置其分配的内存;这只适用于yarn客户端模式,而不适用于yarm集群。我解决了我的问题,将这些线路替换为:

elif [ "$1" = "--spark-submit-memory" ]; then
    export SPARK_SUBMIT_DRIVER_MEMORY=$2

所以现在我可以设置(如果需要的话)分配给spark-submit的内存为一个不同值的驱动程序。

相关内容

  • 没有找到相关文章