每当我试图使用Java类文件作为我的映射器和/或减速器,我得到以下错误:
. io .java.io.IOException: error=2, No such file or directory
我在终端上执行了以下命令:
hadoop@ubuntu:/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
假设您的完全限定Mapper类名(包括包)是代码。MapperTest和reducer类名是代码。ReducerTst,
将Map和reduce类打包到一个jar文件中,例如/home/hadoop/test.jar如果将命令修改为:
,命令应该可以工作。<>之前hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/流/hadoop-streaming-0.20.203.0.jar -libjars/home/hadoop/test.jar映射器代码。MapperTst 减速机码。ReducerTst -input gutenberg/* -output gutenberg- outputstch27我也遇到了同样的问题。我的解决方案是将java映射器/reducer/组合器放在指定的包中。使用默认包时,它将不起作用。
流不应该与Java类一起工作。它应该运行任何可以被视为linux命令的东西。输入数据将被馈送到输入流中,输出将被视为映射器输出。如果你在java中已经有了mapper类,你不需要流。