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是支持自解析的一个存储格式类似于一个小型的数据库。