试着得到尽可能多的钥匙
public class CustomPartitioner extends Partitioner<Text, Text>
{
public int getPartition(Text key, Text value,int numReduceTasks)
{
System.out.println("In CustomP");
return (key.toString().hashCode()) % numReduceTasks;
}
}
驾驶员等级
job6.setMapOutputKeyClass(Text.class);
job6.setMapOutputValueClass(Text.class);
job6.setOutputKeyClass(NullWritable.class);
job6.setOutputValueClass(Text.class);
job6.setMapperClass(LastMapper.class);
job6.setReducerClass(LastReducer.class);
job6.setPartitionerClass(CustomPartitioner.class);
job6.setInputFormatClass(TextInputFormat.class);
job6.setOutputFormatClass(TextOutputFormat.class);
但我在一个文件里得到了出口。
我做错什么了吗
4条答案
按热度按时间kcwpcxri1#
维尼,你需要按照下面的步骤来完成任务
mapper2是inputformat应该是nlineinputformat,所以reducer的输出就是每个键都会有相应的mapper,而mapper的输出将是每个键的一个单独的文件。
mapper 1和reducer是您现有的mr工作。
希望这有帮助。
干杯
抱怨
nfg76nw02#
您需要指定reduce任务的数量,该数量等于键的数量,并且还需要基于键的in partitioner类返回分区。例如,如果您的输入有4个键(这里是木头、砖石、钢筋混凝土等),那么getpartition方法如下所示。。
相应的输出将被收集到相应的减速器中..请尝试在cli中运行,而不是在eclipse中运行
wwtsj6pe3#
您尚未配置要运行的减速器的数量。
您可以使用下面的api配置它
作业集(10)//根据您的群集更改号码
另外,可以在从命令行执行时设置
-d mapred.reduce.tasks=10
希望这有帮助。
tpgth1q74#
如果不指定减速机的编号,则无法控制减速机的编号:-)。但是仍然不能保证在不同的reducer上获得所有的键,因为您不确定在输入数据中会得到多少不同的键,并且哈希分区函数可能会为两个不同的键返回相同的数字。如果您想实现您的解决方案,那么您必须事先知道不同键的数量,然后相应地修改分区函数。