2012-12-18 80 views
0

我正在編寫一個分佈式系統,並且面臨將其連接到Hadoop的問題。這裏是我的情況:從Java程序運行Hadoop作業

1)我有3臺電腦(SYS1,SYS2,SYS3)

2)SYS2和SYS3是兩個不同的Hadoop集羣MasterNodes運行的分佈式系統。這兩個Hadoop集羣沒有互相連接,每個集羣都獨立運行。

3)我的分佈式系統有三部分(p1,p2,p3)。

P1坐在sys1上,並從客戶端接收Mappers/Reducers的源代碼(客戶端是另一個系統)。然後,P1將聯繫P2或P3並向他們發送mappers/redurs的代碼。

4)現在問題是P2或P3需要在Hadoop上運行作業並將結果發送回P1。

我和hadoop一起工作了一段時間,知道如何編寫一個簡單的mapReduce程序,將其轉換爲JAR文件並在Hadoop上執行它。問題是,在我的情況下,mapReduce作業的源代碼在執行過程中發送,我無法將JAR文件取出。我需要從收到的代碼中完成hadoop工作,然後在hadoop中運行它。我很感激任何關於如何解決這個問題的建議/建議?

PS。我知道一種解決方案是將接收到的映射/ Reduce代碼寫入磁盤上的文件,執行所有必需的命令來創建JAR文件並從Java代碼中使用運行時實例在shell中運行作業。但我更願意直接從Java代碼運行這個工作,而不是去解決上述解決方案的所有可能的問題。

回答

1

如何使用JavaCompiler API?然後,您可以輕鬆地動態創建一個jar文件與JarOuptputStream

這裏是一個不錯的博客文章,解釋了API: JavaBeat

+1

及後在編譯罐子,[這個答案](http://stackoverflow.com/a/9850096/698839)應該可以幫助您通過Hadoop的Java API運行作業。 –

+0

謝謝你們。我終於能夠成功地使用JavaCompiler API來即時編譯代碼並從中創建JAR文件。謝謝 – reza