我使用YARN(Hadoop 2.6)作为集群管理器运行Spark。 YARN以伪分布式模式运行。我已经启动了带有6个执行器的spark shell,并期待相同的
spark-shell --master yarn --num-executors 6
但是在Spark Web UI中,我只看到4个执行器
这有什么原因吗?
PS:我在我的Ubuntu(14.04)中运行nproc
命令,结果如下。我相信这意味着,我的系统有8个核心
mountain@mountain:~$ nproc
8
答案 0 :(得分:0)
你是否考虑过spark.yarn.executor.memoryOverhead? 它可能会产生隐藏的记忆需求,最终的纱线无法提供全部资源。 另外,请注意纱线圆形容器尺寸为yarn.scheduler.increment-allocation-mb。 这里所有细节: http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/
答案 1 :(得分:0)
当集群上没有足够的资源来启动更多执行程序时,就会发生这种情况。考虑以下事项
Spark执行程序在纱线容器中运行。此容器大小由yarn-site.xml中的yarn.scheduler.minimum-allocation-mb值确定。检查此属性。如果您的现有容器消耗了所有可用内存,那么更多的内存将无法用于新容器。所以不会有新的执行者开始
UI中的“存储内存”列显示用于执行和RDD存储的内存量。默认情况下,这等于(HEAP_SPACE-300MB)* 75%。其余的内存用于内部元数据,用户数据结构和其他内容。 ref(Spark on YARN: Less executor memory than set via spark-submit)
我希望这会有所帮助。