背景知识:
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源代码分析知识点详解 #### 一、Hadoop背景与关键技术介绍 Hadoop作为一项重要的开源项目,其设计理念深受Google三大论文的影响——Google File System (GFS)、MapReduce以及BigTable。Hadoop的核心组件...
### Hadoop源代码分析——输出流机制解析 #### 一、概述 本篇文章将深入剖析Hadoop中的输出流机制,具体来说,我们将关注Hadoop输出流的核心组件——`OutputStream`及其派生类`FSOutputStream`与`DFSOutputStream`...
2. **构建Hadoop源码**:下载Hadoop源代码,使用maven或ant构建系统来编译并生成本地库。这通常会生成libhadoop.so库文件。 3. **设置环境变量**:将生成的库文件路径添加到系统的LD_LIBRARY_PATH中,以便Java能够...
“OpportunityChhattisgarh2015-master”这个压缩文件名可能表示这是该活动的主要资源或源代码库。参与者可能获得了相关的课程材料、示例代码、讲座幻灯片或其他参考资料,帮助他们在活动后继续学习和实践Java技术。...
标题 "reega:废物,电力,煤气,水" 暗示这是一个...通过深入研究reega项目的源代码,开发者不仅可以学习到Java编程技巧,还能了解到如何构建一个复杂的城市服务管理系统,包括数据处理、API设计、系统集成等多个方面。
- **Hadoop核心组成介绍**:详述Hadoop的两大核心组件——HDFS和MapReduce的工作原理。 - **Hadoop集群结构**:分析Hadoop集群的架构设计,包括NameNode、DataNode的角色与职责。 - **Hadoop独立模式安装与测试**:...
标题中提到的“基于开源框架的推荐搜索BI系统”指的是利用开放源代码的软件框架来构建一个能够提供个性化推荐和搜索功能的商业智能系统。商业智能(BI)系统是企业用于分析业务数据,以支持决策制定的解决方案,其...
首先,我们看到一个名为"transfert-master"的压缩包文件,这可能是某个项目或库的源代码仓库,用于处理Java中的转移操作。"master"通常表示这是主分支,包含了项目的核心功能和最新稳定版本的代码。 在Java中,文件...
这个项目的源代码可能包含了多个模块,比如数据处理模块、数据分析模块、报表生成模块等。每个模块都可能由一系列Java类组成,它们通过面向对象的设计原则和模式,如单例模式、工厂模式等,构建出清晰、可维护的代码...
在“NetU-main”这个压缩包中,我们很可能会找到一系列关于Java编程的教程、项目源代码和练习资料,旨在帮助学习者全面掌握Java技术。 首先,Java的基础知识是学习的起点。Java的语法结构与C++类似,但更加强调简单...