作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的应用程序中,我想根据键创建尽可能多的 reducer 作业。现在,我当前的实现将所有键和值写入单个(reducer)输出文件中。所以为了解决这个问题,我使用了一个分区器,但我不能调用类。分区器应该在选择映射任务之后和选择 reduce task 之前调用,但它没有。分区器的代码如下
public class MultiWayJoinPartitioner extends Partitioner<Text, Text> {
@Override
public int getPartition(Text key, Text value, int nbPartitions) {
return (key.getFirst().hashCode() & Integer.MAX_VALUE) % nbPartitions;
return 0;
}
}
这段代码是否正确,可以根据键和值对文件进行分区,输出会自动传输到 reducer??
最佳答案
您不会显示所有代码,但通常有一个类(称为“作业”或“MR”类)配置映射器、缩减器、分区器等,然后实际将作业提交给 hadoop .在此类中,您将拥有一个具有许多属性的作业配置对象,其中之一是 reducer 的数量。将此属性设置为您的 hadoop 配置可以处理的任何数量。
一旦为作业配置了给定数量的 reducer,该数量将被传递到您的分区中(顺便说一下,这看起来是正确的)。您的分区程序将开始为键/值对返回适当的缩减程序/分区。这就是您获得尽可能多的 reducer 的方式。
关于hadoop - 如何在 Hadoop v 0.21 中调用 Partitioner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034204/
我是一名优秀的程序员,十分优秀!