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 | --指定*.RequestSerde做Serde |
SerDe内置类型
- Avro
- ORC
- RegEx
- ThrifT
- Parquet
- CSV
- JsonSerDe
自定义类型
定义一个类,继承抽象类AbstractSerDe
1 | 2018-10-18 |