Spark:了解动态分配

时间:2019-09-09 09:44:48

标签: apache-spark hadoop yarn

我使用以下配置启动了火花作业:

--master yarn --deploy-mode cluster --conf spark.scheduler.mode=FAIR --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.maxExecutors=19 --conf spark.dynamicAllocation.minExecutors=0

它运行良好并成功完成,但是在检查了火花历史ui之后,这就是我看到的:

enter image description here

我的问题是(我对解决方案的了解不止于此):

如果没有任务可做,为什么spark请最后一个执行者执行? 如何在动态分配模式下优化作业请求的群集资源?

我在纱线上使用Spark 2.3.0。

3 个答案:

答案 0 :(得分:0)

不知道您提交的工作的内容就很难知道Spark在这里做了什么。不幸的是,您提供的配置字符串并没有说明提交作业后Spark实际执行的操作。

通过查看历史记录UI(顶部栏的右侧)的“ SQL”部分以及标准输出日志,您可能会更好地了解任务期间发生的情况。

一般来说,了解Spark工作原理的更好的地方之一是官方页面:https://spark.apache.org/docs/latest/cluster-overview.html

快乐的火花;)

答案 1 :(得分:0)

您需要遵守2个使用Spark动态分配的要求:

  • spark.dynamicAllocation.enable
  • spark.shuffle.service.enabled =>外部shuffle服务的目的是允许执行程序被删除而不删除shuffle文件。

根据工作量动态调整资源。如果您不再使用该应用程序,它将退还资源。

我不确定是否有命令,它只会按轮数和指数地请求执行者,即:一个应用程序将在第一轮中添加1个执行者,然后依次添加2、4、8等。 >

Configuring external shuffle service

答案 2 :(得分:0)

这是由于分配政策:

此外,每轮请求的执行者数量 与上一轮相比呈指数增长。

reference