如何在map/reduce作业中使用更新版本的hadoop/lib jar?

如何在map/reduce作业中使用更新版本的hadoop/lib jar?,jar,hadoop,classloader,Jar,Hadoop,Classloader,Hadoop目前在其lib文件夹中附带commons-httpclient-3.0.1.jar 如果我有一个需要commons-httpclient-3.1.jar的map/reduce任务,那么将这个jar捆绑到我的hadoop jar的lib文件夹中似乎是不够的(就像处理任何正常的外部jar依赖项一样),因为hadoop似乎是从它的lib文件夹加载以前的jar,而不是使用我提供的jar 不可能使用hadoop也使用的不同版本的JAR?如果所有其他方法都失败了,请使用maven shade插件

Hadoop目前在其lib文件夹中附带commons-httpclient-3.0.1.jar

如果我有一个需要commons-httpclient-3.1.jar的map/reduce任务,那么将这个jar捆绑到我的hadoop jar的lib文件夹中似乎是不够的(就像处理任何正常的外部jar依赖项一样),因为hadoop似乎是从它的lib文件夹加载以前的jar,而不是使用我提供的jar


不可能使用hadoop也使用的不同版本的JAR?

如果所有其他方法都失败了,请使用maven shade插件重命名commons httpclient的包,这样您就有了自己的,hadoop也有了自己的。对于cdh4 hadoop版本,在hadoop配置对象中添加以下代码应该可以解决这个问题

请注意,这将而不是解决主代码(提交之前运行的代码)中的jar地狱,为了解决这个问题,我想我们应该添加-D或将其添加到hadoop配置文件中,但我还没有检查它

conf.set("mapreduce.task.classpath.user.precedence", "true");
conf.set("mapreduce.user.classpath.first", "true");
conf.set("mapreduce.job.user.classpath.first", "true");