美文网首页
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