如何在Cloudera hadoop中使用外部罐子?

时间:2013-04-20 16:39:07

标签: java hadoop protocol-buffers cloudera

我的群集上安装了cloudera hadoop版本4。 它附带谷歌protobuffer jar版本2.4。 在我的应用程序代码中,我使用使用protobuffer 2.5版编译的protobuffer类。

这会在运行时导致无法解决的编译问题。 有没有办法运行地图减少作业与外部jar或我卡住,直到cloudera升级他们的服务?

感谢。

1 个答案:

答案 0 :(得分:2)

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

请务必在提交作业后向HADOOP_CLASSPATH-libjars添加任何依赖项,如以下示例所示:

您可以使用以下命令添加当前和lib目录中的所有jar依赖项:

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

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

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

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

编辑:如果您需要首先解释类路径以确保您的jar(而不是预先打包的jar)是使用的jar,您可以设置以下内容:

export HADOOP_USER_CLASSPATH_FIRST=true