java - 在自定义键的情况下,如何为自定义分区程序设置 numReduceTask

标签 java hadoop mapreduce

HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();

@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
    // TODO Auto-generated method stub
    try {       
        String[] type=valClass.toString().split(",");

        if(type[0].equals("Mapper1")) {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
        } else {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;   
        }
    }
}

我在 Partitioner 类中使用上述代码来获取自定义类的 key 。一切正常,但我希望将文本“Mapper1”的值发送到第一个 reducer ,另一个发送到第二个 reducer 。我怎样才能做到这一点?我已将 job.numOfReduceTaks 设置为 2。请帮忙!

最佳答案

这是静态决策吧? 试试这个:

if (type[0].equals("Mapper1")) {
    return 0;
} else {
    return 1;
}

是的,在驱动程序中,您需要将 job.numOfReduceTaks 设置为 2。您做对了。

关于java - 在自定义键的情况下,如何为自定义分区程序设置 numReduceTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641787/

相关文章:

java - 为 IntelliJ 项目设置 java SDK

java - 如果进程超过分配的时间,如何杀死进程

java - 在 Spring 中使用 Twitter4J 获取推文

amazon-s3 - 使用 Amazon EC2/S3 将本地数据复制到 Hadoop 集群上的 HDFS 时出现问题

java - Hadoop MapReduce 示例卡在正在运行的作业上

mapreduce - 在哪里可以找到 hbase-0.89.20100924+28 的 HBase 级联模块?

java - 如何将 native 查询重写为 JPA 标准

hadoop - 通过 Web 界面跟踪 Hadoop 作业状态? (将Hadoop暴露给公司内部客户)

java - Apache Hadoop 2.0中的Map Reduce作业

Java 字符串变量在运行时损坏