湖仓一体:DWS通过对接Lakeformation读取MRS的Hive数据
场景介绍
当前数据湖、数仓、AI数据处于孤岛化,导致数据虽然可以统一存储在OBS,但各个服务,各个集群的元数据仍然独自管理,形成数据管理的孤立状态。
DWS想要访问MRS存储在OBS上的数据只能通过创建外表的方式来访问,会出现各服务元数据不能统一配置和管理的问题。
湖仓构建LakeFormation作为企业级数据湖一站式构建服务,在存算分离架构基础上提供数据湖元数据统一管理、数据权限管理及API,打通数据壁垒,实现真正数智融合。支持对接MapReduce服务(MRS)、数据仓库服务 DWS、数据湖探索(DLI)、AI开发平台ModelArts、数据治理中心 DataArts Studio等多种计算引擎及大数据云服务,使用户可以便捷高效地构建数据湖和运营相关业务,加速释放业务数据价值。
DWS通过对接Lakeformation服务,可以打破数据孤岛,DWS无需创建外表,通过直接访问Lakeformation,便可获取到各个服务的表的元数据,进而访问各服务存储在OBS上的数据,并且可以通过Lakeformation服务的权限管理来实现细粒度权限控制。
基本流程
本实践介绍DWS通过与LakeFormation建立连接并读取MRS的Hive数据的过程。整个流程分为以下操作,如果已有MRS并已与LakeFormation对接完成,则可跳过相应步骤。
本实践预计时长:2小时。实验过程用到的云服务包括数据仓库服务 DWS、MapReduce服务 MRS、对象存储服务 OBS、湖仓构建LakeFormation、VPC终端节点、统一身份认证 IAM。
使用约束
- 读取的MRS集群必须为MRS 3.3.0-LTS及之后版本,已开启Kerberos认证。
- 支持表存储格式:ORC、PARQUET、TEXT、CSV、HUDI。
- 目前仅支持读取Lakeformation服务中MRS服务的表。
- 目前仅支持查询操作。
- 不支持表包含map、struct、array、binary、tinyint、uniontype字段类型。
- 不支持analyze。
前提条件
- 已创建DWS集群。
- 已创建MRS集群。
- 已创建包含LakeFormation权限的委托(包含最小权限)。
步骤一:创建LakeFormation实例
在创建LakeFormation实例前,要先规划元数据存储的OBS桶,再进行LakeFormation实例及其Catalog、数据库的创建。
- 参见OBS章节创建OBS桶,本例OBS桶名设为lakeformation-obs-xx,其中xx以数字命名,例如lakeformation-obs-01,如有冲突,则往后递增。
- 进入OBS桶,创建文件夹命名为hive,在hive文件夹中继续创建子文件夹,命名为default。
- 登录LakeFormation控制台,单击页面右上角“购买实例”。
填写以下关键信息,其他默认即可,了解参数含义,请参见创建LakeFormation实例。
表1 创建LakeFormation 关键参数
取值
类型
共享
计费模式
按需收费
名称
lakeformation-demo
- 单击“立即购买”。
- 购买成功后,回到LakeFormation控制台首页,刷新页面,在左侧选取到新创建的LakeFormation后,选择“元数据 > Catalog”。
- 单击“创建Catalog”,填写以下参数后单击“提交”。
- Catalog名称:hive(固定名称,不可自定义)
- 选择位置:选择上面创建的OBS桶,路径选择如下:obs://lakeformation-obs-01/hive/。

- 左侧导航选择“元数据 > 数据库”,单击“创建数据库”。
- 填写以下参数后单击“提交”。
- 库名称:default(固定名称,不可自定义)
- 所属Catalog:hive
- 选择位置:选择hive Catalog存储路径下的位置,例如“obs://lakeformation-obs-01/hive/default”。

- 选择“接入管理 > 创建客户端”,创建LakeFormation实例接入管理客户端。其中“虚拟私有云”和“所属子网”需要与待对接的MRS集群保持一致。
MRS集群的VPC子网信息可通过登录MRS管理控制台,在MRS集群的概览页面中获取。
客户端创建完成后,在客户端详情信息中获取对应客户端的“接入IP”信息并记录。
- 创建对接LakeFormation权限的委托。
- 登录IAM控制台。
- 在左侧导航栏选择“委托”,单击右上角的“创建委托”,配置相关参数,单击“下一步”。
- 委托名称:例如“visit_lakeformation_agency”
- 委托类型:选择“普通账号”
- 委托的账号:输入被委托的华为云账号名称
- 持续时间:根据实际情况自定义
- 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
- 策略名称:例如“dev_visit_lakeformation”
- 策略配置方式:“可视化视图”或“JSON视图”
- 策略内容,选JSON视图,配置策略内容如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:table:create", "lakeformation:database:alter", "lakeformation:table:alter", "lakeformation:database:drop", "lakeformation:database:create", "lakeformation:role:describe", "lakeformation:policy:create", "lakeformation:policy:export", "lakeformation:function:alter", "lakeformation:function:describe", "lakeformation:table:drop", "lakeformation:catalog:describe", "lakeformation:table:describe", "lakeformation:function:drop", "lakeformation:database:describe", "lakeformation:function:create", "lakeformation:transaction:operate", "lakeformation:policy:drop", "lakeformation:policy:describe", "lakeformation:connection:describe" ] } ] }
- 确认后,回到策略列表,勾选上面新建的策略名称“dev_visit_lakeformation”,单击“下一步”。
- 选择授权范围方案,默认即可,单击“确定”。
- 在“委托”页面,将鼠标移动到新创建的委托名称上,获取具备访问LakeFormation权限的委托ID。
- 创建对接OBS权限的委托。
- 登录IAM控制台。
- 在左侧导航栏选择“委托”,单击右上角的“创建委托”,选择相关参数,单击“下一步”。
- 委托名称:例如“visit_obs_agency”。
- 委托类型:选择“普通账号”。
- 委托的账号:输入被委托的华为云账号名称。
- 持续时间:根据实际情况自定义。
- 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
- 策略名称:例如“dev_visit_obs”。
- 策略配置方式:JSON视图。
- 策略内容:填入如下信息。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:GetBucketLocation", "obs:bucket:ListBucketMultipartUploads", "obs:object:GetObject", "obs:object:ModifyObjectMetaData", "obs:object:DeleteObject", "obs:object:ListMultipartUploadParts", "obs:bucket:HeadBucket", "obs:object:AbortMultipartUpload", "obs:bucket:ListBucket", "obs:object:PutObject" ], "Resource": [ "OBS:*:*:bucket:*", "OBS:*:*:object:*" ] } ] }
- 确认后,回到策略列表,勾选上面新建的策略名称“dev_visit_obs”,单击“下一步”。
- 选择授权范围方案,默认即可,单击“确定”。
- 在“委托”页面,将鼠标移动到新创建的委托名称上,获取具备访问OBS权限的委托ID。
- 创建对接ECS/BMS云服务委托。
- 登录IAM控制台。
- 在左侧导航栏选择“委托”,单击右上角的“创建委托”,选择相关参数,单击“下一步”。
- 委托名称:例如“lakeformation_test”。
- 委托类型:选择“云服务”。
- 云服务:选择“ECS BMS”。
- 持续时间:根据实际情况自定义。
- 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
- 确认后,回到策略列表,勾选上面新建的策略名称“lakeformation_test”,单击“下一步”。
- 选择授权范围方案,选择“所有资源”,单击“确定”。
- 创建LakeFormation数据连接。
- 登录MRS控制台,在导航栏选择“数据连接”。
- 单击“新建数据连接 ”。
- 填写以下参数。
表2 创建LakeFormation数据连接 参数
示例
说明
类型
LakeFormation
选择“LakeFormation”,当前仅MRS 3.3.0-LTS及之后版本支持连接该类型。
名称
mrs_LakeFormation
数据连接的名称。
LakeFormation实例
-
选择LakeFormation实例名称。
虚拟私有云
-
需要与待对接的MRS集群在同一虚拟私有云。
子网
-
选择子网名称。
VPC终端节点
-
选择VPC终端节点,或单击“创建对应LakeFormation实例的VPC终端节点”进行创建。
选择VPC终端节点后,产生的费用将由VPCEP服务收取。
LakeFormation委托
现有委托
选择“现有委托”,并选择10创建的委托,例如“visit_lakeformation_agency”。
- 创建完成后,在“数据连接”页面记录已创建数据连接的ID。
步骤二:配置MRS与LakeFormation对接
- 已创建MRS集群,注意MRS集群必须满足以下条件,详情请参见MRS文档。
- 版本必须为MRS 3.3.0-LTS及之后版本,已开启Kerberos认证,开启存算分离。
- 集群需包含Hadoop、Ranger、Hive、Guardian、Spark(可选)、Flink(可选)等组件。
- 创建集群时,需自定义购买,并勾选“拓扑调整”,勾选Ranger下面的至少1个PSC(PolicySync)实例,确保PolicySync和RangerAdmin实例部署在一个节点上,同时检查Guardian组件至少包含2个TokenServer(TS)实例。
- 已通过MRS管理控制台同步IAM用户,且集群各服务运行正常。
- MRS集群中Hive组件已开启Ranger鉴权,开启请参见配置集群组件启用Ranger鉴权。
- 登录MRS控制台,选择“现有集群”。
- 单击待对接的MRS名称进入集群“概览”页签。
- 单击“委托”后的“选择委托”,选择12创建的委托名称。
- 单击“数据连接”右侧的“单击管理”,进入数据连接配置界面。
- 单击“配置LakeFormation数据连接”,在下拉框中选择13记录的LakeFormation数据连接ID,单击“确定”。
- 登录MRS集群的FusionInsight Manager页面,具体操作请参考访问MRS集群Manager。
- 配置Guardian。
- 登录IAM控制台。
- 单击用户名,在下拉列表中单击“我的凭证”。
- 在“API凭证”页面获取“账号ID”、项目列表中查看项目ID。
- 在FusionInsight Manager界面,选择“集群 > 服务 > Guardian > 配置 > 全部配置”,搜索并修改以下参数后,单击“保存”。
表3 配置Guardian 参数
含义
取值
token.server.access.iam.domain.id
访问IAM的用户对应的账号 ID。
从8.c获取账号ID信息。
xxx
token.server.access.iam.project.id
访问IAM的用户对应的项目ID。
从8.c获取项目ID信息。
xxx
token.server.access.label.agency.name
指定IAM委托的名字,需要具有访问OBS的权限。
即11创建的委托名称。
visit_obs_agency
fs.obs.delegation.token.providers
delegation.token的产生类名,默认为空。
此处同时勾选以下参数值:
- com.huawei.mrs.dt.MRSDelegationTokenProvider
- com.huawei.mrs.dt.GuardianDTProvider
com.huawei.mrs.dt.MRSDelegationTokenProvider,com.huawei.mrs.dt.GuardianDTProvider
fs.obs.guardian.accesslabel.enabled
是否开启使用Guardian对接OBS的access label。
true
fs.obs.guardian.enabled
是否开启使用Guardian。
true
- 进入Guardian服务“概览”页面,选择“更多 > 重启服务”。
- 配置Hive对接OBS文件系统。
- 在FusionInsight Manager界面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
- 在左侧的导航列表中选择“HiveServer > 自定义”。在自定义配置项中添加如下参数。
表4 配置Hive对接OBS 参数
描述
取值样例
hive.server.customized.configs
- 添加参数“hive.metastore.warehouse.dir”。
- 设置值为6获取的hive Catalog在OBS中的存储路径。
- 名称:hive.metastore.warehouse.dir
- 值:obs://lakeformation-obs-01/hive
hive.metastore.customized.configs
仅MRS 3.3.1及之后版本集群需要添加该参数。
- 添加参数“hive.metastore.warehouse.dir”。
- 设置值为6获取的hive Catalog在OBS中的存储路径。
- 名称:hive.metastore.warehouse.dir
- 值:obs://lakeformation-obs-01/hive
- 单击“保存”,保存配置。
- 在MRS集群“组件管理”页签,查看是否存在“配置超期”的组件,如果存在请单击“操作”列的“重启”,重启相关组件。
- 重新下载并安装MRS集群完整客户端。具体操作请参考安装客户端。
- 如果需要在管理控制台执行作业提交操作,需要更新集群内置客户端配置文件。
在MRS集群概览页面,获取弹性IP,使用该IP登录Master节点,执行如下命令刷新集群内置客户端。
su - omm
sh /opt/executor/bin/refresh-client-config.sh
- 登录客户端安装节点,通过Hive客户端查看数据库,确认对接成功。
source 客户端安装路径/bigdata_env
kinit 组件业务用户
beeline
show databases;
desc database default;
!q

步骤三:配置DWS与LakeFormation对接
- 登录DWS控制台,单击“专属集群 > 集群列表”,在集群列表中查看已创建好的集群。
- 单击集群名称,进入“集群详情”页面,选择“数据源>LakeFormation数据源”。
- 在LakeFormation数据源页面,单击“创建LakeFormation数据源连接”,参考下面填写配置参数。

表5 创建LakeFormation数据源连接 参数名称
说明
数据源名称
lakeformation-dws。
LakeFormation实例
下拉框选择步骤一:创建LakeFormation实例创建的LakeFormation实例。
数据库
要创建的LakeFormation数据源连接所在的数据库。
委托
选择10创建的委托。
描述
-
- 单击“确认”。
步骤四:通过LakeFormation读取MRS的Hive数据
- 通过创建external schema来访问存储在Lakeformation服务中MRS服务表的元数据,进而访问存储在OBS上的表数据。 更多语法,请参见CREATE EXTERNAL SCHEMA。
CREATE EXTERNAL SCHEMA ex_lf -- WITH SOURCE lakeformation --外部元数据存储引擎的类型,此处填写lakeformation。 DATABASE 'default' --要访问的Lakeformation中的数据库的名称。 SERVER lakeformation-dws --创建的Lakeformation数据源名称 CATALOG 'hive'; --Lakeformation中对应的要访问的catalog名称,此处填写hive。 - 查看dws当前用户,例如dbadmin。
1SELECT current_user;
- 在LakeFormation创建同名角色,并授权。
- 登录LakeFormation控制台。
- 在左侧下拉框中选择待操作的LakeFormation实例,选择“数据权限 > 角色”。
- 单击“创建角色”,在弹出的窗口中“角色名称”填写dbadmin,单击“确定”。
- 选择“数据权限 > 数据授权”。单击“授权”,在弹出的窗口中参考下表配置参数后,单击“确定”。
表6 LakeFormation授权角色 参数
参数说明
主体类型
角色
选择角色
dbadmin
授权类型
资源
资源类型
选择“Catalog”为hive下的“default”数据库。
权限
ALL
- 单击“确定”。
- 回到DWS连接数据库的界面,执行以下SQL,查询Hive表数据成功。
1SELECT * FROM ex_lf.test;