gpt4 book ai didi

apache-spark - 在启动后一分钟,Spark会释放所有执行程序

转载 作者:行者123 更新时间:2023-12-04 13:48:10 25 4
gpt4 key购买 nike

我在默认设置的8节点Google dataproc群集上运行pyspark
启动后几秒钟,我看到30个执行程序内核正在运行(按预期):

    >>> sc.defaultParallelism    30

One minute later:

    >>> sc.defaultParallelism    2

From that point all actions run on only 2 cores:

    >>> rng = sc.parallelize(range(1,1000000))    >>> rng.cache()    >>> rng.count()    >>> rng.getNumPartitions()    2

If I run rng.cache() while cores are still connected they stay connected and jobs get distributed.

Checking on monitoring app (port 4040 on master node) shows executors are removed:

Executor 1
Removed at 2016/02/25 16:20:14
Reason: Container container_1456414665542_0006_01_000002 exited from explicit termination request."

是否有一些设置可以保持内核连接而无需解决方法?

最佳答案

在大多数情况下,您实际上看到的只是YARN上Spark的配置方式与独立Spark的区别。目前,YARN的“使用的VCores”报告实际上并不正确对应于实际的内核容器预留,而容器实际上仅基于内存预留。

总的来说,这里有一些事情在起作用:

动态分配导致Spark将闲置的执行程序交还给YARN,不幸的是,此刻Spark打印出的是垃圾邮件,但无害的“丢失的执行程序”消息。这是YARN上spark的经典问题,它最初使spark瘫痪了,因为它会捕获它认为需要的最大数量的容器,然后再不放弃它们。

通过动态分配,当您开始长期工作时,spark会快速分配新容器(通过指数级提升,以便在几分钟之内快速填充整个YARN集群),并且在空闲时,以相同的方式放弃执行者-以大约60秒的间隔下降(如果空闲60秒,则放弃一些执行程序)。

如果要禁用动态分配,则可以运行:

spark-shell --conf spark.dynamicAllocation.enabled=false

gcloud dataproc jobs submit spark --properties spark.dynamicAllocation.enabled=false --cluster <your-cluster> foo.jar

另外,如果您指定固定数量的执行程序,它还应该自动禁用动态分配:
spark-shell --conf spark.executor.instances=123

gcloud dataproc jobs submit spark --properties spark.executor.instances=123 --cluster <your-cluster> foo.jar

关于apache-spark - 在启动后一分钟,Spark会释放所有执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649146/

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