我正在尝试使用hadoop运行kmeans。我想将在reducer的cleanup方法中计算的簇的质心保存到某个文件中,比如 centroids.txt . 现在,我想知道如果多个reducer的cleanup方法同时启动,并且所有的reducer都试图同时写入这个文件,将会发生什么。会内部处理吗?如果没有,是否有方法同步此任务?注意,这不是我的reducer输出文件。这是一个额外的文件,我保持跟踪质心。我使用的是来自reducer清理方法的bufferedwriter。
centroids.txt
um6iljoc1#
每个reducer都写入一个单独的文件。多个缩减器不能修改同一个文件。
ryhaxcpt2#
是的,你是对的。使用现有的框架无法实现这一点。清理将被多次调用。您无法同步。你可以遵循的方法有作业成功后调用merge。 hadoop fs -getmerge <src> <localdst> [addnl] 在这里2明确指定输出文件的位置。将此文件夹用作下一个作业的输入。3再链一个mr,其中map和reduce不改变数据,partitioner将所有数据分配给一个reducer
hadoop fs -getmerge <src> <localdst> [addnl]
rwqw0loc3#
由于质心相对较少,您可以将它们写入zookeeper。如果你有一个高读/写负载,你可能需要hbase(你也可以在这里使用,但这将是一个过度杀戮)还要注意,hadoop上有几个k-means实现,比如mahout。其中一些实现比map/reduce更高效,比如apachehama使用bsp或spark在内存中运行
3条答案
按热度按时间um6iljoc1#
每个reducer都写入一个单独的文件。多个缩减器不能修改同一个文件。
ryhaxcpt2#
是的,你是对的。使用现有的框架无法实现这一点。清理将被多次调用。您无法同步。你可以遵循的方法有
作业成功后调用merge。
hadoop fs -getmerge <src> <localdst> [addnl]
在这里2明确指定输出文件的位置。将此文件夹用作下一个作业的输入。
3再链一个mr,其中map和reduce不改变数据,partitioner将所有数据分配给一个reducer
rwqw0loc3#
由于质心相对较少,您可以将它们写入zookeeper。如果你有一个高读/写负载,你可能需要hbase(你也可以在这里使用,但这将是一个过度杀戮)
还要注意,hadoop上有几个k-means实现,比如mahout。其中一些实现比map/reduce更高效,比如apachehama使用bsp或spark在内存中运行