按行存储:sequenceFile、mapfile、avro
-
sequenceFile:hadoop api提供的一种二进制文件,数据以<key,value>的形式序列化到文件中。不是很常用,一般用来合并小文件。
-
mapfile:带索引的sequenceFile
-
avro:数据序列化框架,类似protocol buffers,thrift,avro有自己的文件格式.avro结尾,avro依赖shema实现数据结构定义。avro类似于序列文件,但是sequenceFile只支持java语言,avro是跨语言的。同时avro也是rpc框架。如果数据的输入格式经常发生变化,就可以考虑用avro。
按列存储:orc、parquet
-
orc:二进制存储,自解析,主要由stripes组成。https://www.cnblogs.com/felixzh/p/9264347.html
-
parquet:和orc差别不大,orc在hive中用的多。parquet在spark中用的多。
-
parquet和orc提供了最佳的读取性能,但是写入性能较差。
-
由于avro是按行存储,在流计算也用的多。
-
无论文件格式如何,压缩数据意味着查询时间更长。