# 配置Hive通过Guardian访问OBS
参考[配置Guardian服务不启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300579.html)或[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS后，即可在Hive客户端创建存储在OBS并行文件系统中的表。
#### 前提条件
如果参考[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS，还需参考[Ranger权限配置]在Ranger中为组件操作用户赋予OBS路径的"Read"和"Write"权限。
 #### Hive对接OBS
MRS集群支持Hive服务基于Metastore方式对接OBS。
配置Hive基于MetaStore方式对接OBS：
1. 已参考[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成存算分离配置。
2. 登录MRS集群Manager界面。 
   登录集群Manager界面请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
3. 选择"集群 \> 服务 \> Hive \> 配置"。
4. 在搜索框搜索"hive.metastore.warehouse.dir"，设置Hive表数据的默认存储路径为OBS路径，例如：obs://hivetest/user/hive/warehouse/，其中"hivetest"为OBS文件系统名。 
   图1hive.metastore.warehouse.dir配置   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001879580580.png "点击放大")
   
   
5. 单击"保存"保存配置，然后单击"集群 \> 服务"，在服务列表中重启Hive服务。
6. 更新客户端配置文件。 
   1. 登录Hive客户端所在的节点，执行以下命令修改Hive客户端配置文件目录下的"hivemetastore-site.xml"。
      ```
      vi 客户端安装目录/Hive/config/hivemetastore-site.xml
      ```
      
   
   2. 将"hive.metastore.warehouse.dir"的值修改为对应的OBS路径，例如"obs://hivetest/user/hive/warehouse/"。
      图2配置OBS路径   
      ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002761613451.png "点击放大") 
   
   3. 修改HCatalog客户端配置文件目录下的"hivemetastore-site.xml"，将"hive.metastore.warehouse.dir"的值修改为对应的OBS路径，例如"obs://hivetest/user/hive/warehouse/"。
      ```
      vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml
      ```
      
   
   
   
   
7. 集群已启用Kerberos认证（安全模式）时，需要参考[自定义用户组赋予OBS路径的读写权限]为组件操作用户赋予OBS路径的"Read"和"Write"权限。集群未启用Kerberos认证（普通模式）时默认拥有OBS权限，无需额外配置。
8. 进入Hive Beeline命令行，创建一个数据库并确认Location为OBS路径。 
   1. 切换至客户端安装目录：
      ```
      cd 客户端安装目录
      ```
      
   
   2. 加载环境变量：
      ```
      source bigdata_env
      ```
      
   
   3. 认证用户，未开启Kerberos认证的集群请跳过此操作：
      ```
      kinit Hive组件操作用户
      ```
      
   
   4. 登录Hive客户端：
      ```
      beeline
      ```
      
   
   5. 创建数据库：
      ```
      create database testdb1;
      ```
      
   
   6. 查看数据库的Location：
      ```
      show create database testdb1;
      ```
      图3查看新创建的Hive数据库的Location   
      ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002761658563.png) 
   
   
   
   
 
 #### Ranger权限配置
- 自定义用户组赋予OBS路径的读写权限
  1. 登录Manager，选择"系统 \> 权限 \> 用户组 \> 添加用户组"。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
     
  
  2. 创建一个空角色的用户组，例如，名称为"hiveobs1"，并将该用户组绑定给对应用户。
  
  3. 使用**rangeradmin**用户登录Ranger管理页面。
  
  4. 在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"。
  
  5. 为"hiveobs1"用户组赋予OBS存储路径的"Read"和"Write"的权限，此时绑定"hiveobs1"组的用户均可以访问hive数据仓库路径。
     图4为自定义Hive用户组赋予OBS存储路径读和写权限   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002761658903.png "点击放大") 
   
- 自定义Location创建库/表/分区授予OBS路径读写权限
  1. 使用Ranger管理员用户登录Ranger WebUI页面。
  
  2. 在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"，为对应用户的用户组赋予OBS存储路径的"Read"和"Write"的权限。 例如，为"hgroup1"用户组赋予"obs://obs-test/test/"目录的"Read"和"Write"的权限：
     图5为用户组赋予OBS路径读和写的权限   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002761659565.png "点击放大") 
  
  3. 在首页中单击"HADOOP SQL"区域的组件插件名称"Hive"，为对应用户的用户组添加赋予OBS存储路径的"Read"和"Write"权限的URL策略，详细操作请参见[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1858.html)。
     例如，为"hgroup1"用户组创建"hive_url_policy"URL策略赋予"obs://obs-test/test/"目录的"Read"和"Write"的权限：
     图6添加具有OBS路径读和写权限的URL策略   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001879580592.png "点击放大") 
  
  4. 进入**beeline** 客户端，在创建表时指定Location为OBS文件系统路径。
     切换至客户端安装目录：
     ```
     cd 客户端安装目录
     ```
     加载环境变量：
     ```
     source bigdata_env
     ```
     认证用户，未开启Kerberos认证的集群请跳过此操作：
     ```
     kinit Hive组件操作用户
     ```
     登录Hive客户端：
     ```
     beeline
     ```
     例如，创建一个表"test"，该表的Location为"obs://obs-test/test/数据库名/表名"：
     ```
     create external table test(name string) location "obs://obs-test/test/数据库名/表名";
     ```
     
   
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
- "hive.metastore.warehouse.dir"配置的OBS路径必须以"/"结尾。
- 视图表授权需要授予视图表权限和视图表对应的物理表路径权限。
- 仅支持对数据库/表进行级联授权操作，不支持对分区做级联权限，如果分区路径不在表路径下，则需要用户手动授权分区路径。
- 不支持对Hive Ranger策略中的"Deny Conditions"进行级联授权，即"Deny Conditions"的权限仅限制表权限，不能生成HDFS/OBS存储源端的权限。
- 级联授权生成的HDFS/OBS存储源端的权限弱于HDFS Ranger策略的权限，即如果已经对表的HDFS存储源设置了HDFS Ranger权限，则级联权限将不会生效。
- 不支持对存储源为OBS的表级联授权后直接进行**alter** 操作，需要给对应用户组额外授予OBS表路径的父目录的"Read"和"Write"权限才能使用**alter**功能。
- 对接OBS后，如需通过Ranger配置组件关于OBS相关路径的权限策略，需确保OBS服务已开启AccessLabel功能，若未开启，需手动开启，详细操作请联系OBS服务运维人员。
- 部分用户组和角色默认没有OBS路径的权限，且不支持在Ranger权限中配置。不支持的用户组和角色请参考[表1 配置不参与OBS路径授权的用户组和角色](https://support.huaweicloud.com/usermanual-mrs/mrs_01_3010465.html#mrs_01_3010465__table9763152710538)中的参数取值。
 
