hadoop IO(一)

1.数据完整性:

在数据第一次引入时系统计算校验和(checksum),在数据通过一段不可靠的 通道进行传输时再次计算校验和,如果所得 的 校验和

和原来的校验和一致则代表数据完整

2.HDFS数据完整性

hdfs 对写入 的数据计算校验和,在读取数据时验证校验和。

io.bytes.per.checksum 指定校验和的数据字节大小 默认512字节

datanode验证收到的数据后存储数据及校验和,datanode管线最后一个datanode负责验证 校验和,如果检测到错误, 则客户端便 会收到一个ChecksumException 异常。客户端读取数据时也会验证校验和,datanode也会在一个后台线程中运行一个

 

DataBlockScanner,c从而定期验证存储在这个dananode上所有的数据块。

 

禁用校验和
将false 值传递给FileSystem对象的setVerifyCcheckSum()方法,可禁用校验和。

LocalFileSystem 执行客户端的校验和验证,通过ChecksumFileSystem 完成任务。ChecksumFileSystem 继承FileSystem类

FileSystem fs = ……

FileSystem checksumFiles = new ChecksumFileSystem(fs)
RawLocalFileSystem 禁用校验和

3.压缩

压缩两大好处:减少存储所需的磁盘空间,加速在网络上和磁盘上的传输

hadoop 压缩工具
Gzip 通用压缩工具,时间和空间性能居中
bzip2 比Gzip 高效,速度慢
LZO 速度快 效率低

codec 压缩解压缩算法
hadoop 对 CompressionCodec 接口的一个实现代表一个codec

CompressionCodec 包含两个函数来压缩和解压缩
1> createOutputStream()
2> createInputStream

通过CompressionCodecFactory 推断CompressionCodec

读取压缩文件时 通过文件的扩展名来判断需要使用哪个codec
getCodec()来读取

CodecPool 允许反复使用压缩和解压缩算法,分摊创建这些对象所使用 的开销

4.MapReduce 压缩

要想对MapReduce 作业进行输出压缩操作 可配置:
mapred.output.compress 设置为true
mapred.output.compression.codec 设置为 想要使用的压缩codec 名
mapred.output.compression.type 控制要使用哪种压缩格式 默认为RECODE 每条压缩 BLOCK 按组压缩(效率高)

Map 任务压缩

map 阶段的中间输入进行压缩
mapred.compression.map.output
mapred.map.output.compression.codec Class

5.序列化

将结构化数据转化为字节流 成为序列化

hadoop多个节点上的通信是通过rpc(远程过程调用) 实现的,RPC将消息序列化成二进制流后发送到远程节点,远程节 点接着将

二进制流反序列化为原始消息

hadoop 自己的序列化格式为 writable

Writable 接口 两个方法:


write()
readFields()

IntWritable 实现了 WritableCompareable 接口,该接口继承自 Writable 和 java.lang.Comparable接口

RawComparator 接口 允许直接比较数据流中的记录 ,无需反序列化

Text 针对UTF8 序列的 Writable

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值