Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类路径中重写默认hadoop JAR_Jar_Hadoop_Classpath_Operator Precedence - Fatal编程技术网

在类路径中重写默认hadoop JAR

在类路径中重写默认hadoop JAR,jar,hadoop,classpath,operator-precedence,Jar,Hadoop,Classpath,Operator Precedence,我已经看到了许多使用用户类路径作为hadoop路径的先例的方法。如果m/r作业需要特定版本的库,而hadoop恰好已经使用了旧版本的库(例如jackson的json解析器或commons http等),则通常会执行此操作 无论如何,我看到: mapreduce.task.classpath.user.precedence mapreduce.task.classpath.first mapreduce.job.user.classpath.first 在我的作业配置中设置哪一个参数是正确的,以

我已经看到了许多使用用户类路径作为hadoop路径的先例的方法。如果m/r作业需要特定版本的库,而hadoop恰好已经使用了旧版本的库(例如jackson的json解析器或commons http等),则通常会执行此操作

无论如何,我看到:

mapreduce.task.classpath.user.precedence
mapreduce.task.classpath.first
mapreduce.job.user.classpath.first
在我的作业配置中设置哪一个参数是正确的,以便强制映射器和还原器具有将我的用户定义的
hadoop\u类路径
jars置于hadoop默认依赖项jars之前的类路径

顺便说一下,这与这个问题有关:
我最近发现这是由于jar冲突造成的

因此,假设您使用的是0.20.203,代码中的处理如下:

  • 您要查找的属性位于第94行-
    mapreduce.user.classpath.first
  • 第214行是调用来构建类路径列表的地方,它将委托给一个名为
    getclasspath(…)
  • getClassPaths()
    是在第524行定义的,您应该能够看到configuration属性用于决定您的job+dist缓存库还是hadoop库首先位于类路径上
对于其他版本的hadoop,最好检查TaskRunner.java类以确认config属性的名称,毕竟这是一个“半隐藏配置”:


我也有同样的问题,在Hadoop版本0.20.2-cdhu03上对我有效的参数是“mapreduce.task.classpath.user.priority”

此设置经测试不适用于CDH3U3,以下答案来自Cloudera团队:

// JobConf job = new JobConf(getConf(), MyJob.class);
// job.setUserClassesTakesPrecedence(true);

在MapR发行版中,属性是“mapreduce.task.classpath.user.preference”


mapreduce.task.classpath.user.priority
真的
如果用户想要设置不同的类路径,则设置为true。(阿夫罗)

jobConf.setUserClassEstakesPreference(true)

与最新的Hadoop版本(2.2+)一样,您应该设置:

    conf.setBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true);

这些设置仅用于在映射器或reducer任务中引用外部JAR类。但是,如果您以自定义的InputFormat等格式使用这些文件,则无法加载该类。在提交作业时导出此设置是确保此设置在任何地方都有效(在MR2中):

export HADOOP_USER_CLASSPATH_FIRST=true

你正在使用/瞄准哪个版本/发行版的hadoop?嗯。。。理想情况下,我想知道这个参数是如何从一个版本更改到另一个版本的,如果它。。。但我相信我们目前的版本是2.0.232.0.23,我猜你的意思是0.20.203?试试:conf.setBoolean(MRJobConfig.MAPREDUCE\u JOB\u USER\u CLASSPATH\u FIRST,true);不幸的是,这个功能不存在于…@Chris,有趣的答案。但为什么这是隐藏的(或半隐藏的)?有什么想法吗?
    conf.setBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true);
export HADOOP_USER_CLASSPATH_FIRST=true