【问题标题】:How do I use a more recent version of a hadoop/lib jar in my map/reduce jobs?如何在我的 map/reduce 作业中使用更新版本的 hadoop/lib jar?
【发布时间】:2011-01-05 05:32:52
【问题描述】:

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

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

不能使用不同版本的 jars,hadoop 也使用吗?

【问题讨论】:

    标签: jar hadoop classloader


    【解决方案1】:

    如果所有其他方法都失败了,请使用 maven-shade-plugin 重命名 commons-httpclient 的包,以便您拥有自己的,而 hadoop 拥有它。

    【讨论】:

      【解决方案2】:

      对于cdh4 hadoop版本,在hadoop配置对象中添加如下代码即可解决。

      请注意,这将不会解决主代码(提交之前运行的代码)中的 jar hell,为了解决这个问题,我想我们应该添加 -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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多