将已排序的文件合并到hadoop中的单个排序文件中

时间:2014-01-14 05:24:14

标签: hadoop

我有10个由mapreduce创建的文件。它们按LongInt键排序。我想将这些文件合并到单个文件中。所以他们应该排序。

我尝试了 getmerge 命令。但它没用。因为最终文件没有排序。它只将文件粘贴到单个文件中而不进行任何排序。那么,解决方案是什么?

答案

使用此命令:

sort -mnr <src>

您也可以访问此sort command in linux

3 个答案:

答案 0 :(得分:0)

由于输出数据很大,将文件传输到本地计算机并进行排序不是一个好选择。我认为你应该写自己的Partitioner,它将键分成不重叠的范围。例如[0-1000] [1000-2000] .....

答案 1 :(得分:0)

执行MR作业后,您可以按照以下步骤操作:

  1. 使用以下命令合并输出内容:

    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
    
  2. 使用执行TotalSort的MR作业对输出(步骤1)进行排序(可以使用多个减速器 - 可扩展性不受影响)
  3. 使用以下方法合并输出(步骤2)

    hadoop -getmerge command or 
    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
    
  4. 使用此代码link

    可以实现第2步

答案 2 :(得分:0)

您可以合并文件,但不会对合并文件进行排序。但是,您可以编写map-reduce作业并将数据排序为单个输出。

我的意思是:

  1. 合并文件

    hadoop fs -getmerge /output/dir/on/hdfs/esired/local/output/file.txt

    将输入目录提供给Map-Reduce作业。它将文件合并为上述命令。

  2. 编写Map-Reduce作业以对数据进行排序。