Sorting 如何使用Hadoop对任意大的数据集进行排序?

Sorting 如何使用Hadoop对任意大的数据集进行排序?,sorting,hadoop,mapreduce,Sorting,Hadoop,Mapreduce,我的问题与这篇文章有关。 我对任意集合进行排序的想法是: 我们有一个包含记录的大文件,比如说10^9条记录 该文件在M个映射器之间拆分。每个映射器对大小的一部分进行排序,例如使用快速排序对10000条记录进行排序,并输出排序后的子序列。输出键的范围在1和R之间,其中R是reducer任务的数量(假设R=4)。该值是已排序的子序列 每个Reducer读取K个子序列并合并它们(迭代地从子序列中获取最小元素,直到子序列为空)。输出被写入一个文件 然后进行以下处理: 为了利用数据的局部性,可以安排新的R

我的问题与这篇文章有关。 我对任意集合进行排序的想法是:

  • 我们有一个包含记录的大文件,比如说10^9条记录
  • 该文件在M个映射器之间拆分。每个映射器对大小的一部分进行排序,例如使用快速排序对10000条记录进行排序,并输出排序后的子序列。输出键的范围在1和R之间,其中R是reducer任务的数量(假设R=4)。该值是已排序的子序列
  • 每个Reducer读取K个子序列并合并它们(迭代地从子序列中获取最小元素,直到子序列为空)。输出被写入一个文件
  • 然后进行以下处理:

    为了利用数据的局部性,可以安排新的Reducer任务合并前一个Reducer任务生成的多个输出文件。例如,如果K=5,第一个reducer任务将生成大小为50000的文件,而新的reducer任务将处理5个文件,每个文件包含50000条排序记录。新的减速器作业将被调度,直到只剩下一个文件,在这种情况下,大小为250.000.000(因为R=4)。最后,将在另一台计算机上安排一个新的Reducer作业,以将文件合并到单个10^9文件中

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


    另一种情况是在每个合并步骤后安排MapReduce作业,例如,大小为50000的文件将通过在其他机器上运行的reduce任务并行合并,然后在其他机器上运行大小为250.000的文件,等等。但这将产生大量网络流量。在任何情况下,这个问题对于本例也是有效的-如何链接多个MapReduce作业,以便在仅输出一个结果文件后停止链接?

    Hadoop排序是使用。例如,请参见

    的示例,它没有开销,它为您完成了所有工作,而且它确实是最佳的。他们赢了。