如果我有一个每行随机整数的文件,并想使用Hadoop对文件进行排序,我的映射器和reducer的输入/输出键和值是什么?
雅虎对Peta和Tera字节的数据进行了排序。其他公司(包括Google)定期这样做,您可以在互联网上搜索排序基准。雅虎已经发表了一篇关于他们如何做到这一点的论文。
"org.apache.hadoop.examples。Terasort '包有用于排序数据的示例代码。
在Cloudera博客上找到更多信息。有一些内置的类使排序更容易。
HADOOP-3019的总顺序分区。作为TeraSort记录的衍生产品,Hadoop现在拥有用于高效生成全局排序输出的库类。使用InputSampler对输入数据的一个子集进行采样,然后使用TotalOrderPartitioner将映射输出划分为大小大致相等的分区。非常整洁的东西——非常值得一看,即使你不需要使用它。
您也可以在这里找到更多信息。
一个更理论化的答案:考虑不同的排序算法(快速排序、合并排序、冒泡排序等....).
因为我们知道你可以在线性时间内合并两个排序列表,所以通过在排序算法上面添加一个"合并"步骤来并行化任何排序算法都很简单。因此,您可以使用多种选项来完成此任务。
但是,terasort比这聪明得多,因为简单地拆分和合并并不能解决所有问题....当你有很多分割时,你最后的"合并"步骤对应于一个大规模的缩减步骤。