2013-07-08 36 views
1

我想寫一些「引導」類,這將看MQ的消息和提交的map/reduce作業的Hadoop。這些作業大量使用一些外部庫。目前,我已經實現了這些作業,打包爲帶有bin,lib和日誌文件夾的ZIP文件(我正在使用maven-assembly-plugin將事情聯繫在一起)。的Hadoop - 提交作業,有很多的依賴(jar文件)

現在我想爲mapper和reducer小包裝,將使用現有的應用程序的部分。

就我所知,當提交作業時,Hadoop會嘗試查找帶有mapper/reducer類的JAR文件,並將該jar通過網絡複製到數據節點,該節點將用於處理數據。但是,我不清楚如何告訴Hadoop複製所有依賴關係?

我可以使用maven-shade-plugin創建一個帶有作業和依賴關係的超級jar文件,另一個用於引導程序的jar(該jar使用hadoop shell腳本執行)。

請指教。

回答

1

一種方法可能是將所需的jar放入分佈式緩存中。另一種方法是在Hadoop節點上安裝所有必需的罐子並告訴TaskTracker關於它們的位置。我建議你通過post一次。談論同樣的問題。

0

使用maven來管理依賴關係,並確保在構建和部署期間使用正確的版本。流行的IDE具有Maven支持,因此您不必擔心爲編輯和構建構建類路徑。最後,您可以指示maven構建一個包含應用程序和所有依賴關係的jar包(一個「jar-with-dependencies」),從而使部署變得非常簡單。

至於依賴性,Hadoop等,這些都保證是在運行時類路徑,就可以用「提供」,所以他們不會在尤伯杯罐子包括一個範圍定義它們。

0

使用-libjars hadoop的啓動腳本指定遙控器上的JVM上運行的工作依賴的選項; 爲本地JVM上運行JobClient相關性集合使用$ HADOOP_CLASSPATH變量

詳細的討論是在這裏:http://grepalex.com/2013/02/25/hadoop-libjars/

+0

有張貼在這裏詳細的解答:http://stackoverflow.com/questions/6890087/problem-with- libjars功能於Hadoop的 –