Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 为什么vcore总是等于Spark on纱线中的节点数?_Apache Spark_Yarn - Fatal编程技术网

Apache spark 为什么vcore总是等于Spark on纱线中的节点数?

Apache spark 为什么vcore总是等于Spark on纱线中的节点数?,apache-spark,yarn,Apache Spark,Yarn,我有一个Hadoop集群,它有5个节点,每个节点有12个内核和32GB内存。我使用纱线作为MapReduce框架,因此我对纱线有以下设置: 纱线.nodemanager.resource.cpu vcores=10 warn.nodemanager.resource.memory mb=26100 然后,我的纱线簇页面()上显示的簇指标显示VCores总数为40。这很好 然后我在上面安装了Spark,并在客户机模式下使用Spark shell 我使用以下配置运行了一个Spark作业: --

我有一个Hadoop集群,它有5个节点,每个节点有12个内核和32GB内存。我使用纱线作为MapReduce框架,因此我对纱线有以下设置:

  • 纱线.nodemanager.resource.cpu vcores=10
  • warn.nodemanager.resource.memory mb=26100
然后,我的纱线簇页面()上显示的簇指标显示VCores总数为40。这很好

然后我在上面安装了Spark,并在客户机模式下使用Spark shell

我使用以下配置运行了一个Spark作业:

  • --驱动器存储器20480m
  • --执行器存储器20000m
  • --num执行者4
  • --执行器核心10
  • --形态spark.warn.am.cores=2
  • --conf spark.warn.executor.memoryOverhead=5600
我将--executor内核设置为10,-num executors设置为4,所以从逻辑上讲,应该总共使用40个vCore。但是,在Spark作业开始运行后,当我查看相同的纱线簇页面时,只使用了4个vCore,总共4个vCore

capacity scheduler.xml
中有一个参数,名为
warn.scheduler.capacity.resource calculator

用于比较计划程序中资源的ResourceCalculator实现。默认值,即DefaultResourceCalculator仅使用内存,而DominantResourceCalculator使用主资源比较多维资源,如内存、CPU等

然后我将该值更改为
DominantResourceCalculator

但是,当我重新启动Thread并运行相同的Spark应用程序时,我仍然得到了相同的结果,比如说集群指标仍然告诉我使用的VCores是4!我还使用htop命令检查了每个节点上的CPU和内存使用情况,我发现没有一个节点的10个CPU核心都被完全占用。原因可能是什么


我还尝试以细粒度方式运行相同的Spark作业,例如使用
--num executors 40--executor cores 1
,通过这种方式,我再次检查了每个工作节点上的CPU状态,并且所有CPU核心都已完全占用。

我想知道相同的情况,但更改资源计算器对我有效。
我就是这样设置属性的:

    <property>
        <name>yarn.scheduler.capacity.resource-calculator</name>      
        <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>       
    </property>

纱线.scheduler.capacity.resource-calculator
org.apache.hadoop.warn.util.resource.DominantResourceCalculator

在应用程序的纱线界面中检查分配了多少个容器和vCore,随着更改,容器的数量应为executors+1,vCore应为:(executor cores*num executors)+1。

executors每个取10个芯,2个应用程序主机的核心=42个当您总共拥有40个vCores时请求的核心

将executor cores减少到8,并确保重新启动每个NodeManager

还要修改warn-site.xml并设置以下属性:

yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores

没有将纱线调度程序设置为FairScheduler,我看到了相同的情况。Spark UI显示了正确数量的任务,但这表明没有任何问题。我的集群显示接近100%的CPU使用率,这证实了这一点


设置FairScheduler后,纱线资源看起来是正确的。

您可以在Spark UI网站(选项卡环境)上检查所有配置选项是否真的传播到Spark应用程序?如果分配有任何问题,您也可以检查纱线资源管理器日志。您解决过这个问题吗?我现在遇到了同样的问题。请解释一下你是怎么做到的。配置的名称是什么?@Wonay,我用了这个:谢谢你的链接!甚至在启用DefaultResourceCalculator的UI中显示vCore都应该被认为是一个bug。