在hadoop中将已排序文件合并为单个已排序文件

在hadoop中将已排序文件合并为单个已排序文件,hadoop,Hadoop,我有10个由mapreduce创建的文件。它们按长键排序。我想把这些文件合并成一个文件。所以他们应该被分类 我尝试了getmerge命令。但这是没有用的。因为最终文件未排序。它只将文件粘贴到单个文件中,没有任何排序。那么,解决方案是什么 回答 使用此命令: sort -mnr <src> sort-mnr 您也可以访问此,因为输出数据很大,所以将文件送到本地计算机并进行排序不是一个好的选择。我认为您应该编写自己的分区器,它可以在不重叠的范围内分割键。例如[0-1000][1000

我有10个由mapreduce创建的文件。它们按长键排序。我想把这些文件合并成一个文件。所以他们应该被分类

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

回答

使用此命令:

sort -mnr <src>
sort-mnr

您也可以访问此

,因为输出数据很大,所以将文件送到本地计算机并进行排序不是一个好的选择。我认为您应该编写自己的
分区器
,它可以在不重叠的范围内分割键。例如[0-1000][1000-2000]........

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

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

    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
    
  • 使用执行TotalSort的MR作业对输出(步骤1)进行排序(可以使用多个还原器-不会影响可伸缩性)
  • 使用以下命令合并(步骤2的)输出:


  • 步骤2可以通过此代码实现

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

    我的意思是:

  • 合并文件

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

    将输入目录指定给Map Reduce作业。它按照上述命令合并文件

  • 编写Map Reduce作业以对数据进行排序


  • 为什么不能用1个减速机运行map reduce作业?因为它需要很多时间
    hadoop -getmerge command or 
    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]