Hadoop中特定键的值太多



我在Hadoop的MapReduce中编写了一个K-Means Clustering代码。如果集群数量很少,考虑2,如果数据非常大,整个数据将被分成两组,每个Reducer将接收到特定键(即集群质心)的太多值。如何解决这个问题?

注意:我使用迭代方法来计算新的中心

在算法上,你能做的不多,因为这个算法的性质就是你所描述的。在这方面,唯一的选择是使用更多的集群并将数据划分给更多的reducer,但这会产生不同的结果。

所以,在我看来,你唯一能做的就是压缩。我指的不仅仅是使用Hadoop的压缩编解码器。

例如,您可以找到数据的紧凑表示。例如,给每个元素一个整数id,并且只把这个id传递给reducer。这将节省网络流量(将元素存储为VIntWritables,或定义自己的VIntArrayWritable扩展ArrayWritable)和每个reducer的内存。

在这种k-means的情况下,我认为组合器不适用,但如果它适用,它将大大减少网络和reducer的开销。

编辑:如果您遵循此迭代实现,您似乎可以使用组合器。请编辑你的问题来描述你已经实现的算法。

如果您有太多的洗牌,那么您将遇到OOM问题。

尝试将数据集分割成更小的块并尝试

yarn.app.mapreduce.client.job.retry-interval
和mapreduce.reduce.shuffle.retry-delay.max。

女士

,其中有更多的分割,但作业的重试将足够长,因此没有OOM问题。

相关内容

  • 没有找到相关文章

最新更新