hived的存储格式TextFile、RCFile、ORC
- 说明:所谓的存储格式就是hive的数据在hdfs上存放的具体方式;通过下面的文件我们看出hive的存储格式是一共有六种,每一种都是由自己的规则。
file_format:
: SEQUENCEFILE
| TEXTFILE -- (Default, depending on hive.default.fileformat configuration)
| RCFILE -- (Note: Available in Hive 0.6.0 and later)
| ORC -- (Note: Available in Hive 0.11.0 and later)
| PARQUET -- (Note: Available in Hive 0.13.0 and later)
| AVRO -- (Note: Available in Hive 0.14.0 and later)
| JSONFILE -- (Note: Available in Hive 4.0.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
行式存储格式和列式存储格式的区别
| 属性1 | 属性2 | 属性3 |
|---|---|---|
| a1 | b1 | c1 |
| a2 | b2 | c2 |
行式存储:
说明:
数据是一行行进行存储的。
对于以上表格的数据而言,数据的存储。
| a1 | b1 | c1 | a2 | b2 | c2 |
优点:
- 相关的数据保存在一起,这种方式比较方便进行插入和修改。
缺点:
如果查询只涉及少数几个列,会把整行的数据都读取出来,如果数据量比较少,问题不大,但是如果数据量比较大,就产生缓存的异常。
由于每一行中列的数据类型并不一致,导致并不能设置一个比较高的压缩比,所以空间的利用率不高。
列式存储:
说明:
数据是一列列进行存储的。
对于以上表格的数据而言,数据的存储。
| a1 | a2 | b1 | b2 | c1 | c2 |
优点:
查询时只有涉及到的列才会查询出来,并不是把所有的列都查询出来。
一个列中的数据类型都是一致的,所以可以提供一个较高的压缩比。
缺点:
Insert /update的时候比较麻烦
不适合查询小量的数据
TextFile文件存储格式
说明:
TexFile 他是一个行式存储的存储格式 ,并且通常是默认的存储格式。
可以跳过不必要读取的列读取。
RCFile把数据分成多个block ,每一个block里以rowgroup为单位,存储在HDFS上的一个block里面的所有记录会被划分为多个rowgroup。
rowgroup 里包括了3个部分:
sync: 行组头部的一个同步标志,主要用于隔离HDFS两个连续块的行组
metadataHeader: 行组的元数据,记录每一个列的字节数,以及列的大小
实际存储数据的顺序
ORCFile文件存储格式
说明:
- ORC 的存储格式与RCFile的rowgroup的存储格式类似,ORC是按照stripes组织记录的(默认大小为250MB)。
ORC的存储格式分为以下几个部分:
多个stripe 每一个stripe为250MB的大小。
每一个stripe又包含了一个indexData (数据索引),RowData(行数据)StripeFooter ,默认大小也是250MB 块大的好处就是HDFS的读取效率高
indexData :包含了行的偏移量,以及每一列的最大值与最小值
RowData: 保存的是实际的数据
StripeFooter 数据读取的列的位置
PARQUET文件存储格式
- 说明:
- 是面向分析型的列式存储格式,并且是以二进制方式存储的,所以parquet 文件是不能直接读取的,其里面包含了文件的数据,以及文件的元数据,所以parquet是支持自解析的一个存储格式类似于一个小型的数据库。
版权声明:本文为lds_include原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。