是否可以使用只有 map 任务和零 reduce 任务的 mapreduce 作业按字典顺序对巨大的文本文件进行排序?
文本文件的记录由换行符分隔,文件大小约为 1 Terra Byte。
如果有人能提出一种方法来实现对这个巨大文件的排序,那就太好了。
在 Map 方法中使用 TreeSet 将整个数据保存在输入拆分中并将其持久化。最后我得到了排序的文件!
实际上有一个与 Hadoop 捆绑在一起的排序示例。您可以通过检查类org.apache.hadoop.examples.Sort查看示例代码的工作原理。这本身工作得很好,但如果你想要更灵活的排序,你可以检查一下。
Hadoop 中的排序是使用分区器完成的 - 您可以编写自定义分区器以根据您的业务逻辑需求进行排序。请参阅此链接以编写自定义分区器 http://jugnu-life.blogspot.com/2012/05/custom-partitioner-in-hadoop.html
我不提倡使用普通的 linux 排序命令对 TB 的数据进行排序——您需要拆分数据以适应内存以对大文件大小进行排序:Linux 中的并行排序
改用 Hadoop MergeSort 会更好、更方便: Hadoop MergeSort
您可以在此处查看来自 Yahoo Hadoop 团队(现为 Hortonworks)的一些 Hadoop 排序基准和分析:Hadoop 排序基准