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

我想弄清楚如何设置引用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”

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

选项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放在分布式缓存中。

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

 hdfs://path/to/your/file 

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

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

这是一个例子(使用包含你的工作和驱动程序类的jar):

  hadoop jar jarfilename.jar DriverClassInTheJar -libjars comma-separated-list-of-libs   

您可以将jar路径指定为
-libjars hdfs:// namenode / path_to_jar,我在Hive中使用过它。