我以为我很了解纱线架构的火花,但现在我想知道:当我推出时
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的服务器上分配?
答案 0 :(得分:2)
这是Spark-1.4.0中修复的错误。请参阅SPARK-3884
答案 1 :(得分:1)
看起来火花提交脚本有一个不好的简化:
elif [ "$1" = "--driver-memory" ]; then
export SPARK_SUBMIT_DRIVER_MEMORY=$2
因此,spark-submit使用驱动程序内存参数值来设置其分配的内存;这在纱线客户模式中是正确的,而不是在纱线集群中。 我通过以下方式替换了这些问题解决了我的问题:
elif [ "$1" = "--spark-submit-memory" ]; then
export SPARK_SUBMIT_DRIVER_MEMORY=$2
所以现在我可以设置(如果需要)分配给spark-submit的内存到一个驱动程序的不同值。