美文网首页
Hive架构与数据模型

Hive架构与数据模型

作者: 新人旧城 | 来源:发表于2019-10-08 10:48 被阅读0次

1. 架构与组成

Hive架构

Hive的核心组件:

  • 用户接口模块:包括CLI、HWI、JDBC、ODBC、Thrift Server
  • 驱动模块(Driver):包括编译器、优化器、执行器等,负责把HiveSQL语句转换成一系列MapReduce作业
  • 元数据存储模块(Metastore)是一个独立的关系型数据库(自带derby数据库,或MySQL数据库),该数据库存储着与数据库,表,列,数据类型以及在HDFS中的位置的所有相关元数据.
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设计与架构

相关文章

网友评论

      本文标题:Hive架构与数据模型

      本文链接:https://www.haomeiwen.com/subject/avxbpctx.html