# 配置Hive表不同分区分别存储至OBS和HDFS
#### 操作场景
在存算分离场景下，企业需要灵活管理数据存储，将热点数据存储在高性能的HDFS上以保障查询性能，将冷数据存储在低成本的OBS上以降低存储成本。Hive分区表支持不同的分区分别指定不同的存储源，可以指定一个分区表中不同分区的存储源为OBS或者HDFS。例如，将最近7天的热点分区数据存储在HDFS上，保障查询性能；将历史冷数据分区存储在OBS上，降低存储成本。这种混合存储方式可以在保证查询性能的同时，有效控制存储成本。
本文介绍如何配置Hive表的不同分区分别存储至OBS和HDFS。
此章节仅说明分区表指定存储源的能力，关于Hive如何在存算分离场景下对接OBS，对接指导可参考[Hive对接OBS文件系统](https://support.huaweicloud.com/usermanual-mrs/mrs_01_1286.html)章节。
- **分区表（Partitioned Table）**：Hive中的一种表类型，通过分区键将数据划分为多个分区，每个分区对应一个独立的存储目录。分区表可以提高查询性能，因为查询时可以只扫描相关分区的数据。
- **Location**：Hive表或分区的存储位置，指定数据在HDFS或OBS上的存储路径。通过设置分区的Location，可以将不同分区的数据存储在不同的存储系统上。
 
#### 约束与限制
本特性仅适用于MRS 3.2.0及之后版本。
#### 前提条件
已安装Hive客户端。下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
#### 操作步骤
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. 执行以下命令，查看HDFS分区的Location。
   ```
   desc formatted table_1 partition(pt='2021-12-12');
   ```
   
2. 查看OBS分区的Location。
   ```
   desc formatted table_1 partition(pt='2021-12-18');
   ```
   
3. 确认HDFS分区的Location以"hdfs://"开头，OBS分区的Location以"obs://"开头。
 
#### 常见问题
- **查询OBS分区时性能较差**
  OBS的访问时延高于HDFS，查询OBS分区时性能可能较差。
  建议将热点数据分区存储在HDFS上，冷数据分区存储在OBS上。对于频繁查询的分区，可以考虑将其迁移到HDFS。或者使用缓存机制，将OBS数据缓存到本地。
  
- **无法访问OBS分区**
  无法访问OBS分区可能是因为OBS服务未正常运行、并行文件系统未创建、或Hive无法访问OBS。
  请检查OBS服务状态，确认并行文件系统已创建。检查Hive配置中OBS相关的参数是否正确。
  
 
#### 相关文档
- 了解Hive数据操作，请参考[Hive数据存储及加密配置](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300253.html)。
- 了解Hive常见问题，请参考[Hive常见问题](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1752.html)。
- 了解Hive各角色日志文件说明，请参考[Hive日志介绍](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0976.html)。
 
