第 5章 Hadoop的I/O 操作

额,从今天起用Project做了学习计划,计划26天能看完这本书,不知道能不能坚持到底,拭目以待

1.数据完整性

  • 检测数据是否损坏
    • 在数据第一次引入系统时计算校验和并在数据通过一个不可靠的通道进行传输时再次计算校验和
    • 校验和也是可能损坏的
    • 错误检测码CRC-32 HDFS 使用的是一个更有效的变体CRC-32C
  • HDFS 的数据完整性
    • 对写入的所有数据计算校验和,并在读取数据时验证校验和
    • hadoop fs -checksum 检查一个文件的校验和
    • LocalFileSystem 执行客户端的校验和验证
    • ChecksumFileSystem

2.压缩

  • 优势:减少存储文件所需要的磁盘空间,并加速数据在网络和磁盘上的传输

    压缩格式工具算法文件扩展名是否可切分
    DEFLATEDEFLATE.deflate
    gzipgzipDEFLATE.gz
    bzip2bzip2bzip2.bz2
    LZOlzopLZO.lzo
    LZ4LZ$.lz4
    SnappySnappy.snappy
  • 所有压缩算法都需要权衡空间/时间

  • bzip2的压缩能力强于gzip,但速度慢

  • codec

压缩格式HadoopCompressionCodeC
gziporg.apache.hadoop.io.compress.GzipCodeC
bzip2org.apache.hadoop.io.compress.BZip2Codec
  • 最好使用原生类库,而不是Java实现
  • 大量压缩和解压缩,可以考虑使用CodecPool
  • 压缩和输入分片
  • 在MapReduce 中使用压缩
public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: MaxTemperatureWithCompression <input path> <output path>");
            System.exit(-1);
        }
        Job job = new Job();
        job.setJarByClass(MaxTemperature.class);
        job.setJobName("Max Temperature");

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        FileOutputFormat.setCompressOutput(job, true);
        FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

        job.setMapperClass(MaxTemperatureMapper.class);
        job.setCombinerClass(MaxTemperatureReducer.class); //减少 map 跟reducer 之间的数据传输
        job.setReducerClass(MaxTemperatureReducer.class);

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
  • 对map任务输出进行压缩

3.序列化

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

序列化用于分布式数据处理的两大领域:进程间通信和永久存储

  • Writable 接口
    void write(DataOutput out) throws IOException;
    void readFields(DataInput in) throws IOException;
    
  • IntWritable
  • WritableComparable
  • org.apache.hadoop.io
  • VIntWritable VLongWritable (变长格式会更节省空间)
  • Text 最大2GB

4.基于文件的数据结构

  • 关于SequenceFile
    • 适合二进制类型的数据
    • hadoop fs -text numbers.seq|head
  • 关于MapFile
    • MapFile 是已经排过序的SequenceFile,它有索引,所以可以按键查找。索引自身就是一个SequenceFile,包含了map中的一小部分健
  • Avro 数据文件
  • 以上几个都是面向行的数据格式,还有面向列的格式 RCFile

转载于:https://my.oschina.net/mrq/blog/3099733

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值