jay*_*100 17 hadoop jar 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
Run Code Online (Sandbox Code Playgroud)
这些参数中的哪一个是在我的作业配置中设置的正确参数,以便强制映射器和缩减器具有hadoop_classpath在hadoop默认依赖关系罐之前放置用户定义的jar 的类路径?
顺便说一句,这与这个问题有关: 我最近发现的Dynamodb requestHandler接受是由于jar冲突造成的.
因此,假设您使用的是0.20.203,则可以在TaskRunner.java代码中进行如下处理:
mapreduce.user.classpath.firstgetClassPaths(..)getClassPaths() 是在第524行上定义的,您应该能够看到配置属性用于决定您的job + dist缓存库还是hadoop库首先进入类路径对于其他版本的hadoop,最好在所有这是一个“半隐藏配置”之后检查TaskRunner.java类以确认config属性的名称:
static final String MAPREDUCE_USER_CLASSPATH_FIRST =
"mapreduce.user.classpath.first"; //a semi-hidden config
Run Code Online (Sandbox Code Playgroud)