当前位置:首页 > 行业动态 > 正文

hive表数据存储地址

Hive表数据存储在 HDFS文件系统,内部表数据默认存于/user/hive/warehouse目录,外部表数据位于创建时指定的HDFS路径,分区表按分区字段分

Hive表数据存储地址详解

Hive表数据存储基础

Hive是基于Hadoop的数据仓库工具,其核心数据存储依赖于HDFS(Hadoop Distributed File System),Hive表的数据存储地址与表类型、分区、存储格式等因素密切相关,以下是Hive表数据存储的核心逻辑:

  1. 内部表与外部表

    • 内部表(Managed Table)
      • 数据存储在Hive指定的仓库目录(hive.metastore.warehouse.dir,默认路径为/user/hive/warehouse)下。
      • 删除表时,数据和元数据都会被删除。
    • 外部表(External Table)
      • 数据存储在用户指定的HDFS路径下,Hive仅管理元数据。
      • 删除表时,仅删除元数据,数据保留。
  2. 分区表与非分区表

    • 非分区表:数据存储在单一目录下,所有数据文件集中在该目录中。
    • 分区表:数据按分区字段值分散存储在多个子目录中,每个分区对应一个子目录。
  3. 存储格式
    Hive支持多种存储格式(如TextFile、ORC、Parquet等),存储格式会影响数据的物理文件后缀和压缩方式。

    hive表数据存储地址  第1张


Hive表数据存储路径规则

以下是不同类型Hive表的数据存储路径规则:

表类型 存储路径示例(假设数据库为db1,表名为t1
内部表 /user/hive/warehouse/db1.db/t1(默认仓库路径)
外部表 用户指定路径,例如/data/external/t1(需在建表时通过LOCATION指定)
分区表 /user/hive/warehouse/db1.db/t1/partition_col=value(每个分区对应一个子目录)
桶表 /user/hive/warehouse/db1.db/t1/bucket_0bucket_1…(每个桶对应一个文件)
临时表 /user/hive/warehouse/.hivemq000001/tmp_table(临时表数据在会话结束后删除)
视图 无实际数据存储(视图基于底层表的逻辑查询)

如何查看Hive表的数据存储地址

  1. 通过Hive命令查看

    • 使用DESCRIBE FORMATTED table_name命令,输出中包含Location字段,显示表的存储路径。
    • 示例:
      DESCRIBE FORMATTED db1.t1; 

      输出示例:

      # Detailed Table Information  
      Database:              db1  
      Owner:                 user  
      ...  
      Location:              hdfs://namenode:8020/user/hive/warehouse/db1.db/t1 
  2. 通过HDFS命令查看

    • 直接访问HDFS路径,
      hdfs dfs -ls /user/hive/warehouse/db1.db/t1 
  3. 通过Hive元数据接口

    • Hive元数据存储在关系型数据库(如MySQL)中,可通过查询TBLS表获取存储路径。

分区表与桶表的存储细节

分区表

  • 动态分区
    插入数据时,Hive会根据分区字段自动创建目录。

    INSERT INTO t1 PARTITION(dt) SELECT  FROM source_table; 

    生成的路径可能为:

    /user/hive/warehouse/db1.db/t1/dt=20230101  
    /user/hive/warehouse/db1.db/t1/dt=20230102 
  • 静态分区
    手动指定分区值,数据直接写入对应目录。

桶表

  • 桶(Bucket):将数据按哈希值分配到多个文件中,适用于采样查询。
  • 存储路径:每个桶对应一个文件,路径中包含桶编号。
    /user/hive/warehouse/db1.db/t1/bucket_0/part-00000-...  
    /user/hive/warehouse/db1.db/t1/bucket_1/part-00001-... 

数据存储格式与文件后缀

Hive表的数据存储格式决定了物理文件的后缀和编码方式:

存储格式 文件后缀 特点
TextFile .txt 纯文本,无压缩,适合小规模数据
ORC .orc 列式存储,支持压缩和高效查询
Parquet .parquet 列式存储,支持复杂嵌套结构
Avro .avro 二进制编码,支持Schema演化
SequenceFile .seq 二进制键值对,适合MapReduce场景

元数据与数据分离机制

  • 元数据存储:Hive的元数据(如表结构、分区信息)存储在Metastore中(通常是MySQL或PostgreSQL)。
  • 数据存储:实际数据以文件形式存储在HDFS中,路径由Hive的Warehouse目录和表定义决定。
  • 关联方式:通过Location字段将元数据与HDFS路径绑定。

常见问题与解决方案

如何修改表的存储路径?

  • 内部表:无法直接修改,需重新创建表并导入数据。
  • 外部表:通过ALTER TABLE修改LOCATION属性。
    ALTER TABLE t1 SET LOCATION 'hdfs://new_path'; 

如何清理历史分区?

  • 使用ALTER TABLE命令删除空分区:
    ALTER TABLE t1 DROP IF EXISTS PARTITION(dt='20230101'); 
  • 或直接通过HDFS命令删除目录:
    hdfs dfs -rm -r /user/hive/warehouse/db1.db/t1/dt=20230101 

FAQs

Q1:如何快速查看Hive表的数据存储路径?

A1:使用DESCRIBE FORMATTED table_name命令,输出中的Location字段即为存储路径。

DESCRIBE FORMATTED db1.t1; 

Q2:外部表的数据存储路径是否可以在建表后修改?

A2:可以,通过ALTER TABLE命令修改LOCATION属性,

ALTER TABLE external_table SET LOCATION 'hdfs://new_path'; 
H
0