更新时间:2026-08-21 GMT+08:00
分享

配置Hive表不同分区分别存储至OBS和HDFS

操作场景

在存算分离场景下,企业需要灵活管理数据存储,将热点数据存储在高性能的HDFS上以保障查询性能,将冷数据存储在低成本的OBS上以降低存储成本。Hive分区表支持不同的分区分别指定不同的存储源,可以指定一个分区表中不同分区的存储源为OBS或者HDFS。例如,将最近7天的热点分区数据存储在HDFS上,保障查询性能;将历史冷数据分区存储在OBS上,降低存储成本。这种混合存储方式可以在保证查询性能的同时,有效控制存储成本。

本文介绍如何配置Hive表的不同分区分别存储至OBS和HDFS。

此章节仅说明分区表指定存储源的能力,关于Hive如何在存算分离场景下对接OBS,对接指导可参考Hive对接OBS文件系统章节。

  • 分区表(Partitioned Table):Hive中的一种表类型,通过分区键将数据划分为多个分区,每个分区对应一个独立的存储目录。分区表可以提高查询性能,因为查询时可以只扫描相关分区的数据。
  • Location:Hive表或分区的存储位置,指定数据在HDFS或OBS上的存储路径。通过设置分区的Location,可以将不同分区的数据存储在不同的存储系统上。

约束与限制

本特性仅适用于MRS 3.2.0及之后版本。

前提条件

已安装Hive客户端。下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

操作步骤

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录。
    cd 客户端安装目录

    例如安装目录为“/opt/client”,则执行以下命令:

    cd /opt/client
  3. 执行以下命令配置环境变量。
    source bigdata_env
  4. 集群是否启用了Kerberos认证。
    • 是,执行以下命令进行用户认证:
      kinit Hive业务用户
    • 否,执行5
  5. 执行以下命令登录Hive客户端。
    beeline
  6. 执行如下命令创建Hive分区表“table_1”,指定分区“pt='2021-12-12'”的路径为“hdfs://xxx”,指定分区“pt='2021-12-18'”的路径为“obs://并行文件系统名称/xxx”:

    创建Hive分区表“table_1”:

    create table table_1(id string) partitioned by(pt string) [stored as [orc|textfile|parquet|...]];

    指定分区“pt='2021-12-12'”的路径为“hdfs://xxx”:

    alter table table_1 add partition(pt='2021-12-12') location 'hdfs://xxx';

    指定分区“pt='2021-12-12'”的路径为“obs://xxx”:

    alter table table_1 add partition(pt='2021-12-18') location 'obs://并行文件系统名称/xxx';
  7. 给分区表“table_1”中插入数据后,对应的分区数据存储在对应的存储源上,可以使用desc查看分区的Location,执行以下命令查看路径下的数据:
    desc formatted table_1 partition(pt='2021-12-18');

验证操作:

配置完成后,可通过以下方式验证分区存储位置是否正确:

  1. 执行desc formatted table_1 partition(pt='2021-12-12');命令,查看HDFS分区的Location。
  2. 执行desc formatted table_1 partition(pt='2021-12-18');命令,查看OBS分区的Location。
  3. 确认HDFS分区的Location以"hdfs://"开头,OBS分区的Location以"obs://"开头。
  4. 执行select * from table_1 where pt='2021-12-12';select * from table_1 where pt='2021-12-18';命令,确认可以正常查询两个分区的数据。

常见问题

  • 查询OBS分区时性能较差

    OBS的访问时延高于HDFS,查询OBS分区时性能可能较差。

    建议将热点数据分区存储在HDFS上,冷数据分区存储在OBS上。对于频繁查询的分区,可以考虑将其迁移到HDFS。或者使用缓存机制,将OBS数据缓存到本地。

  • 无法访问OBS分区

    无法访问OBS分区可能是因为OBS服务未正常运行、并行文件系统未创建、或Hive无法访问OBS。

    请检查OBS服务状态,确认并行文件系统已创建。检查Hive配置中OBS相关的参数是否正确。

相关文档

相关文档