每当我尝试使用Java类文件作为我的映射器和/或reducer时,我都会收到以下错误:
java.io.IOException:无法运行程序“MapperTst.class”:java.io.IOException:error = 2,没有这样的文件或目录
我在终端上执行了以下命令:
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
答案 0 :(得分:3)
假设您的完全限定的Mapper类名(包括包)是codes.MapperTest,而reducer类名是codes.ReducerTst,
将Map打包并将类缩减为jar文件,例如/home/hadoop/test.jar 如果将其修改为:
,则命令应该有效hadoop@ubuntu:/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
答案 1 :(得分:-2)
Streaming不适用于Java类。它应该运行任何可以被视为linux命令的东西。输入数据将被输入到输入流中,输出将被视为映射器输出。 如果你已经在java中有mapper类 - 你不需要流式传输。