201707041940复习-hadoop篇2:序列化和压缩和序列化框架

9一、序列化

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

  2、hadoop使用的是自己的序列化格式Writable,它紧凑,速度快,但不太容易被java意外的语言进行扩展和使用,

  3、avro是一个序列化的框架,克服了writable的不足

  4、writable定义了两个方法:将其状态写到DataOutput二进制流和另一个从DataInput二进制流读取数据

  5、

  6、上面的图片中是hadoop已经实现的一些类,例如IntWritable类,实现了Writable接口和WritableComparable接口,所以在类中必须实现3个方法:

    Writable接口中的write(DataOutput out)方法和readFields(DataInput in)  

             WritableComparable接口中的compareTo(T o)方法

  7、上面的比较都是需要先反序列化后,再用compareTo(Object o)进行比较

  8、比较两个对象的方式还有另外一种comparator的compare(Object o1, Object o2) ,以前需要自己写一个实现类作为比较器,且自己的比较器中也必须反序列化对象,然后进行比较,现在hadoop为我们体统了一个通用的比较器:WritableComparator,这个类中的比较方法是直接对二进制流进行比较,而不进行反序列化,所以当比较两个对象是可以这样:

    RawComparator<IntWritable> comparator = WritableComparator.get(InteWritable.class);       // WritableComparator类是Raw的一个实现类

    comparator.compare(new IntWritable(5), new  IntWritable(6));   // 可以实现二进制字节流的比较

  9、如果自己定义一个类,需要实现WritableComparable接口,就必须实现write()方法和readFields()方法和comparaTo(T o)方法。

  10、序列化框架1:avro

    avro:由doug cutting(hadoop之父)创建,目的在于解决hadoop中Writable的不足:缺乏语言的可移植性。

    avro模式通常用json来写,数据通常采用二进制个事来编码。

    avro用json来描述一个实体类,然后序列化时读取这个json文件,这个json文件统称为schema文件,然后进行序列化和反序列化,在工作中用到再次查看。

    avro实现mr程序:

    

  11、序列化框架2:protocol buffers  简称protobuf ,google的产品

    也是使用一个文件来描述对象的序列化方式,然后用一定的解析代码来解析这个文件,对对象进行序列化和反序列化

  12、序列化框架3:apache thrift  : 略,当使用到时在学习

  13、压缩:

    13.1、6种压缩方式:

      deflate     不可切割     org.apache.hadoop.io.compress.DefaultCodec

      gzip        不可切割     org.apache.hadoop.io.compress.GzipCodec

      bzip2       可切割        org.apache.hadoop.io.compress.BZip2Codec

      lzo          不可切割     com.hadoop.compression.lzo.LzopCodec         lzo和lzo4在linux系统上不支持,需要先下载安装才行。然后再使用maven导入相关的类库才能使用

      lzo4        不可切割     org.apache.hadoop.io.compress.Lz4Codec

      snappy    不可切割     org.apache.hadoop.io.compress.SnappyCodec   snappy在linux上不支持,也需要先下载安装,但是类库hadoop已经提供了,不需要再次下载了。

    13.2、对大文件来说,不要使用不支持切分整个文件的压缩格式,因为会失去数据的本地特性,进而造成mr应用效率低下。

  

 

 

 

 

 

 

 

 

 

 

 

 

    

 

posted @ 2017-09-04 17:11  IT豪哥  阅读(184)  评论(0编辑  收藏  举报