MapReduce 作业永远运行

Posted

技术标签:

【中文标题】MapReduce 作业永远运行【英文标题】:MapReduce jobs running forever 【发布时间】:2012-07-16 15:10:13 【问题描述】:

我正在使用 Michael Manoochehri 的示例 (http://***.com/a/10969900/1387380) 使用 Pipeline 和 Mapreduce API 将数据从 DataStore 传输到 Google Cloud Storage,但我的工作一直在运行并且永远不会完成。在过去的 7 天里,我有一些工作正在运行,我什至无法从 MapperPipeline 控制台界面停止。

如何手动或以编程方式停止它们?

【问题讨论】:

您好 Charles:首先,您可以通过在管理控制台->任务队列->[默认]->清除)清除您的任务队列(可能是“默认”队列)来移除那些挥之不去的作业。至于长期运行的作业问题,为了帮助我调试,您映射了多少个 Datastore 实体?您能否查看您的 App Engine 错误日志,看看是否存在涉及将结果写入 Cloud Storage (appengine.google.com/logs?app_id=YOUR_APP_ID) 的问题? 嗨,Michael,我已经清除了任务队列,但作业继续显示为在 MapReduce 仪表板中运行。我们谈论的是很少的实体(30 或更少),是的,我在写入云存储时遇到了问题,我在创建 GS 文件时遇到了 Permission Denied 错误,我现在已经修复了该错误,但我猜这些作业仍在某个地方运行。我想知道如何永远杀死他们,因为它正在慢慢填满我的配额。感谢您的帮助。 好的 - 这种行为可能是由于您之前的应用程序仍在运行 - 这可能吗? 我想是的,该应用程序仍在运行,直到我再次运行它,这次没有错误。以前的作业仍然在 MarReduce DashBoard 上标记为正在运行,我无法清理它们,但根据我的配额详细信息和日志页面,没有开始执行任何进程,所以最后一切都很好。 【参考方案1】:

我认为此行为是由于当前版本的 App Engine MapReduce 库处理 Cloud Storage 输出写入器错误的方式存在错误。如果发生这种情况,如上所述,请查看 GAE 日志以了解涉及云存储(或您当前使用的任何输出编写器)的权限或 API 错误。

我们的库的下一次迭代应该会有所改进,但目前如果出现此类问题,快速的解决方法是清除您的任务队列,纠正导致错误的问题,然后重新启动管道。

【讨论】:

以上是关于MapReduce 作业永远运行的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop之 - 剖析 MapReduce 作业的运行机制(MapReduce 2)

强制 HiveServer2 运行 MapReduce 作业

MapReduce 作业(用 python 编写)在 EMR 上运行缓慢

怎么在hadoop上部署mapreduce

MapReduce 知识

MapReduce工作原理图文详解