2011-12-16 59 views
0

我的问题涉及到这个职位Sorting large data using MapReduce/Hadoop。 我排序的任意设定的思路是:如何使用Hadoop对任意大量的数据进行排序?

  1. 我们有记录的大型文件,比如10^9条。
  2. 该文件被划分为M个映射器。每个映射器对大小进行分割,比如说使用QuickSort的10000条记录,并输出排序后的子序列。输出键范围在1到R之间,其中R是减速任务的数量(假设R = 4)。该值是已排序的子序列。
  3. 每个Reducer读取K个子序列并合并它们(迭代地从子序列中取最小元素,直到子序列为空)。输出写入文件。

那么下面的处理完成:

要利用数据的局部性的优势,新的减速任务可以安排到合并由以前的减速任务产生了一些输出文件。因此,例如,如果K = 5,则第一个减速器任务将生成50000个大小的文件,而新减速器任务将与每个50000个排序记录的5个文件一起工作。新Reducer作业将被调度,直到只剩下一个文件,在这种情况下,大小为250.000.000(因为R = 4)。最后,一个新的减速工作会安排另一台机器上的文件合并成一个单一的10^9文件

我的问题:是否有可能在Hadoop中安排减速作业的执行以这样一种方式,他们合并某些目录中的文件直到只剩下1个文件?如果是,如何?

另一种情况是在每个合并步骤之后计划MapReduce作业,例如,大小为50000的文件可以通过减少在其他机器上运行的任务,然后在其他机器上运行大小为250.000的文件来并行合并等。但是这会产生大量的网络流量。无论如何,这个问题对于这种情况仍然有效 - 如何链接几个MapReduce作业,以便在输出一个结果文件后停止链接?

+0

没有开销,它为您做了所有的事情,它确实是最佳的。他们赢得了terasort基准。 – 2011-12-16 19:13:12

回答

相关问题