
# 配置Impala通过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后，即可在Impala客户端创建存储在OBS并行文件系统中的表。
#### 前提条件
如果参考[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS，还需参考[Ranger权限配置]在Ranger中为组件操作用户赋予OBS路径的"Read"和"Write"权限。
#### Impala对接OBS
MRS集群支持Impala服务基于自定义配置方式对接OBS。
配置Impala基于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. 选择"集群 \> 服务 \> impala \> 配置"。
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_0000002445197220.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_0000002477436009.png "点击放大") 
   
   3. 修改HCatalog客户端配置文件目录下的"hivemetastore-site.xml"，将"hive.metastore.warehouse.dir"的值修改为对应的OBS路径，例如"obs://hivetest/user/hive/warehouse/"。
      ```
      vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml
      ```
      
   
   
   
   
7. 进入impala-shell命令行，创建一个数据库并确认Location为OBS路径。 
   1. 切换至客户端安装目录：
      ```
      cd 客户端安装目录
      ```
      
   
   2. 加载环境变量：
      ```
      source bigdata_env
      ```
      
   
   3. 认证用户，未开启Kerberos认证的集群请跳过此操作：
      ```
      kinit Hive组件操作用户
      ```
      
   
   4. 登录impala-shell客户端：
      ```
      impala-shell -i [impalad IP]:[impala 端口]
      ```
      
   
   5. 创建数据库：
      ```
      create database testdb1;
      ```
      
   
   
   
   
 
 #### Ranger权限配置
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
Impala复用Hive的ranger权限配置。
- **hive** 用户组赋予OBS路径的读写权限
  1. 使用Ranger管理员用户登录Ranger WebUI页面，在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"，为**hive** 用户组赋予OBS存储路径的"Read"和"Write"的权限，此时拥有**hive** 组的用户均可以访问hive数据仓库路径。
     例如，为"hive"用户组赋予"obs://hivetest/user/hive/warehouse/"目录的"Read"和"Write"的权限：
     图3为**hive** 用户组赋予OBS存储路径的读和写权限   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002477515813.png "点击放大") 
  
  2. 选择"Settings \> Roles \> Add New Role"，创建"Role Name"为"hive"的角色：
     图4创建**hive** 角色   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002444036050.png "点击放大") 
   
- 自定义用户组赋予OBS路径的读写权限
  1. 登录MRS集群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数据仓库路径。
     图5为自定义Hive用户组赋予OBS存储路径读和写权限   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002477436013.png "点击放大") 
   
- 自定义Location创建库/表/分区授予OBS路径读写权限
  1. 使用Ranger管理员用户登录Ranger WebUI页面。
  
  2. 在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"，为对应用户的用户组赋予OBS存储路径的"Read"和"Write"的权限。 例如，为"hgroup1"用户组赋予"obs://obs-test/test/"目录的"Read"和"Write"的权限：
     图6为用户组赋予OBS路径读和写的权限   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002444195930.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"的权限：
     图7添加具有OBS路径读和写权限的URL策略   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002477515817.png "点击放大") 
  
  4. 进入impala-shell客户端，在创建表时指定Location为OBS文件系统路径。 切换至客户端安装目录：
     ```
     cd 客户端安装目录
     ```
     加载环境变量：
     ```
     source bigdata_env
     ```
     认证用户，未开启Kerberos认证的集群请跳过此操作：
     ```
     kinit Hive组件操作用户
     ```
     登录impala-shell客户端：
     ```
     impala-shell -i [impalad IP]:[impala 端口]
     ```
     例如，创建一个表"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 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服务运维人员。
 
