Hive SerDe

什么是 SerDe?

  • SerDe 是"Serializer and Deserializer(序列化器和反序列化器)"的缩写。
  • Hive 使用 SerDe(和 FileFormat)读写表的行数据。
  • HDFS files --> InputFileFormat --> --> Deserializer --> Row object
  • Row object --> Serializer --> --> OutputFileFormat --> HDFS files

请注意,"key"部分在读时被忽略,在写时始终是常量。基本上,row对象存储在"value"中。

  序列化是对象转换为字节序列的过程。 反序列化是字节序列恢复为对象的过程。 对象的序列化主要有两种用途:对象的持久化,即把对象转换成字节序列后保存到文件中;对象数据的网络传送。 除了上面两点, hive的序列化的作用还包括:Hive的反序列化是对key/value反序列化成hive table的每个列的值。Hive可以方便的将数据加载到表中而不需要对数据进行转换,这样在处理海量数据时可以节省大量的时间。

  SerDe说明hive如何去处理一条记录,包括Serialize/Deserilize两个功能, Serialize把hive使用的java object转换成能写入hdfs的字节序列,或者其他系统能识别的流文件。Deserilize把字符串或者二进制流转换成hive能识别的java object对象。比如:select语句会用到Serialize对象, 把hdfs数据解析出来;insert语句会使用Deserilize,数据写入hdfs系统,需要把数据序列化。

  Hive的一个原则是Hive不拥有HDFS文件格式。用户应该能够使用其他工具直接读取Hive表的HDFS文件或者使用其他工具直接写那些可以加载到外部表中的HDFS文件。

注意,org.apache.hadoop.hive.serde是一个过时的SerDe库。使用最新版本的org.apache.hadoop.hive.serde2。

Hive当前使用这些 FileFormat 类去读写HDFS文件:

  • TextInputFormat/HiveIgnoreKeyTextOutputFormat:这两个类以纯文本文件格式读写数据。
  • SequenceFileInputFormat/SequenceFileOutputFormat:这两个类以 Hadoop 序列文件格式读写数据。

Hive当前使用这些 SerDe 类去序列化和反序列化数据:

  • MetadataTypedColumnsetSerDe:这个 SerDe 用于读取/写入带分隔符的记录,如CSV、TSV、^A分隔的记录(对不起,还不支持引号)。

  • LazySimpleSerDe:该SerDe可用于读取与MetadataTypedColumnsetSerDe和TCTLSeparatedProtocol相同的数据格式,但是,它以一种惰性的方式创建对象,从而提供更好的性能。从Hive 0.14.0开始,它还支持使用指定的编码字符集读写数据,例如:
    ALTER TABLE person SET SERDEPROPERTIES ('serialization.encoding'='GBK');
    如果将属性 hive.lazysimple.extended_boolean_literal 设置为true (Hive 0.14.0和更高版本),LazySimpleSerDe可以将’T’、‘t’、‘F’、‘f’、'1’和’0’视为扩展的合法布尔文本。这个属性默认值为false,这意味着只有’TRUE’和’FALSE’被视为合法的布尔文字。

  • ThriftSerDe:这个SerDe用于读写Thrift序列化对象。必须首先加载Thrift对象的类文件。

  • DynamicSerDe:这个SerDe也可以读写Thrift序列化的对象,但是它能够理解Thrift DDL,所以可以在运行时提供对象的模式。
    它还支持许多不同的协议,包括TBinaryProtocol、TJSONProtocol、TCTLSeparatedProtocol(它在分隔的记录中写入数据)。

另外:

  • 对于JSON文件,在Hive 0.12.0中添加了JsonSerDe。Amazon SerDe可以在s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar中获得,用于0.12.0之前的版本。
  • 在Hive 0.9.1中添加了Avro SerDe。 从Hive 0.14.0开始,其规范隐含在STORED AS AVRO子句中。
  • 在Hive 0.11.0中添加了ORC文件格式的SerDe。
  • Parive的SerDe通过Hive 0.10中的插件添加,并在Hive 0.13.0中原生添加。
  • 在Hive 0.14中添加了支持 CSV 的SerDe。

你可能感兴趣的:(Hive)