Java 使用-libjars的MapReduce流式处理作业,自定义分区程序失败:";“未找到类”;
我正在尝试将自定义(java)分区程序附加到MapReduce流媒体作业。我正在使用此命令:Java 使用-libjars的MapReduce流式处理作业,自定义分区程序失败:";“未找到类”;,java,hadoop,mapreduce,streaming,hadoop-partitioning,Java,Hadoop,Mapreduce,Streaming,Hadoop Partitioning,我正在尝试将自定义(java)分区程序附加到MapReduce流媒体作业。我正在使用此命令: ../bin/hadoop jar ../contrib/streaming/hadoop-streaming-1.2.1.jar \ -libjars ./NumericPartitioner.jar -D mapred.map.tasks=12 -D mapred.reduce.tasks=36 \ -input /input -output /output/keys -mapper "map_th
../bin/hadoop jar ../contrib/streaming/hadoop-streaming-1.2.1.jar \
-libjars ./NumericPartitioner.jar -D mapred.map.tasks=12 -D mapred.reduce.tasks=36 \
-input /input -output /output/keys -mapper "map_threeJoin.py" -reducer "keycount.py" \
-partitioner newjoin.NumericPartitioner -file "map_threeJoin.py" \
-cmdenv b_size=6 -cmdenv c_size=6
其中最重要的一点是文件NumericPartitioner.jar,它位于运行命令的同一文件夹中(比Hadoop根目录安装低一级)
package newjoin;
import java.util.*;
import java.lang.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.io.*;
public class NumericPartitioner extends Partitioner<Text,Text>
{
@Override
public int getPartition(Text key,Text value,int numReduceTasks)
{
return Integer.parseInt(key.toString().split("\\s")[0]) % numReduceTasks;
}
}
这里发生了什么,我如何让mapReduce找到我的分区器?-libjars选项是使您的第三方JAR可用于远程映射,并减少任务JVM。 但是为了使客户机JVM(运行hadoop JAR命令时创建的JVM)可以使用这些相同的第三方JAR,需要在hadoop_类路径变量中指定 $export HADOOP\u CLASSPATH=$HADOOP\u CLASSPATH:./NumericPartitioner.jar ../bin/hadoop-jar../contrib/streaming/hadoop-streaming-1.2.1.jar\
-libjars${HADOOP\u CLASSPATH}
-D mapred.map.tasks=12-D mapred.reduce.tasks=36\
-输入/输入-输出/输出/键-映射器“map_threeJoin.py”-还原器“keycount.py”\
-partitioner newjoin.NumericPartitioner-文件“map\u threeJoin.py”\
-cmdenv b_大小=6-cmdenv c_大小=6
-partitioner : class not found : newjoin.NumericPartitioner
Streaming Command Failed!