1、Hadoop中文件格式大致分为面向行、面向列两种方式:
面向行:
同一行数据存储在一起,如SequenceFile、MapFile、Avro DataFile都是该存储方式,如果需要访问同行小部分数据,也需要将整行读入内存,所以该存储方式适合整行数据同时处理的情况。
面向列:
整个文件被切割成若干列数据,每列数据一起存储,RCFile、ORCFile都是该存储方式,读取数据时可以跳过不需要的列,但是该格式需要更多内存空间,因为需要缓存行在内存中,而且一旦写入失败,文件无法恢复。
2、SequenceFile
文件结构如下:
根据是否压缩,以及采用是记录压缩还是块压缩,存储格式不同:
1、不压缩:按照记录长度、Key长度、Key值、Value值依次存储,长度为字节数。
2、Record压缩:只有value值被压缩,压缩的codec保存到header中。
3、Block压缩:可以利用记录间的相似性,更节省空间,block前后加了同步标识,可设置block大小。
3、MapFile
SequenceFile加入索引并排序后就是MapFile,索引作为一个单独的文件存储,一般每128个记录存储一个索引,索引载入内存,用于快速查找。