Writable 接口
Writable 接口定义了两个方法:
(1)一个用于将其状态写入二进制格式的 DataOutput 流;
(2)另一个用于从二进制格式的 DataInput 流读取其状态;
我们可以使用 set() 函数来创建和设置 Writable 的值:
IntWritable wirtable = new IntWritable();
writable.set(163);
同样我们也可以使用构造函数:
IntWritable writable = new IntWritable(163);
IntWritable 实现了 WritableComparable 接口 ,后者是 Writable 与 java.lang.Comprable 接口的子接口
package org.apache.hadoop.io;
public interface WritableComparable<T> extends Writable,Comparable<T> {}
Hadoop 优化比对,不需要反序列化即可比较。
package org.apache.hadoop.io;
import java.util.Comparator;
public interface RawComparator<T> extends Comparator<T> {
public int compare( byte [] b1, int s1, int l1, byte [] b2, int s2, int l2);
}
WritableComparator 是一个 RawComparator 通用的实现 ,为 WritableComparable classes.
它做了两件事
1.实现了 compare() 方法(返序列化)
2.它充当的是 RawComparator 的工厂类
Hadoop 自带的序列化接口
实现了 WritableComparable 接口的类:
基础: BooleanWritable | ByteWritable
数字: IntWritable | VIntWritable | FloatWritable | LongWritable | VLongWritable | DoubleWritable
高级: NullWritable | Text | BytesWritable | MDSHash | ObjectWritable | GenericWritable
仅实现了 Writable 接口的类:
数组: ArrayWritable | TwoDArrayWritable
映射: AbstractMapWritable | MapWritable | SortedMapWritable
•Text
Text是UTF-8的Writable。可以将它理解为一种与java.lang.String 相类似的Writable。Text类代替了UTF-8类。
Text是可变的,其值可以通过调用set()方法来改变。最大存储是2GB。
•NullWritable
NullWritable是一种特殊的Writable类型,因为它的序列化的长度是零。可以做占位符。
•BytesWritable
BytesWritable 是一个二进制的数据数组封装。它的序列化格式是一个int字段.
BytesWritable是可变的,其值可以通过调用set()方法来改变。
•ObjectWriable
ObjectWriable 适用于字段可以使用多种类型时。
•Writable集合
一共 四种:
ArrayWritable和TwoDArrayWritable是针对数组与二维数组
MapWritable和SortededMapWritable 针对是Map与SortMap
•实现WritableComparable
•实现
/** * 将对象转换为字节流并写入到输出流out中 */
write()
/** * 从输入流in 中读取字节流并反序列化为对象 */
readFields(),
/** * 将this对像与对象O比较*/
compareTo()方法。
第四部分:基于文件的数据结构
SequeceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key, value>对序列化到文件中。一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中 Key是任意的Writable,Value是任意的Writable我们可以实现将许多小文件转化为SequenceFile,以方便Map/Reduce处理实际上,现在Hadoop处理时,都会将数据转为SequenceFile格式,无论是性能还是压缩上的考量。
这种文件格式 有以下好处:
A.支持压缩,且可定制为基于Record或Block压缩(Block级压缩性能较优)
B.本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。
C.难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。
步骤:
1. 设置 Configuration
2. 获取 File System
3. 设置文件输出路径
4. SequenceFile.createWriter 创建 SequenceFile.Writer 然后写入
5. 调用 SequenceFile.Writer .append 追加写入
6. 关闭流
读 SequenceFile
步骤:
1. 设置 Configuration
2. 获取 File System
3. 设置文件输出路径
4. SequenceFile.Reader 创建读取类 SequenceFile.Reader
5. 拿到 Key 与 Value 的 class
6. 读取
通过命令行读写 SequenceFile
步骤:
1. 设置 Configuration
2. 获取 File System
3. 设置文件输出路径
4. SequenceFile.Reader 创建读取类 SequenceFile.Reader
5. 拿到 Key 与 Value 的 class
6. 读取
MapFile
MapFile 是经过排序的带索引的 SequenceFile ,可以根据键值进行查找 .
由两部分组成,分别是 data 和 index 。 index 作为文件的数据索引,主要记录了每个 Record 的 key 值,以及该 Record 在文件中的偏移位置。在 MapFile 被访问的时候 , 索引 文件会被加载到内存,通过索引映射关系可迅速定位到指定 Record 所在文件位置, 因此,相对 SequenceFile 而言, MapFile 的检索效率是高效的,缺点是会消耗一部分 内存来存储 index 数据 .
需注意的是, MapFile 并不会把所有 Record 都记录到 index 中去,默认情况下每 隔 128 条记录存储一个索引映射。当然,记录间隔可人为修改,通过 MapFIle.Writer 的 setIndexInterval() 方法,或修改 io.map.index.interval 属性;
另外,与 SequenceFile 不同的是, MapFile 的 KeyClass 一定要实现 WritableComparable 接口 , 即 Key 值是可比较的。
相关推荐
Hadoop实战-陆嘉恒(高清完整版).pdf 带目录,欢迎下载,不能用于商业用途,供个人学习使用,请尊重作者版权,很清晰,有目录 ipad可看
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
总的来说,Hadoop-Eclipse-Plugin是Hadoop开发不可或缺的一部分,无论是1.2.1版本还是2.8.0版本,它们都为开发者提供了便利的工具,帮助他们更好地理解和利用Hadoop的潜力。随着Hadoop技术的不断演进,我们期待未来...
标题中的"apache-hadoop-3.1.0-winutils-master.zip"是一个针对Windows用户的Hadoop工具包,它包含了运行Hadoop所需的特定于Windows的工具和配置。`winutils.exe`是这个工具包的关键组件,它是Hadoop在Windows上的一...
赠送jar包:hbase-hadoop2-compat-1.2.12.jar; 赠送原API文档:hbase-hadoop2-compat-1.2.12-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...
赠送jar包:hadoop-yarn-client-2.6.5.jar; 赠送原API文档:hadoop-yarn-client-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-client-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-client-2.6.5.pom;...
Hadoop实战-陆嘉恒 Hadoop实战 大数据
Hadoop实战-陆嘉恒.pdf,Hadoop实战-陆嘉恒版第二版
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
《Hadoop实战-陆嘉恒(高清完整版)》是一本深入浅出介绍Hadoop技术的书籍,尤其适合初学者作为入门教材。Hadoop作为大数据处理领域的基石,其重要性不言而喻。这本书详细讲解了Hadoop的核心概念、架构以及实际应用,...
赠送jar包:hadoop-mapreduce-client-jobclient-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.6.5-sources.jar; 赠送...
Ubuntu虚拟机HADOOP集群搭建eclipse环境 hadoop-eclipse-plugin-3.3.1.jar
`hadoop-common-2.6.0-bin-master.zip` 是一个针对Hadoop 2.6.0版本的压缩包,特别适用于在Windows环境下进行本地开发和测试。这个版本的Hadoop包含了对Windows系统的优化,比如提供了`winutils.exe`,这是在Windows...
赠送jar包:hadoop-auth-2.5.1.jar; 赠送原API文档:hadoop-auth-2.5.1-javadoc.jar; 赠送源代码:hadoop-auth-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-auth-2.5.1.pom; 包含翻译后的API文档:hadoop...
Hadoop实战---高清版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
标题 "hadoop2.6-common-bin.zip" 指示这是一个包含Hadoop 2.6版本通用二进制文件的压缩包。这个压缩包主要针对Windows用户,旨在解决在该操作系统上运行Hadoop时可能遇到的"Could not locate executable"错误。这个...
Eclipse集成Hadoop2.10.0的插件,使用`ant`对hadoop的jar包进行打包并适应Eclipse加载,所以参数里有hadoop和eclipse的目录. 必须注意对于不同的hadoop版本,` HADDOP_INSTALL_PATH/share/hadoop/common/lib`下的jar包...
在这个"apache-hadoop-3.1.3-winutils-master.zip"压缩包中,包含了在Windows环境下配置Hadoop HDFS客户端所需的组件,特别是`hadoop-winutils`和`hadoop.dll`这两个关键文件,它们对于在Windows系统上运行Hadoop...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大规模集群上处理海量数据。Hadoop 3.3.0是该框架的一个版本,它带来了许多改进和新特性,旨在提升性能、稳定性和可扩展性。WinUtils是Hadoop在...
在这个特定的兼容包中,我们可以看到两个文件:flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar(实际的兼容库)和._flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar(可能是Mac OS的元数据文件,通常...