Hadoop 为具有多个spark客户端的纱线簇计算纱线.nodemanager.resource.cpu-vcores

Hadoop 为具有多个spark客户端的纱线簇计算纱线.nodemanager.resource.cpu-vcores,hadoop,apache-spark,yarn,Hadoop,Apache Spark,Yarn,如果我有3个spark应用程序都使用相同的纱线簇,我应该如何设置 warn.nodemanager.resource.cpu vcores 在3-site.xml中的每一个中 (每个spark应用程序都需要在类路径上有自己的warn-site.xml) 这个值在client.xml中是否重要? 如果有: 假设集群有16个核心 每个warn-site.xml中的值是否应为5(总共15个,为系统进程保留1个核心)?或者我应该将每个设置为15 (注意:Cloudera指出这里应该为系统进程保留一个核心

如果我有3个spark应用程序都使用相同的纱线簇,我应该如何设置

warn.nodemanager.resource.cpu vcores

在3-site.xml中的每一个中

(每个spark应用程序都需要在类路径上有自己的warn-site.xml)

这个值在client.xml中是否重要?

如果有:

假设集群有16个核心

每个warn-site.xml中的值是否应为5(总共15个,为系统进程保留1个核心)?或者我应该将每个设置为15

(注意:Cloudera指出这里应该为系统进程保留一个核心:但是,它们没有详细介绍针对同一集群使用多个客户端的情况)


假设Spark以纱线为主机运行,并以集群模式运行。

您是在谈论每个纱线节点管理器的服务器端配置吗?如果是这样,它通常会被配置为略少于集群中每个节点上的CPU核心数(或者虚拟核心数,如果您有超线程)。因此,如果您有4个节点,每个节点有4个内核,那么您可以将每个节点的3个专用于纱线节点管理器,您的集群将总共有12个虚拟CPU

然后,在向集群提交Spark作业(例如,请参见)时,您请求所需的资源,YARN将尝试满足该请求。如果不能完成,您的Spark作业(或应用程序)将排队,或者最终将超时

您可以在Thread中配置不同的资源池,以保证为这样的池提供特定数量的内存/CPU资源,但这要高级一点

如果你在集群模式下提交你的星火应用程序,你必须考虑星火驱动程序将在群集节点上运行,而不是本地机器(提交它的机器)。因此,它至少需要1个虚拟CPU


希望这能为您澄清一点。

Spark有一个使用Thread-site.xml的客户端配置。我有多个spark作业正在从不同的应用程序提交,每个应用程序都有自己的客户端warn-site.xml。在这种情况下,如果您使用一个应用程序请求集群的所有资源,那么下一个应用程序必须排队等待第一个应用程序完成。我唯一担心的是客户端上忽略了此值,而只有Thread.nodemanager.resource.cpu-vcores的服务器端Thread-site.xml值才是重要的。我在一段时间内不会再测试一个集群来确认这种或那种方式,博客帖子也不清楚。你是如何从你的应用程序开始Spark工作的?如果使用的是
spark submit
脚本,则应使用
--executor cores
--num executors
选项。直接使用
SparkSubmit
sparkauncher
类有一些等价的功能。据我所知,
warn.nodemanager.resource.cpu vcores
属性仅在服务器端使用。节点管理器是在纱线集群中的每个工作节点上运行的组件。作业通过java使用SparkConf对象提交。Spark在类路径上需要一个swean-site.xml,但不清楚它实际上从中读取了什么。