无法使用hadoop流运行Java类文件

时间:2011-07-22 17:35:05

标签: hadoop mapreduce

每当我尝试使用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

2 个答案:

答案 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类 - 你不需要流式传输。