Hive架构与数据模型

2019-10-08  本文已影响0人  新人旧城

1. 架构与组成

Hive架构

Hive的核心组件:

hive系统架构

2. Hive数据模型

2.1 数据模型

  1. Hive元数据信息存储在关系数据库中
  2. 实际数据存储依赖HDFS
  3. Hive通过以下模型来组织HDFS上的数据


    Hive数据模型

分区和分桶是可选的,只是为了提高性能并使数据更易于管理

数据管理和存储方式

2.2 Database

  1. Database是Hive数据模型的最上层,跟关系数据库中的Database意义相似
  2. 通过Database来逻辑划分Hive表的命名空间,避免表同名冲突
  3. Hive默认自带的Database名为default
  4. HDFS存储路径由配置决定,一个Database一个子目录
<property> 
    <name>hive.metastore.warehouse.dir</name> 
    <value>/user/hive/warehouse</value> 
</property></pre>

2.3 Table

2.3.1 管理表和外部表

  1. Hive中的表和关系型数据库中的表在概念上很类似

  2. 每个表在HDFS中都有相应的目录用来存储表的数据

  3. 根据数据是否受Hive管理,分为:

    • Managed Table(管理表)
    • External Table(外表)
  4. 区别:

    • Managed Table:

      • HDFS存储数据受Hive管理,在统一的路径下: ${hive.metastore.warehouse.dir}/{database_name}.db/{tablename}
      • Hive对表的删除操作影响实际数据的删除
    • External Table:

      • HDFS存储路径不受Hive管理,叧是Hive元数据不HDFS数据路径的一个映射
      • Hive对表的删除操作仅仅删除元数据,实际数据不受影响

内部表转换为外部表

ALTER TABLE T_NAME SET TBLPROPERTIES ('EXTERNAL'='TRUE')

2.3.2 永久表和临时表

  1. Permanent Table是指永久存储在HDFS之上的表,默认创建表为永久表
  2. Temporary Table是指仅当前Session有效的表,数据临时存放在用户的临时目录下,当前session退出后即删除
  3. 临时表比较适合于比较复杂的SQL逻辑中拆分逻辑块,或者临时测试

注意:

2.4 Partition

  1. 基于用户指定的分区列的值对数据表进行分区

  2. 表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中

    • ${hive.metastore.warehouse.dir}/{database_name}.db/{tablename}/{partitionkey}={value}
  3. 分区的优点

    • 分区从物理上分目录划分不同列的数据
    • 用于查询的剪枝,提升查询的效率
  4. 可以多级Partition,即指定多个Partition字段,但所有Partition的数据不可无限扩展(多级目录造成HDFS小文件过多影响性能)

2.5 Bucket

  1. 桶作为另一种数据组织方式,弥补Partition的短板(不是所有的列都可以作为Partition Key)
  2. 通过Bucket列的值进行Hash散列到相应的文件中,重新组织数据,每一个桶对应一个文件
  3. 桶的优点:
    • 有利于查询优化,比如SMB Join
    • 对于抽样非常有效
  4. 桶的数量一旦定义后,如果更改,只会修改Hive元数据,实际数据不会重新组织

参考链接:
[1] : Hive官网
[2] : Hive设计与架构

上一篇 下一篇

猜你喜欢

热点阅读