在hadoop中从多个reducer写入单个文件

ttcibm8c  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(471)

我正在尝试使用hadoop运行kmeans。我想将在reducer的cleanup方法中计算的簇的质心保存到某个文件中,比如 centroids.txt . 现在,我想知道如果多个reducer的cleanup方法同时启动,并且所有的reducer都试图同时写入这个文件,将会发生什么。会内部处理吗?如果没有,是否有方法同步此任务?
注意,这不是我的reducer输出文件。这是一个额外的文件,我保持跟踪质心。我使用的是来自reducer清理方法的bufferedwriter。

um6iljoc

um6iljoc1#

每个reducer都写入一个单独的文件。多个缩减器不能修改同一个文件。

ryhaxcpt

ryhaxcpt2#

是的,你是对的。使用现有的框架无法实现这一点。清理将被多次调用。您无法同步。你可以遵循的方法有
作业成功后调用merge。 hadoop fs -getmerge <src> <localdst> [addnl] 在这里
2明确指定输出文件的位置。将此文件夹用作下一个作业的输入。
3再链一个mr,其中map和reduce不改变数据,partitioner将所有数据分配给一个reducer

rwqw0loc

rwqw0loc3#

由于质心相对较少,您可以将它们写入zookeeper。如果你有一个高读/写负载,你可能需要hbase(你也可以在这里使用,但这将是一个过度杀戮)
还要注意,hadoop上有几个k-means实现,比如mahout。其中一些实现比map/reduce更高效,比如apachehama使用bsp或spark在内存中运行

相关问题