Pivotal Knowledge Base

フォローする

MapReduceのジョブが「Unable to initialize any output collector」というエラーで失敗する

環境

製品 バージョン
 Pivotal HD  

事象

MapReduce / Hiveのクエリが、以下のエラーで失敗する。

2015-04-24 11:41:41,861 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: Unable to initialize any output collector
	at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:412)
	at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:439)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)

原因

対象のエラー「Unable to initialize any output collector」は、コンテナ起動時にジョブが失敗したことを示している。この事象は複数の原因が存在するが、まずは、原因特定のためにHDFSのコンテナのログを確認する必要がある。 

以下の例では、mapreduce.task.io.sort.mbの最大値が2047MBであるにも関わらず、2047MBを超えた値に設定されている。最大値を超えた値を設定することでジョブは失敗する。

コンテナログのサイズは、以下のエラーによって確認できる。

2015-04-24 11:41:41,858 WARN [main] org.apache.hadoop.mapred.MapTask: Unable to initialize MapOutputCollector org.apache.hadoop.mapred.MapTask$MapOutputBuffer
java.io.IOException: Invalid "mapreduce.task.io.sort.mb": 2048
	at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:975)
	at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:401)

解決策

上述の例では、mapreduce.task.io.sort.mbの値を2048MB未満に設定する。

コメント

Powered by Zendesk