我的群集上安装了cloudera hadoop版本4。 它附带谷歌protobuffer jar版本2.4。 在我的应用程序代码中,我使用使用protobuffer 2.5版编译的protobuffer类。
这会在运行时导致无法解决的编译问题。 有没有办法运行地图减少作业与外部jar或我卡住,直到cloudera升级他们的服务?
感谢。
答案 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