如何在hadoop文件系统上设置Java程序的类路径

时间:2012-07-27 22:40:47

标签: java hadoop classpath

我想弄清楚如何设置引用HDFS的类路径?我找不到任何参考。

 java -cp "how to reference to HDFS?" com.MyProgram 

如果我不能引用hadoop文件系统,那么我必须在每个hadoop机器上复制$ HADOOP_HOME下所有引用的第三方库/ jar ...但我想通过将文件放到hadoop文件系统来避免这种情况。这可能吗?

程序运行的示例hadoop命令行(我的期望是这样的,也许我错了):

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar -input inputfileDir -output outputfileDir -mapper /home/nanshi/myprog.java -reducer NONE -file /home/nanshi/myprog.java

但是,在上面的命令行中,我如何添加java classpath?喜欢     -cp“/home/nanshi/wiki/Lucene/lib/lucene-core-3.6.0.jar:/home/nanshi/Lucene/bin”

3 个答案:

答案 0 :(得分:11)

我想你要做的是在分布式程序中包含第三方库。你可以做很多选择。

选项1)我找到的最简单的选项是将所有jar放在所有节点上的$ HADOOP_HOME / lib(例如/usr/local/hadoop-0.22.0/lib)目录中,然后重新启动jobtracker和tasktracker。

选项2)使用libjars选项命令     hadoop jar -libjars comma_seperated_jars

选项3)将jar包含在jar的lib目录中。在创建jar时你必须这样做。

选项4)安装计算机中的所有jar并将其位置包含在类路径中。

选项5)您可以尝试将这些jar放在分布式缓存中。

答案 1 :(得分:3)

您无法在类路径中添加HDFS路径。 java可执行文件无法解释如下内容:

hdfs://path/to/your/file

但是,可以使用 -libjars 选项将第三方库添加到需要这些库的每个任务的类路径中。这意味着你需要有一个所谓的驱动程序类(实现工具)来设置和启动你的工作,并在运行该驱动程序类时在命令行上使用-libjars选项。 反过来,工具使用GenericParser来解析命令行参数(包括-libjars),并在JobClient的帮助下完成所有必要的工作,将lib发送到需要它们的所有机器,并在类路径上设置它们。那些机器。

除此之外,为了运行MR作业,您应该使用位于发行版的bin /目录中的hadoop脚本。

以下是一个示例(使用包含您的作业和驱动程序类的jar):

 hadoop jar jarfilename.jar DriverClassInTheJar 
 -libjars comma-separated-list-of-libs <input> <output>

答案 2 :(得分:2)

您可以将jar路径指定为
-libjars hdfs:// namenode / path_to_jar ,我把它和Hive一起使用了。