textFile
- textFile为默认格式
- 存储方式:行存储
- 缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分
sequencefile
- 二进制文件,以<key,value>的形式序列化到文件中
- 存储方式:行存储
- 优点:可分割、压缩,一般选择block压缩,与hadoop api中的mapfile是互相兼容的。
rcfile
- 存储方式:数据按行分块 每块按照列存储
- 压缩快 快速列存取
- 读记录尽量涉及到的block最少
- 读取需要的列只需要读取每个row group 的头部定义。
- 读取全量数据的操作 性能可能比sequencefile没有明显的优势
orc
- 存储方式:数据按行分块 每块按照列存储
- 压缩快 快速列存取
- 效率比rcfile高,是rcfile的改良版本
ORC实际上是在RC文件存储格式做了一些优化,它的主要优点有:
(1)、每个task只输出单个文件,这样可以减少NameNode的负载;
(2)、支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union);
(3)、在文件中存储了一些轻量级的索引数据;
(4)、基于数据类型的块模式压缩:a、integer类型的列用行程长度编码(run-length encoding);b、String类型的列用字典编码(dictionary encoding);
(5)、用多个互相独立的RecordReaders并行读相同的文件;
(6)、无需扫描markers就可以分割文件;
(7)、绑定读写所需要的内存;
(8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。
snappy和lzo
row format delimited fields terminated by '\t'
stored as orc tblproperties("orc.compress"="SNAPPY")
自定义格式
用户可以通过实现inoutformat和outputformat来定义输入输出格式。