我有10个由mapreduce创建的文件。它们按LongInt键排序。我想将这些文件合并到单个文件中。所以他们应该排序。
我尝试了 getmerge 命令。但它没用。因为最终文件没有排序。它只将文件粘贴到单个文件中而不进行任何排序。那么,解决方案是什么?
答案
使用此命令:
sort -mnr <src>
您也可以访问此sort command in linux
答案 0 :(得分:0)
由于输出数据很大,将文件传输到本地计算机并进行排序不是一个好选择。我认为你应该写自己的Partitioner
,它将键分成不重叠的范围。例如[0-1000] [1000-2000] .....
答案 1 :(得分:0)
执行MR作业后,您可以按照以下步骤操作:
使用以下命令合并输出内容:
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
使用以下方法合并输出(步骤2)
hadoop -getmerge command or
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
使用此代码link
可以实现第2步答案 2 :(得分:0)
您可以合并文件,但不会对合并文件进行排序。但是,您可以编写map-reduce作业并将数据排序为单个输出。
我的意思是:
合并文件
hadoop fs -getmerge /output/dir/on/hdfs/esired/local/output/file.txt
或
将输入目录提供给Map-Reduce作业。它将文件合并为上述命令。
编写Map-Reduce作业以对数据进行排序。