hive的存储格式TextFile、RCFile、ORC

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

你可能感兴趣的:(大数据,Hive)