Spark DRA 是否依赖 Spark 外部 shuffle 服务才能正常工作?

问题描述 投票:0回答:1

我想使用Spark DRA(动态资源分配)功能,以便可以根据我的应用程序工作负载动态请求/释放执行器,以提高资源利用率 但是,我想知道是否必须启用spark external shuffle service才能使用DRA(即DRA是否依赖于spark external service来工作)。

在我看来,DRA 应该依赖于 Spark 外部服务才能正常工作。这样,一旦执行器被释放并消失,shuffle 服务就可以将释放的执行器的 shuffle 数据提供给其他执行器。

谁能帮忙解释一下我的理解是否正确。

谢谢

apache-spark
1个回答
0
投票

长话短说 --> 是和否。

否 --> 严格来说,您不需要启用外部随机播放服务。这意味着在某些情况下需要重新计算。

是 --> 您可能希望避免重新计算,因此建议从前一段时间开始使用外部随机播放服务。

有一些注意事项。您可以在这里阅读https://spark.apache.org/docs/3.5.1/job-scheduling.html#graceful-decommission-of-executors

Executor 的优雅退役 在动态分配之前,如果 Spark executor 在关联应用程序也退出时退出 那么不再需要与执行器关联的所有状态 可以安全地丢弃。然而,通过动态分配, 当执行程序被显式删除时,应用程序仍在运行。 如果应用程序尝试访问存储或写入的状态 执行器,它将必须执行重新计算状态。因此, Spark 需要一种机制来优雅地停用执行程序 在删除之前保留其状态。

这个要求对于洗牌尤其重要。期间 shuffle,Spark执行器首先在本地写入自己的map输出 到磁盘,然后在其他情况下充当这些文件的服务器 执行者尝试获取它们。如果出现掉队者, 运行时间比其他任务长得多的任务,动态分配 可能会在 shuffle 完成之前删除执行器,在这种情况下 必须重新计算该执行程序写入的随机文件 没有必要。

保留随机播放文件的解决方案是使用外部 shuffle 服务,也在 Spark 1.2 中引入。该服务指的是 在集群的每个节点上运行的长时间运行的进程 独立于您的 Spark 应用程序及其执行程序。如果 服务启用后,Spark执行器将从中获取shuffle文件 服务而不是彼此。这意味着任何随机播放状态 遗嘱执行人所写的遗嘱可以在遗嘱执行人的期限之外继续送达 一生。

除了写入 shuffle 文件之外,执行器还可以缓存数据 在磁盘或内存中。然而,当执行器被删除时,所有缓存 数据将不再可访问。为了缓解这种情况,默认情况下 包含缓存数据的执行器永远不会被删除。您可以配置 此行为与spark.dynamicAllocation.cachedExecutorIdleTimeout有关。 当将spark.shuffle.service.fetch.rdd.enabled设置为true时,Spark可以 使用ExternalShuffleService 获取磁盘持久化的RDD 块。在 如果启用此功能,则执行器具有动态分配的情况 只有磁盘持久块被认为是空闲的 spark.dynamicAllocation.executorIdleTimeout 并将被释放 因此。在未来的版本中,可能会保留缓存的数据 通过与随机文件类似的堆外存储 通过外部随机播放服务保存。

© www.soinside.com 2019 - 2024. All rights reserved.