我有一个了Cloudera的Hadoop版本4我的集群上安装。 它被打包与谷歌protobuffer罐子版本2.4。 在我的应用程序的代码我用protobuffer 2.5版编译protobuffer类。
这将导致在运行时尚未解决的编译问题。 有没有一种方法来运行图减少工作与外部罐子还是我坚持到了Cloudera升级他们的服务?
谢谢。
我有一个了Cloudera的Hadoop版本4我的集群上安装。 它被打包与谷歌protobuffer罐子版本2.4。 在我的应用程序的代码我用protobuffer 2.5版编译protobuffer类。
这将导致在运行时尚未解决的编译问题。 有没有一种方法来运行图减少工作与外部罐子还是我坚持到了Cloudera升级他们的服务?
谢谢。
是的,你可以运行与外部罐子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