当前位置: 首页 > 知识库问答 >
问题:

Dataproc设置每个执行程序容器的vCore数

华星文
2023-03-14

我正在构建一个运行在Dataproc上的spark应用程序。我计划使用临时集群,并为应用程序的每次执行旋转一个新的集群。所以我基本上希望我的工作能吃掉尽可能多的集群资源,而且我对需求有很好的想法。

我一直在尝试关闭动态分配并自己设置executor实例和内核。目前,我使用6个实例和30个核心的一个POP。

也许这更像是一个纱的问题,但我发现容器vCore和我的spark executor内核之间的关系有点混乱。在YARN application manager UI中,我看到生成了7个容器(1个驱动程序和6个执行程序),每个容器使用1个vcore。然而,在spark中,我看到执行程序本身使用了我指定的30个内核。

所以我很好奇执行者是否试图在本质上是一个1核心的盒子上并行执行30个任务。或者在AM gui中显示的vCore是错误的?

如果是前者,那么我想知道设置这个应用程序的最佳方法是什么,这样我就可以在每个工作节点上使用一个执行器,并且使用所有的CPU。

共有1个答案

陶锋
2023-03-14

纱线GUI中显示的vCore错误;这是capacity-scheduler的一个未详细记录但已知的问题,它是DataProc的默认值。值得注意的是,使用Dataproc上的默认设置,YARN只是基于内存而不是CPU进行资源装箱;这样做的好处是,对于根据每个工作负载的需要而在不同程度上超额订阅CPU,特别是在IO绑定的情况下,这样做更加通用性强,但缺点是,YARN不会负责以固定的方式划分CPU使用量。

请参阅https://stackoverflow.com/A/43302303/3777211了解更改为fair-scheduler以查看vcores分配在yarn中的精确表示。然而,在您的情况下,这样做可能没有任何好处;使纱线跨两个维度进行装箱更多地是一个“共享多租户集群”问题,并且只会使调度问题复杂化。

在您的情况下,设置应用程序的最佳方法是忽略YARN关于vCore的内容;如果您只希望每个工作节点有一个执行器,那么将执行器内存大小设置为适合每个节点的最大值,并使每个执行器的核数等于每个节点的核数总数。

 类似资料:
  • 如前所述,更改Spark集群冗长性的理想方法是更改相应的log4j.properties。然而,在dataproc上,Spark在Yarn上运行,因此我们必须调整全局配置,而不是/usr/lib/Spark/conf 几点建议: 在dataproc上,我们有几个gcloud命令和属性可以在集群创建过程中传递。请参阅留档是否可以通过指定更改 /etc/hadoop/conf下的log4j.prope

  • 问题内容: 如何从Java(或Scala)代码中配置具有和的执行器数量?我经常看到2个执行者。看起来像是行不通的,并且是与众不同的。 我只需要将执行程序的数量设置为等于集群大小,但是总是只有2个。我知道我的集群大小。如果这很重要,我会在YARN上运行。 问题答案: 好的,我知道了。执行程序的数量实际上不是Spark属性本身,而是用于在YARN上放置作业的驱动程序。因此,当我使用SparkSubmi

  • 我正在测试每个执行器的不同内核数(executor cores)对Spark上SVD的运行时的影响。随着执行器内核的固定,主数据RDD的分区数量也会发生变化。然而,对于给定数量的RDD分区,不同的执行器内核的SVD计算时间似乎没有显著变化。这有点令人困惑。 我的环境是: Spark Cluster具有3个节点(每个节点32个内核和32GB内存)。每个节点运行1个Worker。 spark.max.

  • 我在一个单独的Docker中运行spark-master和spark-worker。 我能看见他们在跑 PS-EF grep火花根3477 3441 0 1 05?00:04:17/usr/lib/jvm/java-1.8-openjdk/jre/bin/java-cp/usr/local/spark/conf/:/usr/local/spark/jars/*-xmx1g org.apache.s

  • 我在Google DataProc集群上运行spark作业。但Spark似乎没有使用集群中所有可用的vCore,如下所示 基于这样和这样的其他一些问题,我已经设置了集群以使用来考虑资源分配的vcpus和内存 但当我提交带有自定义spark标志的作业时,看起来YARN不尊重这些自定义参数,默认使用内存作为资源计算的标准 能帮助某人弄清楚这里发生了什么?

  • 问题内容: 在Java性能分析中,如今似乎所有(免费)的技术通向JDK6附带的VisualVM Profiler。它看起来像是一个不错的程序,每个人都吹捧如何将它“附加到正在运行的进程中”作为主要功能。问题是,这似乎是 在 本地进程上使用它 的唯一方法 。我希望能够在探查器中 启动 程序,并跟踪其 整个执行过程 。 我尝试使用如何使用visualvm来分析应用程序启动中描述的选项,但是在两种传输方