spark在作业开始时删除所有执行者

xpcnnkqh  于 2021-07-14  发布在  Spark
关注(0)|答案(2)|浏览(387)

我正在尝试将spark作业配置为在dataproc集群上使用固定资源运行,但是在该作业运行6分钟后,我注意到除了7个执行器之外,其他所有执行器都被丢弃。45分钟后,工作没有任何进展,我找不到任何错误或日志来解释。
当我检查作业详细信息中的时间线时,它显示除7个执行者之外的所有执行者在6分钟时被移除,并显示消息 Container [really long number] exited from explicit termination request. .
我运行的命令是:

gcloud dataproc jobs submit spark --region us-central1 --cluster [mycluster] \
  --class=path.to.class.app --jars="gs://path-to-jar-file" --project=my-project \
  --properties=spark.executor.instances=72,spark.driver.memory=28g,spark.executor.memory=28g

我的集群是1+24n2-highmem16示例,如果这有帮助的话。
编辑:我终止了作业,重置,然后重试。同样的事情发生在工作的同一点上(工作9阶段9/12)

r8xiu3jd

r8xiu3jd1#

通常,该消息预期与spark动态分配相关联;如果希望始终有固定数量的执行者,可以尝试添加以下属性:

...
  --properties=spark.dynamicAllocation.enabled=false,spark.executor.instances=72...

然而,除了看到空闲的执行者继续逗留之外,这可能不会解决您案例中的根本问题;如果动态分配是放弃这些执行者,那将是由于这些任务已经完成,但您的剩余执行者由于任何原因还没有完成很长一段时间。这通常表示某种类型的数据倾斜,其中剩余的执行者要做的工作比那些出于任何原因已经完成的执行者要多得多,除非剩余的执行者只是作为管道较小阶段的一部分,可能是在“reduce”阶段,被平均加载。
如果在大量等效任务中发现滞后任务,可以考虑添加 repartition() 跳转到您的工作中,将其更细粒度地切碎,希望将那些倾斜的分区分散开来,或者以其他方式改变您的组或通过其他方式对数据进行分区的方式。

nkoocmlb

nkoocmlb2#

固定的。作业资源不足。为作业分配了更多的执行者,作业就完成了。

相关问题