2011-07-22 38 views
0

每當我試圖使用Java類文件爲我的映射器和/或減速我收到以下錯誤:不能用Hadoop流運行Java類文件

java.io.IOException: Cannot run program "MapperTst.class": java.io.IOException: error=2, No such file or directory

我執行的終端上運行以下命令:

[email protected]:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -file /home/hadoop/codes/MapperTst.class -mapper /home/hadoop/codes/MapperTst.class -file /home/hadoop/codes/ReducerTst.class -reducer /home/hadoop/codes/ReducerTst.class -input gutenberg/* -output gutenberg-outputtstch27 

回答

3

假設你完全合格的映射器類名(包括包)被codes.MapperTest和減速器類名是codes.ReducerTst,

包裝你的地圖和減少類放入一個JAR文件中說的/ home/Hadoop的/

 
[email protected]:/usr/local/hadoop$ bin/hadoop jar \ 
    contrib/streaming/hadoop-streaming-0.20.203.0.jar \ 
    -libjars /home/hadoop/test.jar \ 
    -mapper codes.MapperTst \ 
    -reducer codes.ReducerTst \ 
    -input gutenberg/* -output gutenberg-outputtstch27 
-2

流式傳輸不應該與Java類一起工作。它應該運行任何可以視爲linux命令的東西。輸入數據將被輸入到輸入流中,輸出將被視爲映射器輸出。 如果你已經有java中的mapper類 - 你不需要流式傳輸。

1

我有同樣的問題:如果你將它修改爲Test.jar的 你的命令應該工作。解決方案是我把java映射器/減速器/組合器放在指定的包中。使用默認包,它將不起作用。它會給你你的錯誤。