Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用-libjars的MapReduce流式处理作业,自定义分区程序失败:";“未找到类”;_Java_Hadoop_Mapreduce_Streaming_Hadoop Partitioning - Fatal编程技术网

Java 使用-libjars的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

我正在尝试将自定义(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_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!