一、FileFormate
hive数仓和mysql、clickhouse一类的数据库不同,hive表的数据是存储在hdfs文件系统中的,它底层的存储文件可以是多种数据格式,目前hive支持的文件格式有:
Text File
SequenceFile
RCFile
Avro Files
ORC Files
Parquet
Custom INPUTFORMAT and OUTPUTFORMAT
如果在建表或者更改表时没有显式指定hive要存储成的文件格式,那么默认是Text File文件格式。
不过可以通过配置hive.default.fileformat来更改默认的文件存储格式。
二、SerDe
SerDe是Serializer & DeSerializer的简称,是指数据写入hive表或者从hive表读取数据时的序列化和反序列化操作(控制文件数据和hive表中Row数据的转换)。其读写流程如下:
read:HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
write: object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
三、FileFormat和SerDe的关系
File Format文件格式一般是在建表或更改表时显式声明hive表在hdfs文件系统中的存储格式,
一旦设置了某种文件存储格式后,当有数据写入hive表或者从hive表读取数据时需要先通过对应的SerDe对数据进行处理。
所以简单理解,可以将SerDe看做FileFormat的功能支持或实现,我们设置了FileFormat后,底层数据格式的转换是依赖SerDe来做的。但是实际上SerDe和FileFormat是两个独立的概念体系,在理解时千万不要混淆了。
SerDe分为序列化和反序列化,分别对应输入格式化(INPUTFORMAT)和输出格式化(OUTPUTFORMAT),所以在上述介绍hive支持的文件格式时有个Custom INPUTFORMAT and OUTPUTFORMAT选项,这个其实就是指hive允许自定义存储格式,只要我们自己实现其对应的输入格式化和输出格式化的操作就行。
参考: