Hadoop源码分析:Writable接口和WritableComparable接口
来源:互联网 发布:2016詹姆斯总决赛数据 编辑:程序博客网 时间:2024/05/21 00:19
1、 Writable接口
由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化,而是引入了它自己的系统。
org.apache.hadoop.io中定义了大量的可序列化对象,他们都实现了Writable接口。
1.1 Writable接口源码
package org.apache.hadoop.io;import java.io.DataOutput;import java.io.DataInput;import java.io.IOException;import org.apache.hadoop.classification.InterfaceAudience;import org.apache.hadoop.classification.InterfaceStability;@InterfaceAudience.Public@InterfaceStability.Stablepublic interface Writable { /** * Serialize the fields of this object to <code>out</code>. * */ void write(DataOutput out) throws IOException; /** * Deserialize the fields of this object from <code>in</code>. * */ void readFields(DataInput in) throws IOException;}
1.2 自定义Writable实现类
实现了Writable接口的一个典型例子如下,该代码实际上是在Writable接口源码的注释中。
public class MyWritable implements Writable { // Some data private int counter; private long timestamp; public void write(DataOutput out) throws IOException { out.writeInt(counter); out.writeLong(timestamp); } public void readFields(DataInput in) throws IOException { counter = in.readInt(); timestamp = in.readLong(); } public static MyWritable read(DataInput in) throws IOException { MyWritable w = new MyWritable(); w.readFields(in); return w; } }
2 WritableComparable接口
WritableComparable是Writable接口和java.lang.Comparable的一个子接口。
2.1 WritableComparable接口源码
package org.apache.hadoop.io;import org.apache.hadoop.classification.InterfaceAudience;import org.apache.hadoop.classification.InterfaceStability;@InterfaceAudience.Public@InterfaceStability.Stablepublic interface WritableComparable<T> extends Writable, Comparable<T> {}
2.2 WritableComparable一个典型实现类
public class MyWritableComparable implements WritableComparable<MyWritableComparable> { // Some data private int counter; private long timestamp; public void write(DataOutput out) throws IOException { out.writeInt(counter); out.writeLong(timestamp); } public void readFields(DataInput in) throws IOException { counter = in.readInt(); timestamp = in.readLong(); } public int compareTo(MyWritableComparable o) { int thisValue = this.value; int thatValue = o.value; return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1)); } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + counter; result = prime * result + (int) (timestamp ^ (timestamp >>> 32)); return result } }
2.3 IntWritable
IntWritable实现了WritableComparable。
package org.apache.hadoop.io;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import org.apache.hadoop.classification.InterfaceAudience;import org.apache.hadoop.classification.InterfaceStability;@InterfaceAudience.Public@InterfaceStability.Stablepublic class IntWritable implements WritableComparable<IntWritable> { private int value; public IntWritable() {} public IntWritable(int value) { set(value); } /** Set the value of this IntWritable. */ public void set(int value) { this.value = value; } /** Return the value of this IntWritable. */ public int get() { return value; } @Override public void readFields(DataInput in) throws IOException { value = in.readInt(); } @Override public void write(DataOutput out) throws IOException { out.writeInt(value); } /** Returns true iff <code>o</code> is a IntWritable with the same value. */ @Override public boolean equals(Object o) { if (!(o instanceof IntWritable)) return false; IntWritable other = (IntWritable)o; return this.value == other.value; } @Override public int hashCode() { return value; } /** Compares two IntWritables. */ @Override public int compareTo(IntWritable o) { int thisValue = this.value; int thatValue = o.value; return (thisValue<thatValue ? -1 : (thisValue==thatValue ? 0 : 1)); } @Override public String toString() { return Integer.toString(value); } /** A Comparator optimized for IntWritable. */ public static class Comparator extends WritableComparator { public Comparator() { super(IntWritable.class); } @Override public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { int thisValue = readInt(b1, s1); int thatValue = readInt(b2, s2); return (thisValue<thatValue ? -1 : (thisValue==thatValue ? 0 : 1)); } } static { // register this comparator WritableComparator.define(IntWritable.class, new Comparator()); }}
阅读全文
0 0
- Hadoop源码分析:Writable接口和WritableComparable接口
- Hadoop 之 Writable , WritableComparable 接口
- Writable接口 与 WritableComparable接口
- Hadoop WritableComparable接口
- Hadoop WritableComparable接口
- Hadoop 之 WritableComparable 接口
- Hadoop WritableComparable接口
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop自定义实现Writable/WritableComparable接口的类方法及应用
- Hadoop 实现Writable接口
- hadoop的WritableComparable与Writable
- hadoop自定义对象序列化Writable和WritableComparable
- Hadoop WritableComparable接口收集的知识
- 实现Hadoop的Writable接口Implementing Writable interface of Hadoop
- Radiolink AT9驱动安装及固件升级
- myeclipse tomcat 运行项目报OOM
- Day11多态部分-2-1
- nginx 负载均衡
- 深入分析java web中文编码问题(其三)
- Hadoop源码分析:Writable接口和WritableComparable接口
- Bug管理系统UML2.0建模实例(四)
- Day11多态部分-3
- img标签 onerror事件
- 软件测试学习笔记第三课:测试类型
- Struts2中Action的动态方法调用
- Python入门 第一天(raw、Unicode、布尔类型、list、tuple)
- Day11多态部分-4
- Python简化类例八:静态变量或方法的定义