Amazon Elastic MapReduce で大規模な (100 ノードを超える) 一連の mapreduce ジョブを実行しています。
削減フェーズでは、既に完了したマップ タスクが失敗し続けます。
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
これが発生するマッパーの割合は十分に少ないので、問題が発生した場合を除いて、レデューサーはすべて一時停止し、1 つのマップタスクが再実行されるのを待つため、ジョブ全体が毎回 1 ~ 5 分間一時停止し続けます。 .
これはこのバグに関連していると思います -> https://issues.apache.org/jira/browse/MAPREDUCE-2980 これが起こらずに EMR ジョブを実行する方法を知っている人はいますか?
編集:それが助けになるなら、ここにいくつかの詳細があります。入力形式はSequenceFileInputFormat
. 出力形式は、 のわずかに変更されたバージョンですSequenceFileOutputFormat
。キーと値のペアはユーザー定義です (値は大きく、 を実装しますConfigurable
)。はありませんとCombiner
だけです。入力と出力にブロック圧縮を使用しています (また、中間の kv ペアに対してレコード圧縮が行われています。これは EMR のデフォルトです)。コーデックは、私が信じているデフォルトです。最後に、実際には順番に実行される一連のジョブであり、それぞれが前のジョブの出力を次のジョブへの入力として使用します。最初のいくつかのジョブは小さく、問題なく実行されます。これが起こるのは、仕事が本当に大きくなり始めたときだけです。Mapper
Reducer
SnappyCodec