在hadoop中从多个还原器写入单个文件



我正在尝试使用Hadoop运行Kmeans。我想把在Reducer的清理方法中计算出的簇的质心保存到某个文件中,比如centroids.txt。现在,我想知道如果多个reducer的清理方法同时启动,并且所有reducer都试图同时写入该文件,会发生什么。会在内部处理吗?如果没有,是否有方法同步此任务?

请注意,这不是我的reducer输出文件。这是一个额外的文件,我正在维护以跟踪质心。我正在使用reducer的清理方法中的BufferedWriter来执行此操作。

是的,你是对的。使用现有框架无法实现这一点。清理将被多次调用。您无法同步。可能的你可以遵循的方法是

  1. 作业成功后调用合并。

    hadoop fs -getmerge <src> <localdst> [addnl]

    此处

2明确指定输出文件的位置。使用此文件夹作为下一个作业的输入。

3再链一个MR,其中map和reduce不会更改数据,partitioner将所有数据分配给单个reducer

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

由于质心相对较少,您可以将它们写入zookeeper中。如果你有很高的读/写负载,你可能需要HBase(你也可以在这里使用,但这会是一个过度使用)

还要注意,Hadoop上有几个类似于Mahout的k-means实现。其中一些实现比map/reduce更高效,比如ApacheHama,它使用BSP或Spark,在内存中运行

相关内容

  • 没有找到相关文章

最新更新