簡體   English   中英

如何在hadoop文件系統上設置Java程序的類路徑

[英]how to set classpath for a Java program on hadoop file system

我想弄清楚如何設置引用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選項。 反過來,工具使用GenericParser來解析命令行參數(包括-libjars),並在JobClient的幫助下完成所有必要的工作,將lib發送到需要它們的所有機器,並在類路徑上設置它們。那些機器。

除此之外,為了運行MR作業,您應該使用位於發行版的bin /目錄中的hadoop腳本。

這是一個示例(使用包含您的作業和驅動程序類的jar):

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

您可以將jar路徑指定為
-libjars hdfs:// namenode / path_to_jar,我在Hive中使用過它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM