我有一个使用大量输入路径的map reduce作业。因此,我在开始工作时遇到了这个异常:
超过最大jobconf大小:6154861限制:5242880
我意识到最大作业配置大小是由系统属性控制的:
mapred.user.jobconf。
除了增加这个限制,还有什么方法可以避免这个问题吗?
我不这样认为,除非您准备更改源代码本身。根据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
。
您可以将它们放在一个文件中并将该文件添加到DistributedCache
中,而不是将这么多名称值对加载到JobConf
中。这取决于您的应用程序在JobConf
中存储的内容。