背景知识:
Hadoop类、接口的标识:
Hadoop的类、接口文件都要引入两个类InterfaceAudience;InterfaceStability;InterfaceAudience用于标 记该类文件可以被访问的权限。熟悉的有public、private。LimitedPrivate 只能在归属的架构中例如HDFS、HBase中被引用。InterfaceStability用于标记该类文件相对于Hadoop版本升级的稳定性。Stable:只有在主版本升级时可能不兼容。Evolving: 在子版本升级时可能不兼容。Unstable:最不稳定的,兼容性在任何版本下都无法提前预知、保证。
序列化:将对象转换为字节流的方法。可以用于(1)进程间的通信(2)数据持久性存储。
interface Writable
Writable是对Java IO中的DataOutput、DataInput的封装,因此实现实现Writable接口对数据进行序列化。
Hadoop中的数据类型、包括自定以的数据类型均要作为key、value传输、写入HDFS,因此都要实现Writable。这也是Hadoop不采用Java原始数据类型的原因。
Writable定义了
void write(DataOutput out) throws IOException;
void readFields(DataInput in) throws IOExceptio;
二者用来读、写字段。
interface WritableComparable<T>
继承了Writable, Comparable<T>。
Map-Reduce框架中作为key的数据类型需要实现该接口。可以自定义某一数据类型同类之间比较方法以及生成该类型数据hashCode方法。
参考陆驾恒的《Hadoop实战》中表格:
JAVA基本类型 | Writable中的类型 | 序列化后字节数 |
boolean | BooleanWritalbe | 1 |
byte | ByteWritable | 1 |
int | IntWritable | 4 |
VIntWritable | 1-5 | |
float | FloatWritable | 4 |
long | LongWritable | 8 |
VLongWritalbe | 1-9 | |
double | DoubleWritable | 8 |
以下是官方编写compareTo方法,可以比较int大小this.int < int 返回-1;
public int compareTo(MyWritableComparable o) {
int thisValue = this.value;
int thatValue = o.value;
return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
}
此外,BinaryComparable类实现了二进制数组的比较。
通过以上的介绍,我们可以通过实现Writable、WritalbeComparable接口来实现自己的数据类型。
相关推荐
Hadoop源代码分析完整版.pdf
org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z Hadoop源码_NativeIO.java
必须将此jar包放在org.apache.hadoop.io包下,否则无法正常覆盖使用
分别取对应的文件夹下解压,之后将这两个文件替换到 hadoop-2.*.*/bin目录下即可 winutils.exe、hadoop.dll
Hadoop源代码eclipse编译指南.zip、Hadoop源代码eclipse编译指南.zipHadoop源代码eclipse编译指南.zipHadoop源代码eclipse编译指南.zipHadoop源代码eclipse编译指南.zip
解决本地调试Hadoop 异常。 org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
Hadoop源代码分析完整版.pdf Hadoop源代码分析 hadoop mapreduce
Hadoop源代码分析完整版
Hadoop源代码分析完整版
mapreduce.lib.partitionreduceoutput类的Hadoop源代码分析
hadoop源代码资源归档Archive.zip
学习hadoop源代码,RPC部分.pdf
在网上下了好多2.6版本的hadoop.dll,但是都不好使,昨天有个好心网友给我发了一份,实际测试通过。开发环境是64位win7+hadoop2.7.1+redhat版本的linux。
包mapreduce.lib.map的Hadoop源代码分析
org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V 解决方案:下载本资源解压将hadoop.dll和winutils.exe文件复制到hadoop2.7.3的bin目录下即可解决。
深入云计算:Hadoop源代码分析(修订版)
Hadoop源代码分析(完整版).pdf
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:468) at org.apache.hadoop.util.Shell....