hadoop 3(I/O)

1)校验和

每个文件均按照块方式存储,每个块的元数据存储在namenode的内存中,因此Hadoop存储小文件会非常低效,小文件会消耗namenode中大部分内存

checksum:HDFS会对写入的数据计算校验和,并在读取数据时验证校验和。datanode在验证收到的数据后存储数据和校验和。客户端从datanode读取数据时也会验证校验和。

2) 压缩

在考虑如何压缩将由MapReduce 处理的数据时,需要理解这些压缩格式是否支持切分。由于gzip的压缩是存储在一系列连续的压缩块中,所以不能将gzip压缩的文件切分在不同的机器上执行map。所以mapreduce不会去切分gzip压缩的文件,而是在一台机器上运行。而有些压缩方式,如LZO是支持切分的。

MapReduce读写的是未经压缩的数据(K1,V1,K3,V3),但是可以对map阶段的中间输入进行压缩(K2,V2);由于map任务的输出需要写到磁盘并通过网络传输到reducer节点,通过压缩后的传输,会提高性能。

3) 序列化

序列化是指将结构化对象转化为字节流,以便在网络上传输或写到磁盘进行永久储存;反序列化是将字节流转回结构化对象的逆过程;

序列化在分布式数据处理的两大领域经常出现: 进程间通信和永久存储

在hadoop中,系统中多个节点上进程间的通信是通过RPC实现的,RPC协议将消息序列化成二进制流后发送到远程节点,远程节点将二进制流反序列化为原始消息。

a. writable 接口

定义了两个方法,一个是将其状态写到DataOutput二进制流,另一个从DataInput二进制流读取其状态

hadoop中主要已经可以直接使用的writable类

NullWritable是一种特殊类型,它的序列化长度为0, 并不会从数据流中读取数据,也不写入数据。它充当占位符,当MapReduce中,如果不需要键或值,就可以将键或值声明为NullWritable,结果存储常量空值。

通过RawComparator 实现直接比较字节,来确定变量大小,而不需要进行反序列化再比较的过程


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值