gpt4 book ai didi

hadoop - 如何在 MapReduce 中恢复失败的执行?

转载 作者:可可西里 更新时间:2023-11-01 16:44:04 24 4
gpt4 key购买 nike

我有一个要求是——

一个。假设我有 100GB 的文件/数据

我已经编写了 Map Reduce 作业来根据特定逻辑处理这些数据。

我解雇了 Map Reduce 作业,但在读取 50GB 后它失败了

所以我的问题是 -

我可以从第 51 GB 恢复 Map Reduce 作业吗?

如果有人知道如何去做,请告诉我,我不想重新处理我在故障点之前处理过的数据。

提前致谢

最佳答案

简短回答:没有。

这就是为什么很难使用 Hadoop 或 MPI 等大型批处理系统。大型作业的重启不仅从资源消耗的角度来看效率低下,而且在心理上也非常压抑。这就是为什么您的主要目标是将单个作业的运行时间减少到不超过几个小时。也许有一天可以实现作业的“暂停”和“热修复”代码,但据我所知目前不支持。

解决方案#1。将您的作业拆分为容易出错的可并行化作业和最终无错误的不可并行化作业。考虑以下示例:您有数百 GB 的来自 Web 服务器的文本访问日志,并且您想要编写作业来打印不同浏览器的流行程度。如果您将解析和聚合(求和)结合到一个巨大的作业中,那么它的运行时间将是几天的数量级,而且它失败的可能性也非常高,因为文本日志通常由于歧义而难以解析。更好的办法是将这项工作分成两个独立的工作:

  1. 第一份工作全权负责解析日志文件。它只打印浏览器字符串作为输出,甚至不需要任何缩减程序。这项工作是 99% 的错误发生的地方,因为这里是解析“野生”数据的地方。从某种意义上说,这项工作是可并行的,您可以将输入分成 block 并分别处理每个 block ,以便在 10-30 分钟内处理每个 block 。如果某个 block 的作业失败,则修复它并重新启动; 30 分钟算不了什么。

  2. 第二份工作是一项伟大的工作,它从第一份工作的实例中获取输出并执行聚合。因为聚合代码非常简单,所以这个作业不太可能失败。


           chunk(20G)->parse-job(20G)->browsers(0.5G)
chunk(20G)->parse-job(20G)->browsers(0.5G)
input(1T)->chunk(20G)->parse-job(20G)->browsers(0.5G)->aggregate-job->output
... .... ...
chunk(20G)->parse-job(20G)->browsers(0.5G)

解决方案#2。有时,即使部分输入数据被丢弃,您也可能对结果感到满意。在这种情况下,您可以设置选项 mapred.max.map.failures.percent和/或 mapred.max.reduce.failures.percent到非零值。

关于hadoop - 如何在 MapReduce 中恢复失败的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058617/

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