1.序列化与反序列化
序列化器(Serializer)和反序列化器(Deserializer)
SerDe 是两个单词的拼写 serialized(序列化) 和 deserialized(反序列化)。 什么是序列化和反序列化呢?
当进程在进行远程通信时,彼此可以发送各种类型的数据,无论是什么类型的数据都会以 二进制序列的形式在网络上传送。发送方需要把对象转化为字节序列才可在网络上传输, 称为对象序列化;接收方则需要把字节序列恢复为对象,称为对象的反序列化。
Hive的反序列化是对key/value反序列化成hive table的每个列的值。Hive可以方便 的将数据加载到表中而不需要对数据进行转换,这样在处理海量数据时可以节省大量的时间。
读写行数据流程如下:
- 读
HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
- 写
Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
ALTER TABLE my_table
SET SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
"serialization.format" = ",",
"field.delim" = ","
);
field.delim是表的两个列字段之间的文件中的字段分隔符.
其中serialization.format是文件序列化时表中两个列字段之间的文件中的字段分隔符.
其中LazySimpleSerDe还可以替换为:
1.LazyBinarySerDe,其中前者是用于把数据进行二进制序列化的,LazyBinarySerDe可以延迟解析数据,避免了大量解析无关数据的开销,提高了处理效率。
2.ColumnarSerDe
适用于针对列式存储格式的列存储数据(如ORC或Parquet&#