Hadoop学习系列笔记(三):Hadoop的I/O操作

本文介绍了HDFS如何确保数据完整性和高效存储,包括通过校验和验证数据块、压缩文件节省存储空间、序列化和反序列化数据以及使用Avro等工具。还探讨了SequenceFiles在处理小文件时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1HDFS的数据完整性:

Hadoop会对写入的所有数据计算校验和,并在读取数据时验证校验和。

datanode负责在收到数据后存储该数据及其验证校验和

客户端从datanode读取数据时,也会验证校验和,将它们与datanode中存储的校验和进行比较。Datanode也会在后台线程中运行一个DataBlockScanner定期验证存储在这个datanode上的所有数据块。

HDFS存储这每个数据块的复本,它可以通过数据复本来修复损坏的数据库,得到一个新的、完好无损的复本。基本思路为:客户端读取数据块——>检测到错误——>namenode报告损坏的数据块及其正在尝试操作的当前的datanode,抛出异常——>namenode标记此数据块复本为已损坏——>namenode安排该数据块的一个复本复制到另一个datanode——>删除已损坏的数据块复本。

 

2、压缩:

文件压缩两大好处:减少存储文件所需要的磁盘空间,加速数据在网络和磁盘上的传输。与Hadoop结合使用的法如下:

 

3、序列化:

序列化是指将结构化对象转化为字节流以便在网络上传输写到磁盘进行永久存储的过程。反序列化是指将字节流转回结构化对象的逆过程。序列化在分布式数据处理的两大领域经常出现:进程间通信永久存储

Hadoop中,系统中多个节点上进程间的通信是通过“远程过程调用”(remote procedure callRPC)实现的。RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息。

通常希望序列化格式比较紧凑(能高效实用存储空间)、快速(以读/写数据的额外开销比较小)、可扩展(以可以透明地读取老格式的数据)且可以互操作(以可以使用不同的语/言读写永久存储的数据)。Hadoop使用自己的序列化格式Writable,它绝对进程、速度快、但不太容易用Java以外的语言进行扩展或使用。WritableHadoop的核心,大多数MapReduce程序都是Writable类型的键和值。Writable类对Java基本类型提供封装。所有的封装包含get()set()两个方法用于读取或存储封装的值。

 

4、Avro

Apache Avro是一个独立于编程语言的数据序列化系统,旨在解决HadoopWritable类型的不足:缺乏语言的可移植性。Avro通常用JSON来写,数据通常采用二进制格式来编码,但也有其他选择。

5、基于文件的数据结构:

SequenceFiles可作为小文件的容器。HDFSMapReduce是针对大文件优化的,通过SequenceFiles类型将小文件包装起来可获得更高效的存储和处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值