繁体   English   中英

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

[英]How to sort an arbitrarily large set of data using Hadoop?

我的问题与这篇文章有关, 使用MapReduce / Hadoop对大数据进行排序 我对任意集合进行排序的想法是:

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

然后完成以下处理:

为了利用数据的局部性,可以安排新的Reducer任务以合并由先前的Reducer任务生成的多个输出文件。 因此,例如,如果K = 5,则第一个reducer任务将生成大小为50000的文件,而新的reducer任务将使用5个文件,每个文件的分类记录为50000。 新的Reducer作业将被计划,直到仅剩一个文件为止,在这种情况下,大小为250.000.000(因为R = 4)。 最后,将在另一台机器上安排新的Reducer作业,以将文件合并为单个10 ^ 9文件

我的问题 :在Hadoop中,是否可以以某种方式安排Reducer作业的执行,以便它们将文件合并到某个目录中,直到只剩下1个文件? 如果是,怎么办?

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

Hadoop排序是通过分区程序完成的。 参见例如terasort基准测试源代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM