【问题标题】:Stable sort a huge file稳定排序一个巨大的文件
【发布时间】:2013-10-09 04:10:17
【问题描述】:

我想在一个列上对一个大文件进行排序。排序应该是稳定的。目前,我正在使用 unix 排序(带有 -s 选项)。但这很慢。在 hdfs 中是否有众所周知的例程来执行此操作?

我试过 PIG 的 orderby 但不稳定。

【问题讨论】:

  • 文件有多大(GB、TB、PB)?显示它的一些行(或行)。在上面运行sort -s 有多慢(几小时,几天?)?

标签: linux sorting hadoop apache-pig bigdata


【解决方案1】:

我会将文件拆分为多个块(您可能可以在命令行上执行此操作,但这取决于数据;您可能需要一个程序来执行此操作)。块大小由您决定(几兆字节就可以了;确保 unix 排序对一个块来说是快速的)。

然后使用 unix sort (sort -s -k...) 对每个块进行排序。如果您有多台机器,则可以并行执行。

然后使用 unix 排序 (sort -m -k...) 合并所有已排序的块。如果您以正确的顺序指定文件列表,这也应该是稳定的。如果不是(我没有测试也没有找到任何信息,但很可能它是稳定的),那么您可能需要编写自己的合并程序,这应该不是很复杂。

如果您有太多块无法有效合并,您可以将块 1..10 合并到块 a,然后将块 11..20 合并到块 b(同样,您可以在多台机器上并行执行此操作),并且最后合并块 a..z。但我怀疑这是否真的需要。

【讨论】:

    【解决方案2】:

    您可以使用std::stable_sort 编写一些C++11 程序

    如果文件很大以至于大于可用的 RAM,您可以考虑对块进行排序并合并它们。

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 2017-05-13
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2021-02-15
      相关资源
      最近更新 更多