2013-04-20 55 views
1

我的群集上安装了cloudera hadoop版本4。 它包装在谷歌protobuffer jar版本2.4。 在我的应用程序代码中,我使用了protobuffer版本2.5编译的protobuffer类。如何在Cloudera hadoop中使用外部罐子?

这会在运行时导致未解决的编译问题。 有没有办法使用外部jar运行map reduce作业或者我坚持到cloudera升级其服务?

谢谢。

+0

试将它作为外部jar添加到您的项目中。删除旧的。 – Tariq 2013-04-20 19:39:25

回答

2

是的,你可以用外部罐子运行MR作业。

务必在提交就像下面这个例子的工作,任何依赖关系添加到HADOOP_CLASSPATH-libjars两个:

您可以使用下面的添加从当前的所有jar依赖关系和lib目录:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`echo *.jar`:`echo lib/*.jar | sed 's/ /:/g'` 

请记住,通过hadoop jar开始工作时,您还需要通过使用-libjars将任何依赖关系的罐子传递给它。我喜欢用:

hadoop jar <jar> <class> -libjars `echo ./lib/*.jar | sed 's/ /,/g'` [args...] 

注:sed命令需要不同的分隔符; HADOOP_CLASSPATH:分开,-libjars需要分开,

编辑:如果你需要你的类路径中首先解释,以确保您的罐子(而不是预包装的罐子)是被使用的一个,你可以设置如下:

export HADOOP_USER_CLASSPATH_FIRST=true

+0

我已经有了我的$ HADOOP_CLASSPATH中的jar。问题在于Hadoop使用与Hadoop捆绑在一起的不同版本。我希望能够在与Hadoop捆绑在一起的jar上使用我的jar(这是一个更好的版本) – 2013-04-21 06:53:45

+0

啊,试着将它设置为首先使用你的类路径,就像编辑我的文章一样。 – Quetzalcoatl 2013-04-21 14:17:12

+0

这是否解决了您的问题? – Quetzalcoatl 2013-04-22 16:48:22