spark:理解动态分配

fkaflof6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(377)

我已使用以下配置启动spark作业:

--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

它工作得很好,完成得很成功,但是在检查spark历史ui之后,我看到的是:

我的问题是(我关心的不仅仅是理解问题的答案):
如果spark没有任务要做,为什么要请求最后一个执行者?如何在动态分配模式下优化作业请求的群集资源?
我在Yarn上使用spark 2.3.0。

suzh9iv8

suzh9iv81#

这是因为分配政策:
此外,每轮请求的执行者数量比上一轮成倍增加。
参考

d4so4syb

d4so4syb2#

如果不知道你提交的工作内容,很难知道spark在那里做了什么。不幸的是,您提供的配置字符串没有说明spark在提交作业时实际执行的操作。
通过查看history ui的“sql”部分(顶部栏的右侧)以及stdout日志,您可能会更好地了解任务期间发生的事情。
一般来说,阅读spark工作原理的一个更好的地方是官方页面:https://spark.apache.org/docs/latest/cluster-overview.html
快乐Spark;)

vbkedwbf

vbkedwbf3#

使用spark动态分配需要遵守两个要求:
spark.dynamicallocation.enable启用
spark.shuffle.service.enabled=>外部shuffle服务的目的是允许在不删除shuffle文件的情况下删除执行器。
根据工作负载动态调整资源。如果您不再使用该应用程序,它将返回资源。
我不确定是否有一个顺序,它只会以整数和指数形式请求执行者,即:一个应用程序将在第一轮中添加1个执行者,然后添加2、4、8等等。。。
配置外部洗牌服务

相关问题