Hadoop 实验 :二次排序
一、 实验目的
- 进一步立即 MapReduce 思想
- 编写 SecondarySort 程序。
二、 实验要求
3. 要能理解 MapReduce 编程思想
4. 会编写 MapReduce 版本二次排序程序
5. 其执行并分析执行过程。
三、 实验原理
MR 默认会对键进行排序,然而有的时候我们也有对值进行排序的需求。满足这种
需求一是可以在 reduce 阶段排序收集过来的 values,但是,如果有数量巨大的 values 可
能就会导致内存溢出等问题,这就是二次排序应用的场景——将对值的排序也安排到
MR 计算过程之中,而不是单独来做。
二次排序就是首先按照第一字段排序,然后再对第一字段相同的行按照第二字段排
序,注意不能破坏第一次排序的结果。
**
实验步骤
编写代码:(分为两个类)
在编写Java中需导入lib包,lib包可在Hadoop中自己去拖下来。
IntPair类:
package com.company;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.WritableComparable;
public class IntPair implements WritableComparable<IntPair>{
private int first;
private int second;
public IntPair(){
}
public IntPair(int left, int right){
set(left, right);
}
public void set(int left, int right){
first = left;
second = right;
}
@Override
public void readFields(DataInput in) throws IOException{
first = in.readInt();
second = in.readInt();
}
@Override
public void write(DataOutput out) throws IOException{
out.writeInt(first);
out.writeInt(second);
}
@Override
public int compareTo(IntPair o)
{
if (first != o.first){
return first < o.first ? -1 : 1;
}else if (second != o.second){
return second < o.second ? -1 : 1;
}else{
return 0;
}
}
@Override
public int hashCode(){
return first * 157 + second;
}
@Override
public boolean equals(Object right){
if (right == null)
return false;
if (this &#