【问题标题】:What happens when a mapper dies in EMR streaming job?当映射器在 EMR 流式传输作业中死亡时会发生什么?
【发布时间】:2014-04-29 09:51:41
【问题描述】:

在弹性 mapreduce 流式作业中,如果映射器突然死亡会发生什么?已经处理的数据会被重放吗?如果是这样,是否有任何选项可以禁用它?

我问是因为我正在使用 EMR 将一些数据插入第三方数据库。每个映射器都通过 HTTP 发送进来的数据。在这种情况下,如果映射器崩溃,我不想重播 HTTP 请求,我需要继续我离开的地方。

【问题讨论】:

  • 流媒体是什么意思?在 Hadoop 的上下文中,流支持以任何语言编写 MR 程序,而无需使用 Java Hadoop 绑定。这是您要查找的内容还是数据的实时处理?
  • 请在下方查看 Sudarshan 的回答和我的评论。

标签: hadoop amazon-web-services mapreduce streaming emr


【解决方案1】:

MR 是一个容错框架。当 Map 任务失败(流 API 或 Java API)时,行为是相同的。

一旦通知作业跟踪器任务失败,它将尝试重新安排任务。失败任务生成的临时输出被删除。

关于如何在 MR 中处理故障的更详细讨论可以看到 here

对于您的特定情况,我认为您需要在 setup() 方法中参考外部源以找出已处理的记录,然后在您的 mapper() 方法中使用此信息来决定是否应该使用特定记录处理与否。

【讨论】:

  • 我不关心输出。我只是对输入进行一些处理,我不希望它被重播。有没有办法禁用此故障转移功能?我需要我的新映射器从它离开的地方重新开始。
  • 我不确定我是否明白你的意思,你的处理中途失败了......所以它会丢弃失败任务完成的任何一半处理并重新开始,它不能从点开始失败的任务停止
  • 我到底在用它做什么:每个映射器使用从流式传输中获取的数据通过 http 访问第三方应用程序。假设我使用 mapreduce 以分布式方式将数据放入多个数据库中。它对我有帮助,因为它将任务分配给我需要的尽可能多的机器。我不知道 MR 是否适合我的案例,但我不知道任何替代方案。
  • 所以你是说在处理输入拆分时,如果处理了一半的记录然后任务失败,当任务被 MR 框架重新启动时,你会期望它只处理后半部分文件(未处理的一半)?
  • 我希望重播整个批次,但我只想继续播放未处理的部分。
猜你喜欢
  • 2019-07-16
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多