我有一个自定义分区器,如下所示:
import java.util.*;
import org.apache.hadoop.mapreduce.*;
public static class SignaturePartitioner extends Partitioner<Text,Text>
{
@Override
public int getPartition(Text key,Text value,int numReduceTasks)
{
return (key.toString().Split(' ')[0].hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
我设置hadoop流参数如下
-file SignaturePartitioner.java \
-partitioner SignaturePartitioner \
然后我得到一个错误:找不到类。
你知道有什么问题吗?
致以最诚挚的问候,
2条答案
按热度按时间yquaqz181#
我也面临着同样的问题,但经过大量的研究终于解决了。
根本原因是streaming-2.6.0.jar使用mapredapi而不是mapreduceapi。另外,实现partitioner接口,而不是扩展partitioner类。以下几点对我有用:
编译mypartitioner,创建jar,然后,
8nuwlpux2#
-文件signaturepartitioner.java-partitioner signaturepartitioner
-file选项将使该文件在hadoop框架所需的所有节点上都可用。它需要指向类名而不是java文件名。