Hive-Serde

SerDe是Serialize/Deserialize的简称,即序列化和和反序列化

序列化的作用

  • 序列化是对象转化为字节序列的过程

    1
    Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
  • 反序列化是字节序列恢复为对象的过程

    1
    HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
  • 我们对对象序列化主要用于:

    • 对象的持久化
    • 对象的网络传送

Hive的反序列化是吧k-v数据反序列化成为Table里的列值,而不需要转化,为海量数据处理节省大量时间。

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

SerDe的使用

Hive建表的时候可以使用自定义的SerDe或者Hive内置的SerDe类型指定数据的序列化和反序列化的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--指定*.RequestSerde做Serde

create table xxx
(
userid string ,
nickname string ,
xxx and so on
)

PARTITIONED BY (
`year` string,
`month` string,
`day` string)
ROW FORMAT SERDE
'com.fenbi.ape.hive.serde.RequestSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://f04/log/tutor'

SerDe内置类型

  • Avro
  • ORC
  • RegEx
  • ThrifT
  • Parquet
  • CSV
  • JsonSerDe

自定义类型

定义一个类,继承抽象类AbstractSerDe

1
2
2018-10-18
demo code to be added