选择合适的Hadoop数据类型
Hadoop使用基于Writable接口的类作为用于MapReduce计算的数据类型。 为MR计算工作流的输入数据、中间数据和输出数据选择合适的Writable数据类型,对于MapReduce程序的性能和可编程性有巨大的影响。
如果某个数据类型要被用作一个MapReduce计算的value数据类型,那么该数据类型必须实现org.apache.hadoop.io.Writable接口。该Writable接口定义了在传输和存储该数据时Hadoop应该怎样序列化和反序列化这个值。
如果某个数据类型要被用作一个MapReduce计算的key数据类型,那么该数据类型必须实现org.apache.hadoop.io.WritableComparable<T>接口。除了Writable接口的功能外,该WritableComparable接口进一步定义了怎样对这个类型的key实例相互进行比较(用于排序的目的)。
Hadoop提供了许多原始数据类型,如IntWritable、LongWritable、BooleanWritable、FloatWritable和ByteWritable,这些是对应的Java原始数据类型的Writable版本。我们可以用这些类型当作key的类型或value的类型均可。
下面这些Hadoop内置的数据类型也均可被用于key和value的数据类型:
- Text:存储UTF8文本;
- BytesWritable:存储一个字节序列;
- VIntWritable和VLongWritable:这些存储可变长度的整数和long值;
- NullWritable:这是一个零长度(zero-length)的Writable类型,当不想使用一个key或value类型时使用它;
下面这些Hadoop内置集合数据类型,只能被用作value类型:
1. ArrayWritable:存储Writable类型的值的数组。 要想使用ArrayWritable类型作为Reducer的输入的value类型,我们需要创建一个ArrayWritable的子类来指定它要存储的Writable值的类型:
public class LongArrayWritable extends ArrayWritable {
public LongArrayWritable() {
super(LongWritable.class);
}
}
2. TwoDArrayWritable:用来存储一个属于相同Writable类型的值的矩阵。 要使用该TwoDArrayWritable类型作为Reducer的输入的value类型,我们需要通过创建该TwoDArrayWritable类的一个子类来指定存储的值的类型(类似于ArrayWritable类型):
public class LongTwoDArrayWritable extends TwoDArrayWritable {
public LongTwoDArrayWritable() {
super(LongWritable.class);
}
}
3. MapWritable:这是用来存储一个key-value对的map。keys和values应该都是Writable数据类型。 可以像下面这样使用该MapWritable函数。不过,我们应该意识到,由于包含了存储在该map中的每个对象的类名,所以MapWritable的序列化增加了轻微的性能损失。
MapWritable valueMap = new MapWritable();
valueMap.put(new IntWritable(1),new Text("test"));
4. SortedMapWritable:这个类型存储一个排序的key-value对map。key应该实现WritableComparable接口。SortedMapWritable的用法与MapWritable函数类似。
课程章节 返回课程首页
-
Ch01 Hadoop概述及环境搭建
-
Ch02 HDFS分布式文件系统
-
Ch03 MapReduce计算框架
- Hadoop MapReduce架构
- MapReduce基础案例01-单词计数v1
- MapReduce基础案例02-单词计数v2
- MapReduce基础案例03-单词计数v3
- MapReduce基础案例04-统计年最高温度
- MapReduce基础案例05-订单数据统计
- MapReduce基础案例06-计算平均成绩
- MapReduce基础案例07-大数据去重
- MapReduce基础案例08-大数据排序
- MapReduce基础案例09-自定义分区器
- MapReduce基础案例10-倒排索引_1
- MapReduce基础案例11-倒排索引_2
- MapReduce基础案例12-酒店数据清洗
- MapReduce基础案例13-计数器
-
Ch04 开发复杂的MapReduce应用程序
- 选择合适的Hadoop数据类型
- 使用Hadoop ArrayWritable数据类型
- 使用Hadoop MapWritable数据类型
- 自定义的Hadoop Writable数据类型
- 自定义的Hadoop Key数据类型
- 从Mapper发出不同value类型的数据
- 使用KeyValueTextInputFormat
- 实现自定义的InputFormat
- 使用Hadoop OutputFormat输出格式
- 自定义Hadoop OutputFormat输出格式
- 一个MapReduce计算写入多个输出
- 一个MapReduce计算写入多个输出_2
- MapReduce案例-实现Top N算法
- MapReduce案例-二次排序算法_示例1
- MapReduce案例-二次排序算法_示例2
- MapReduce案例-分布式缓存共享数据
- MapReduce案例-使用Hadoop计数器
- MapReduce案例-写入数据库表
- MapReduce案例-读取数据库表
-
Ch05 MapReduce实现表连接