2015-01-01 60 views
0

我試圖從實現Tool接口的應用程序啓動map reduce作業。 該應用程序幾乎沒有其他的東西就像地圖縮減作業的先決條件。將jar添加到啓動map的代碼的類路徑reduce作業

該類使用一些第三方庫,我怎麼那些罐子添加到類路徑,同時使用命令運行的jar:Hadoop的罐子< myjar這一> [參數]

從這個Cloudera's post我試圖設置HADOOP_CLASSPATH env var到第三方jar,但它沒有解決。 上面提到的第三方jar只是由啓動作業的類而不是Mapper/Reducer類所要求的。所以我不需要把它們放到分佈式緩存中。

當我將$ HADOOP_HOME/lib下需要的這些第三方jar複製時,它可以工作,但我需要更清晰的解決方案。

非常感謝。注:我知道把所有的第三方jar放在my-map-reduce-job.jar jar的lib目錄中是可行的,但我沒有這個自由,jar是用Maven創建的,我想要這些第三方罐子在my-map-reduce-job.jar之外

+0

這就是當您嘗試調用mapred時。不是嗎?或者甚至當你嘗試hadoop fs -ls時你會得到例外? – SMA

+0

我沒有得到任何hadoop -fs命令的異常,我得到 線程「main」java.lang.NoClassDefFoundError中的異常對於在第三方jar中的類而言,是 。 謝謝 – Niks

+0

是的,這意味着您的每個映射進程都需要第三方jar。因此,如果您有多節點羣集,則需要將這些jar分發到其他計算機上 – SMA

回答

2

對於將來的參考 - 在客戶端計算機上設置env var HADOOP_CLASSPATH fron您正在啓動映射reduce任務是要走的路。

我想通了我的錯誤,我以錯誤的方式導出HADOOP_CLASSPATH。 的罐子之間的分隔符是依賴於平臺的,用於Unix,其冒號(:)

出口HADOOP_CLASSPATH = /路徑/到/我/ jar1:/路徑/到/我/ jar2 然後 hadoop的罐子[mainClass ] [args]

如果在其他地方已經預定義了您的jar,可能需要將它們附加到HADOOP_CLASSPATH env var。 export HADOOP_CLASSPATH = $ HADOOP_CLASSPATH:/ path/to/my/jar1:/ path/to/my/jar2

相關問題