`

在Hadoop平台上运行程序时,导入第三方类库的方法

阅读更多

    在将编写的MapReduce程序提交到Hadoop集群中运行时,往往需要导入第三方类库,否则很容易报出:Error: java.lang.ClassNotFoundException:异常,首先说一下以下四种解决方法:

 

(1) 将第三方jar包放在集群中每个节点$HADOOP_HOME/lib目录下或者JDK的ext目录下,其中$HAOOP_HOME为Hadoop的根目录。

 

 

      这种方法在linux下还可以写一个shell脚本,用scp或者rcp命令来实现,这脱离了java范畴,依赖操作系统,不好。

 

(2) 将所有的jar包解压缩,然后把他和源程序的类文件打包到一个jar包中,这种方法比较笨重,可以用程序去实现。

 

(3) 用DistributedCache .addFileToClassPath(Path file, Configuration conf)或者DistributedCache .addArchiveToClassPath(Path archive, Configuration conf) ,其中路径是HDFS上的一个路径,不要用HDFS://等类似的路径,而要用相对路径。

(4) 将第三方jar包和源程序类文件打包到一个jar包中,设置manifest.mf的classpath值,为jar包所在的路径,这个路径必须是相对应当前jar包的路径。

 

原理:

   主要借鉴了在提交作业到Haodop中时,hadoop寻找classpath的方式,寻找的地方来解决的。

分享到:
评论
2 楼 zz_19830103 2011-07-07  
谢谢了,学习了
1 楼 muruan 2010-12-24  
真是绝好文章,很有帮助,谢谢博主!

相关推荐

Global site tag (gtag.js) - Google Analytics