Hadoop编程小技巧第4点---全局key排序类TotalOrderPartitioner
发布时间
阅读量:
阅读量
Hadoop代码测试版本:Hadoop2.4
原理:在实施MR程序之前从输入数据中随机抽取样本将抽中的样本按照一定顺序排列然后在MR中间阶段的Partition操作中使用这些排序后的值来进行数据分区从而使处理结果能够实现全局排序的目的。
难点在于若采用Hadoop官方提供的机制进行全局排序,则必须确保Mapper接收和生成的数据键保持一致;这是因为源码中的InputSampler用于随机选取样本时所使用的键值实际上是原始输入数据最基础的信息,在此过程中键值并未发生变化。例如,在如下代码(line:225)处可以看到相关的具体实现细节
for (int i = 0; i < splitsToSample ||
(i < splits.size() && samples.size() < numSamples); ++i) {
TaskAttemptContext samplingContext = new TaskAttemptContextImpl(
job.getConfiguration(), new TaskAttemptID());
RecordReader<K,V> reader = inf.createRecordReader(
全部评论 (0)
还没有任何评论哟~
