Hadoop 弹性Mapreduce贴图输出丢失

Hadoop 弹性Mapreduce贴图输出丢失,hadoop,amazon-web-services,jetty,elastic-map-reduce,amazon-emr,Hadoop,Amazon Web Services,Jetty,Elastic Map Reduce,Amazon Emr,我正在Amazon Elastic mapreduce上运行一系列大型(超过100个节点)mapreduce作业 在reduce阶段,已经完成的map任务不断失败 Map output lost, rescheduling: getMapOutput(attempt_201204182047_0053_m_001053_0,299) failed : java.io.IOException: Error Reading IndexFile at org.apache.hadoop.map

我正在Amazon Elastic mapreduce上运行一系列大型(超过100个节点)mapreduce作业

在reduce阶段,已经完成的map任务不断失败

Map output lost, rescheduling: getMapOutput(attempt_201204182047_0053_m_001053_0,299) failed :
java.io.IOException: Error Reading IndexFile
    at org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:113)
    at org.apache.hadoop.mapred.IndexCache.getIndexInformation(IndexCache.java:66)
    at org.apache.hadoop.mapred.TaskTracker$MapOutputServlet.doGet(TaskTracker.java:3810)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
    at org.apache.hadoop.http.HttpServer$QuotingInputFilter.doFilter(HttpServer.java:835)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readFully(DataInputStream.java:180)
    at java.io.DataInputStream.readLong(DataInputStream.java:399)
    at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:74)
    at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:54)
    at org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:109)
    ... 23 more
映射输出丢失,重新调度:getMapOutput(尝试\u 201204182047\u 0053\u m\u 001053\u 0299)失败:
java.io.IOException:读取IndexFile时出错
位于org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:113)
位于org.apache.hadoop.mapred.IndexCache.getIndexInformation(IndexCache.java:66)
位于org.apache.hadoop.mapred.TaskTracker$mapoputservlet.doGet(TaskTracker.java:3810)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
位于org.apache.hadoop.http.HttpServer$QuotingInputFilter.doFilter(HttpServer.java:835)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
位于org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
位于org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
位于org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
位于org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
位于org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
位于org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
位于org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
位于org.mortbay.jetty.Server.handle(Server.java:326)
位于org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
位于org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
位于org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
位于org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
位于org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
位于org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
位于org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
原因:java.io.EOFException
在java.io.DataInputStream.readFully(DataInputStream.java:180)
位于java.io.DataInputStream.readLong(DataInputStream.java:399)
位于org.apache.hadoop.mapred.SpillRecord.(SpillRecord.java:74)
位于org.apache.hadoop.mapred.SpillRecord.(SpillRecord.java:54)
位于org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:109)
... 23多
发生这种情况的映射程序的比例非常少,我不介意,只是当它发生时,还原程序都会暂停并等待1 map任务重新运行,所以整个作业每次都会暂停1-5分钟

我认为这与这个bug有关-> 有人知道如何在不发生这种情况下运行EMR作业吗

编辑: 这里有更多的信息,如果有帮助的话。输入格式为
SequenceFileInputFormat
。 输出格式是稍微修改过的
SequenceFileOutputFormat
。 键值对是用户定义的(该值较大,实现了
可配置
)。
没有组合器,只有映射器和减速机。
我对输入和输出使用块压缩(中间kv对也有记录压缩,这是EMR的默认设置)。编解码器是默认的,我相信是
SnappyCodec
。 最后,它实际上是一系列按顺序运行的作业,每个作业都使用前一个作业的输出作为下一个作业的输入。
最初的几项工作规模小,运行良好。只有当工作岗位开始大幅度增长时,这种情况才会发生。

自从提出这个问题以来,已经有了一些进展。这个问题在jira中进行了更详细的讨论

本jira以及此处或此处链接的任何其他jira的一个关键部分是,该问题与jetty版本相关。当时不可能使用较新的jetty版本


到目前为止,所提到的版本早已被弃用,因此,每个人都应该完全解决这个问题。

我尝试使用AMI 1.0和hadoop 20.2,但我遇到了一个完全不同的错误。对我来说,与内存、启动进程和分叉有关的东西似乎是一个配置问题。是否为map reduce作业定义了tmp文件夹?签出hadoop.tmp.dir属性以及您是否有权访问该文件夹。你能发布你的代码/配置吗?我正在使用所有的EMR默认值。这是一个完整的项目。我的代码中没有任何特定部分可以在这里特别有用。我应该澄清这不会立即或持续发生。30个任务中有1个会以这种方式失败,只有当任务变得足够大时才会失败。任何少于500个map/reduce任务的任务都不会有这个问题。您使用的是自定义JAR吗?你从哪里得到Hadoop类来编译?