gpt4 book ai didi

apache-spark - 如何解决 Spark 上的 yarn 容器 sizing 问题?

转载 作者:行者123 更新时间:2023-12-04 00:51:41 24 4
gpt4 key购买 nike

我想在 YARN 上启动一些 pyspark 工作.我有 2 个节点,每个节点 10 GB。我可以像这样打开 pyspark shell:pyspark
现在,当我尝试启动一个非常简单的示例时:

import random
NUM_SAMPLES=1000
def inside(p):
x, y = random.random(), random.random()
return x*x + y*y < 1

count = sc.parallelize(xrange(0, NUM_SAMPLES)) \
.filter(inside).count()
print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)

结果我得到了一个很长的带有错误输出的 Spark 日志。最重要的信息是:
ERROR cluster.YarnScheduler: Lost executor 1 on (ip>: Container marked as failed: <containerID> on host: <ip>. Exit status 1.  Diagnostics: Exception from container-launch.  ......

后来在日志中我看到...
ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times: aborting job
INFO cluster.YarnClientSchedulerBackend: Asked to remove non-existent executor 1
INFO spark.ExecutorAllocationManager: Existing executor 1 has been removed (new total is 0)

从我从上面的日志中收集的信息来看,这似乎是 yarn 中的容器大小问题。

我的 yarn-site.xml文件具有以下设置:
yarn.scheduler.maximum-allocation-mb = 10240
yarn.nodemanager.resource.memory-mb = 10240

并在 spark-defaults.conf包含:
spark.yarn.executor.memoryOverhead=2048
spark.driver.memory=3g

如果您想了解任何其他设置,请告诉我。

如何适本地设置 yarn 中的容器尺寸?
(对可以帮助我的人的赏金)

最佳答案

让我首先解释在 YARN 集群上调整 Spark 应用程序所需的基本属性集。
注: YARN 中的Container 相当于Spark 中的Executor。为了便于理解,您可以认为两者是相同的。
在 yarn-site.xml 上:yarn.nodemanager.resource.memory-mb是集群从给定节点可用的总内存。yarn.nodemanager.resource.cpu-vcores是来自给定节点的集群可用的 CPU vcore 总数。yarn.scheduler.maximum-allocation-mb是每个 yarn 容器可以分配的最大内存(以 mb 为单位)。yarn.scheduler.maximum-allocation-vcores是每个 yarn 容器可以分配的最大 vcore 数。
示例:如果一个节点有 16GB 和 8vcores,并且您想为集群贡献 14GB 和 6vcores(用于容器),则设置如下所示的属性:

yarn.nodemanager.resource.memory-mb : 14336 (14GB)

yarn.nodemanager.resource.cpu-vcores : 6


并且,要创建每个具有 2GB 和 1vcore 的容器,请设置以下属性:

yarn.scheduler.maximum-allocation-mb : 2049

yarn.scheduler.maximum-allocation-vcores : 1


注:即使有足够的内存(14GB)来创建 7 个 2GB 的容器,上面的配置也只会创建 6 个 2GB 的容器,并且只有 14GB 中的 12GB 将用于集群。这是因为集群只有 6 个 vcores 可用。
现在在 Spark 方面,
下面的属性指定每个执行程序/容器要请求的内存 spark.driver.memory spark.executor.memory下面的属性指定每个执行程序/容器要请求的 vcore spark.driver.cores spark.executor.cores import/export : Spark 的所有内存和 vcore 属性应小于或等于 YARN 的配置
下面的属性指定了 YARN 集群中可用于 Spark 应用程序的执行程序/容器的总数。 spark.executor.instances此属性应小于 YARN 集群中可用的容器总数。
一旦 yarn 配置完成, Spark 应该请求容器 可以根据 YARN 配置进行分配 .这意味着如果 YARN 配置为每个容器最多分配 2GB 并且 Spark 请求一个具有 3GB 内存的容器,那么作业将停止或停止,因为 YARN 无法满足 Spark 的请求。
现在为您的用例:
通常,集群调优基于工作负载。但是下面的配置应该更合适。
可用内存:10GB * 2 个节点
Vcores 可用:5 * 2 vcores [假设]
在yarn-site.xml [在两个节点中]

yarn.nodemanager.resource.memory-mb : 10240

yarn.nodemanager.resource.cpu-vcores : 5

yarn.scheduler.maximum-allocation-mb : 2049

yarn.scheduler.maximum-allocation-vcores : 1


使用上面的配置,您可以在每个具有 2GB,1vcore 每个容器的节点上创建最多 10 个容器。
Spark 配置

spark.driver.memory 1536mb

spark.yarn.executor.memoryOverhead 512mb

spark.executor.memory 1536mb

spark.yarn.executor.memoryOverhead 512mb

spark.driver.cores 1

spark.executor.cores 1

spark.executor.instances 19


请随意使用这些配置以满足您的需求。

关于apache-spark - 如何解决 Spark 上的 yarn 容器 sizing 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43214762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com