配置Hive通过Guardian访问OBS
参考配置Guardian服务不启用Ranger OBS路径鉴权或配置Guardian服务启用Ranger OBS路径鉴权完成Guardian对接OBS后,即可在Hive客户端创建存储在OBS并行文件系统中的表。
前提条件
如果参考配置Guardian服务启用Ranger OBS路径鉴权完成Guardian对接OBS,还需参考Ranger权限配置在Ranger中为组件操作用户赋予OBS路径的“Read”和“Write”权限。
Hive对接OBS
MRS集群支持Hive服务基于Metastore方式对接OBS。
配置Hive基于MetaStore方式对接OBS:
- 已参考配置Guardian服务启用Ranger OBS路径鉴权完成存算分离配置。
- 登录MRS集群Manager界面。
登录集群Manager界面请参考访问MRS集群Manager。
- 选择“集群 > 服务 > Hive > 配置”。
- 在搜索框搜索“hive.metastore.warehouse.dir”,设置Hive表数据的默认存储路径为OBS路径,例如:obs://hivetest/user/hive/warehouse/,其中“hivetest”为OBS文件系统名。
图1 hive.metastore.warehouse.dir配置
- 单击“保存”保存配置,然后单击“集群 > 服务”,在服务列表中重启Hive服务。
- 更新客户端配置文件。
- 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。
vi 客户端安装目录/Hive/config/hivemetastore-site.xml
- 将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
图2 配置OBS路径
- 修改HCatalog客户端配置文件目录下的“hivemetastore-site.xml”,将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml
- 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。
- 进入Hive Beeline命令行,创建一个数据库并确认Location为OBS路径。
- 切换至客户端安装目录:
cd 客户端安装目录
- 加载环境变量:
source bigdata_env
- 认证用户,未开启Kerberos认证的集群请跳过此操作:
kinit Hive组件操作用户
- 登录Hive客户端:
beeline
- 创建数据库:
create database testdb1;
- 查看数据库的Location:
show create database testdb1;
图3 查看新创建的Hive数据库的Location
- 切换至客户端安装目录:
Ranger权限配置
- hive用户组赋予OBS路径的读写权限
- 使用Ranger管理员用户登录Ranger WebUI页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,为hive用户组赋予OBS存储路径的“Read”和“Write”的权限,此时拥有hive组的用户均可以访问hive数据仓库路径。
例如,为“hive”用户组赋予“obs://hivetest/user/hive/warehouse/”目录的“Read”和“Write”的权限:
图4 为hive用户组赋予OBS存储路径的读和写权限 - 选择“Settings > Roles > Add New Role”,创建“Role Name”为“hive”的角色:
图5 创建hive角色
- 使用Ranger管理员用户登录Ranger WebUI页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,为hive用户组赋予OBS存储路径的“Read”和“Write”的权限,此时拥有hive组的用户均可以访问hive数据仓库路径。
- 自定义用户组赋予OBS路径的读写权限
- 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
- 创建一个空角色的用户组,例如,名称为“hiveobs1”,并将该用户组绑定给对应用户。
- 使用rangeradmin用户登录Ranger管理页面。
- 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
- 为“hiveobs1”用户组赋予OBS存储路径的“Read”和“Write”的权限,此时绑定“hiveobs1”组的用户均可以访问hive数据仓库路径。
图6 为自定义Hive用户组赋予OBS存储路径读和写权限
- 自定义Location创建库/表/分区授予OBS路径读写权限
- 使用Ranger管理员用户登录Ranger WebUI页面。
- 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限。
例如,为“hgroup1”用户组赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:
图7 为用户组赋予OBS路径读和写的权限 - 在首页中单击“HADOOP SQL”区域的组件插件名称“Hive”,为对应用户的用户组添加赋予OBS存储路径的“Read”和“Write”权限的URL策略,详细操作请参见添加Hive的Ranger访问权限策略。
例如,为“hgroup1”用户组创建“hive_url_policy”URL策略赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:
图8 添加具有OBS路径读和写权限的URL策略 - 进入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/数据库名/表名";

- 视图表授权需要授予视图表权限和视图表对应的物理表路径权限。
- 仅支持对数据库/表进行级联授权操作,不支持对分区做级联权限,如果分区路径不在表路径下,则需要用户手动授权分区路径。
- 不支持对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服务运维人员。