非常に多数の入力パスを使用するマップ削減ジョブがあります。その結果、ジョブの開始中にこの例外が発生しています。
最大 jobconf サイズを超えました: 6154861 制限: 5242880
jobconf の最大サイズはシステム プロパティによって管理されていることに気付きました。
mapred.user.jobconf.limit のデフォルトは 5 MB です。
この制限を増やす以外に、この問題を回避する方法はありますか?
ソース自体を変更する準備ができていない限り、そうは思いません。JobTracker のソースによると、ユーザーが明示的に指定しない場合、これは最大許容値です。
/** the maximum allowed size of the jobconf **/
long MAX_JOBCONF_SIZE = 5*1024*1024L;
/** the config key for max user jobconf size **/
public static final String MAX_USER_JOBCONF_SIZE_KEY = "mapred.user.jobconf.limit";
値を指定していない場合は、mapred.user.jobconf.limit
次の値5*1024*1024L
が使用されます。
MAX_JOBCONF_SIZE = conf.getLong(MAX_USER_JOBCONF_SIZE_KEY, MAX_JOBCONF_SIZE);
DistributedCache
または、可能であれば使用してみてください。
非常に多くの名前と値のペアを にロードする代わりに、JobConf
それらをファイルに入れて、そのファイルを に追加できますDistributedCache
。アプリケーションが に何を格納しているかによって異なりますJobConf
。