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

在hadoop中从多个还原程序写入单个文件,hadoop,file-io,mapreduce,hadoop2,Hadoop,File Io,Mapreduce,Hadoop2,我正在尝试使用Hadoop运行Kmeans。我想将在Reducer的cleanup方法中计算的簇的质心保存到某个文件,比如centroids.txt。现在,我想知道如果多个还原程序的清理方法同时启动,并且所有还原程序都试图同时写入此文件,将会发生什么。会否由内部处理?如果没有,是否有方法同步此任务 请注意,这不是我的reducer输出文件。这是一个额外的文件,我保持跟踪质心。我正在使用reducer的清理方法中的BufferedWriter来执行此操作。每个reducer都会写入一个单独的文件。

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


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

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

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

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

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

  • 作业成功后调用merge

    hadoop fs-getmerge[addnl]

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

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


    这不是减速器的输出。我正在使用Reducer中的BufferedWriter写入这个附加文件,即centroids.txt。这不是一个好主意。相反,从每个减速机编写一个单独的文件,并进行一些后处理以合并这些文件。您的建议很好,但不适合我的情况。这是一个学术项目,我们不允许使用其他框架,如Zookeeper或Mahout。