Hive的文件存储格式包括:textfile, sequencefile, rcfile, orc, parquet
textfile
默认的文件格式,行存储。建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝至hdfs不进行处理。
优点:最简单的数据格式,便于和其他工具(Pig, grep, sed, awk)共享数据,便于查看和编辑;加载较快。
缺点:耗费存储空间,I/O性能较低;Hive不进行数据切分合并,不能进行并行操作,查询效率低。
适用于小型查询,查看具体数据内容的测试操作。
sequencefile
含有键值对的二进制文件,行存储。
优点:可压缩、可分割,优化磁盘利用率和I/O;可并行操作数据,查询效率高;
缺点:存储空间消耗最大;对于Hadoop生态系统之外的工具不适用,需要通过text文件转化加载。
适用于数据量较小、大部分列的查询。
rcfile
行列式存储。先将数据按行分块,同一个record在一个块上,避免读一条记录需要读多个block;然后块数据列式存储。
优点:可压缩,高效的列存取;查询效率较高。
缺点:加载时性能消耗较大,需要通过text文件转化加载;读取全量数据性能低。
orc
优化后的rcfile,行列式存储。
优缺点与rcfile类似,查询效率最高。
适用于Hive中大型的存储、查询。
parquet
列存储。
优点:更高效的压缩和编码;不与任何数据处理技术绑定,可用于多种数据处理框架(Hive, Impala, Presto查询引擎;MapReduce, Spark计算框架;Avro, Thrift, PB数据模型 )。
缺点:不支持update, insert, delete, ACID
适用于字段数非常多,无更新,只取部分列的查询。
表的字段个数不多时,文件按块进行压缩,行存储对于处理重复数据时比较高效;
表的字段个数成百上千时,而只需查询其中的较少字段时,列存储可较大提高效率。
数据仓库一次写入,多次读写,orc格式的优势较明显。