gpt4 book ai didi

java - Spark 作业返回后不久,推测任务是否可以继续运行?

转载 作者:行者123 更新时间:2023-12-01 09:40:49 24 4
gpt4 key购买 nike

我的一个简单 Spark 作业遇到了问题,简化后如下所示。

JavaRDD<ObjectNode> rdd = pullAndProcessData();
ManifestFilesystem fs = getOutputFS();
List<WriteObjectResult> writeObjectResults = rdd.mapPartitions(fs::write).collect();
fs.writeManifest(Manifest.makeManifest(writeObjectResults));

我对这段代码的期望是,无论发生什么,当且仅当所有任务都完成并成功将其分区写入 S3 时,才会调用 writeManifest。问题在于,显然,某些任务在 list 之后写入 S3,这是永远不应该发生的。

ManifestFilesystem.write 中,我删除现有 list (如果有的话)以使其无效,因为正常的工作流程应该是:

  • 将所有分区写入S3
  • 将 list 写入 S3

我怀疑在以下情况下,由于推测的任务,可能会发生这种情况:

  • 某些任务被标记为可推测并重新发送给其他从属任务
  • 所有推测的任务都会返回至少一个它们发送到的从属设备,但其中一些任务会在速度较慢的从属设备上继续运行
  • 在任务中断之前,Spark 不会中断任务或将 collect 的结果返回给驱动程序
  • 仍在运行的推测任务最终执行 ManifestTimeslice.write 并在写入分区之前删除 list

这是可能发生的事情吗?有人对这种行为有另一种假设吗?

注意:使用内置数据发布方法不是一种选择

注2:我实际上找到了this这往往会证实我的直觉,但如果能得到确认仍然很棒,因为我没有使用标准 HDFS 或 S3 读/写方法,原因超出了这个问题的范围。

最佳答案

Spark 不会主动终止推测任务。它只是等待任务完成并忽略结果。我认为您的推测任务完全有可能在 collect 调用之后继续写入。

关于java - Spark 作业返回后不久,推测任务是否可以继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467957/

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