- 因爲map、reduce 之間傳遞的參數是通過本地持久化來實現,所以需要實現序列化接口。但由於Java的 Serializable接口是一個重量級的API,所以Hadoop自定義一套新的API。
- 如果傳遞的參數是基本類型和字符串,可以直接使用Text,LongWritable,IntWritable 。但如果是自定義的 Java Bean,就需要自己實現Writable接口。
- Writable接口有兩個方法需要實現:
- write(DataOutput var1) 會在序列化的時候被調用
- readFields(DataInput var1) 方法會在反序列化的時候被調用
4. 默認情況下,從map端到reduce端的鍵值對傳輸會按照key進行排序。假設map端輸出的key是Text,無需實現其compareTo方法,因爲系統默認已經實現了。
自定義排序WritableComparable
原理分析
bean對象做爲key傳輸,需要實現WritableComparable接口重寫compareTo方法,就可以實現排序。
@Override
public int compareTo(FlowBean o) {
int result;
// 按照總流量大小,倒序排列
if (sumFlow > bean.getSumFlow()) {
result = -1;
}else if (sumFlow < bean.getSumFlow()) {
result = 1;
}else {
result = 0;
}
return result;
}