textfile
Hive默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
行存储,压缩的text文件 hive无法进行合并和拆分,无法对数据进行并行操作

Sequencefile
Hadoop API 提供的一种二进制文件,它将数据(key,value)的形式序列化到文件里。
Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,只是它的key为空。使用value 存放实际的值,避免MR 在执行map 阶段的排序过程。
行存储,可分割 压缩
一般选择block压缩

Avro
Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。

Rcfile
面向列,先按列划分。再垂直划分
数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势
当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。。RCFile在map阶段从远端拷贝仍然是拷贝整个数据块,而且复制到本地文件夹后,是通过扫描每个row group的头部定义来实现的。
在读取全部列的情况下,RCFile的性能反而没有SequenceFile高。
结合行存储查询的高速和列存储节省空间的特点,保证同一行的数据位于同一节点。因此元组重构的开销非常低,RCFile能够利用列维度的数据压缩,而且能跳过不必要的列读取。

Parquet
列式格式,以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,透明地将Protobuf和thrift嵌套类型的数据进行列式存储,除了上述优势外,不支持update操作(数据写成后不可修改),不支持ACID等。

ORCFile
源自于RC(RecordColumnar File)这种存储格式,RC是一种列式存储引擎,对schema演化支持较差,主要是在压缩编码,查询性能方面做了优化。Hive 1.x版本对事务和update操作的支持,便是基于ORC实现的(其他存储格式暂不支持)。支持update操作,支持ACID,支持struct,array复杂类型。
数据按行分块 每块按照列存储,压缩快 快速列存取

自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式。