文档首页/ 数据仓库服务 DWS/ 最佳实践/ 导入导出/ 湖仓一体:DWS通过对接Lakeformation读取MRS的Hive数据
更新时间:2026-05-26 GMT+08:00
分享

湖仓一体:DWS通过对接Lakeformation读取MRS的Hive数据

场景介绍

当前数据湖、数仓、AI数据处于孤岛化,导致数据虽然可以统一存储在OBS,但各个服务,各个集群的元数据仍然独自管理,形成数据管理的孤立状态。

DWS想要访问MRS存储在OBS上的数据只能通过创建外表的方式来访问,会出现各服务元数据不能统一配置和管理的问题。

图1 DWS访问MRS

湖仓构建LakeFormation作为企业级数据湖一站式构建服务,在存算分离架构基础上提供数据湖元数据统一管理、数据权限管理及API,打通数据壁垒,实现真正数智融合。支持对接MapReduce服务(MRS)、数据仓库服务 DWS、数据湖探索(DLI)、AI开发平台ModelArts、数据治理中心 DataArts Studio等多种计算引擎及大数据云服务,使用户可以便捷高效地构建数据湖和运营相关业务,加速释放业务数据价值。

DWS通过对接Lakeformation服务,可以打破数据孤岛,DWS无需创建外表,通过直接访问Lakeformation,便可获取到各个服务的表的元数据,进而访问各服务存储在OBS上的数据,并且可以通过Lakeformation服务的权限管理来实现细粒度权限控制。

图2 DWS对接LakeFormation

基本流程

本实践介绍DWS通过与LakeFormation建立连接并读取MRS的Hive数据的过程。整个流程分为以下操作,如果已有MRS并已与LakeFormation对接完成,则可跳过相应步骤。

本实践预计时长:2小时。实验过程用到的云服务包括数据仓库服务 DWSMapReduce服务 MRS对象存储服务 OBS湖仓构建LakeFormationVPC终端节点统一身份认证 IAM

  1. 步骤一:创建LakeFormation实例
  2. 步骤二:配置MRS与LakeFormation对接
  3. 步骤三:配置DWS与LakeFormation对接
  4. 步骤四:通过LakeFormation读取MRS的Hive数据

使用约束

  • 读取的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、数据库的创建。

  1. 参见OBS章节创建OBS桶,本例OBS桶名设为lakeformation-obs-xx,其中xx以数字命名,例如lakeformation-obs-01,如有冲突,则往后递增。
  2. 进入OBS桶,创建文件夹命名为hive,在hive文件夹中继续创建子文件夹,命名为default。
  3. 登录LakeFormation控制台,单击页面右上角“购买实例”。

    填写以下关键信息,其他默认即可,了解参数含义,请参见创建LakeFormation实例

    表1 创建LakeFormation

    关键参数

    取值

    类型

    共享

    计费模式

    按需收费

    名称

    lakeformation-demo

  4. 单击“立即购买”。
  5. 购买成功后,回到LakeFormation控制台首页,刷新页面,在左侧选取到新创建的LakeFormation后,选择“元数据 > Catalog”。
  6. 单击“创建Catalog”,填写以下参数后单击“提交”。

    • Catalog名称:hive(固定名称,不可自定义)
    • 选择位置:选择上面创建的OBS桶,路径选择如下:obs://lakeformation-obs-01/hive/。

  7. 左侧导航选择“元数据 > 数据库”,单击“创建数据库”。
  8. 填写以下参数后单击“提交”。

    • 库名称:default(固定名称,不可自定义)
    • 所属Catalog:hive
    • 选择位置:选择hive Catalog存储路径下的位置,例如“obs://lakeformation-obs-01/hive/default”。

  9. 选择“接入管理 > 创建客户端”,创建LakeFormation实例接入管理客户端。其中“虚拟私有云”和“所属子网”需要与待对接的MRS集群保持一致。

    MRS集群的VPC子网信息可通过登录MRS管理控制台,在MRS集群的概览页面中获取。

    客户端创建完成后,在客户端详情信息中获取对应客户端的“接入IP”信息并记录。

  10. 创建对接LakeFormation权限的委托

    1. 登录IAM控制台
    2. 在左侧导航栏选择“委托”,单击右上角的“创建委托”,配置相关参数,单击“下一步”。

      参数配置如下:

      • 委托名称:例如“visit_lakeformation_agency”
      • 委托类型:选择“普通账号”
      • 委托的账号:输入被委托的华为云账号名称
      • 持续时间:根据实际情况自定义
    3. 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
      • 策略名称:例如“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"
                    ]
                }
            ]
        }
    4. 确认后,回到策略列表,勾选上面新建的策略名称“dev_visit_lakeformation”,单击“下一步”。
    5. 选择授权范围方案,默认即可,单击“确定”。
    6. 在“委托”页面,将鼠标移动到新创建的委托名称上,获取具备访问LakeFormation权限的委托ID。

  11. 创建对接OBS权限的委托

    1. 登录IAM控制台
    2. 在左侧导航栏选择“委托”,单击右上角的“创建委托”,选择相关参数,单击“下一步”。

      参数选择如下:

      • 委托名称:例如“visit_obs_agency”。
      • 委托类型:选择“普通账号”。
      • 委托的账号:输入被委托的华为云账号名称。
      • 持续时间:根据实际情况自定义。
    3. 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
      • 策略名称:例如“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:*"
                    ]
                }
            ]
        }
    4. 确认后,回到策略列表,勾选上面新建的策略名称“dev_visit_obs”,单击“下一步”。
    5. 选择授权范围方案,默认即可,单击“确定”。
    6. 在“委托”页面,将鼠标移动到新创建的委托名称上,获取具备访问OBS权限的委托ID。

  12. 创建对接ECS/BMS云服务委托

    1. 登录IAM控制台
    2. 在左侧导航栏选择“委托”,单击右上角的“创建委托”,选择相关参数,单击“下一步”。

      参数选择如下:

      • 委托名称:例如“lakeformation_test”。
      • 委托类型:选择“云服务”。
      • 云服务:选择“ECS BMS”。
      • 持续时间:根据实际情况自定义。
    3. 在选择策略界面右上角单击“新建策略”,配置如下信息,单击“下一步”。
      • 策略名称:自定义。
      • 策略配置方式:选择JSON视图。
      • 策略内容:配置如下信息,其中访问LakeFormation和OBS权限的委托ID分别参见10.f11.f获取并修改。
        {
            "Version": "1.1",
            "Statement": [
                {
                    "Action": [
                        "iam:agencies:assume"
                    ],
                    "Resource": {
                        "uri": [
                            "/iam/agencies/授予给自身账号具备访问LakeFormation权限的委托ID",
                            "/iam/agencies/授予给自身账号具备访问OBS权限的委托ID"
                        ]
                    },
                    "Effect": "Allow"
                }
            ]
        }
    4. 确认后,回到策略列表,勾选上面新建的策略名称“lakeformation_test”,单击“下一步”。
    5. 选择授权范围方案,选择“所有资源”,单击“确定”。

  13. 创建LakeFormation数据连接

    1. 登录MRS控制台,在导航栏选择“数据连接”。
    2. 单击“新建数据连接 ”。
    3. 填写以下参数。
      表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”。

    4. 创建完成后,在“数据连接”页面记录已创建数据连接的ID。

步骤二:配置MRS与LakeFormation对接

  1. 已创建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鉴权

  2. 登录MRS控制台选择“现有集群”。
  3. 单击待对接的MRS名称进入集群“概览”页签。
  4. 单击“委托”后的“选择委托”,选择12创建的委托名称。
  5. 单击“数据连接”右侧的“单击管理”,进入数据连接配置界面。
  6. 单击“配置LakeFormation数据连接”,在下拉框中选择13记录的LakeFormation数据连接ID,单击“确定”。
  7. 登录MRS集群的FusionInsight Manager页面,具体操作请参考访问MRS集群Manager
  8. 配置Guardian。

    1. 登录IAM控制台
    2. 单击用户名,在下拉列表中单击“我的凭证”。
    3. 在“API凭证”页面获取“账号ID”、项目列表中查看项目ID。
    4. 在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

    5. 进入Guardian服务“概览”页面,选择“更多 > 重启服务”。

  9. 配置Hive对接OBS文件系统。

    1. 在FusionInsight Manager界面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
    2. 在左侧的导航列表中选择“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
    3. 单击“保存”,保存配置。

  10. 在MRS集群“组件管理”页签,查看是否存在“配置超期”的组件,如果存在请单击“操作”列的“重启”,重启相关组件。
  11. 重新下载并安装MRS集群完整客户端。具体操作请参考安装客户端
  12. 如果需要在管理控制台执行作业提交操作,需要更新集群内置客户端配置文件。

    在MRS集群概览页面,获取弹性IP,使用该IP登录Master节点,执行如下命令刷新集群内置客户端。

    su - omm

    sh /opt/executor/bin/refresh-client-config.sh

  13. 登录客户端安装节点,通过Hive客户端查看数据库,确认对接成功。

    source 客户端安装路径/bigdata_env

    kinit 组件业务用户

    beeline

    show databases;

    desc database default;

    !q

步骤三:配置DWS与LakeFormation对接

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

    表5 创建LakeFormation数据源连接

    参数名称

    说明

    数据源名称

    lakeformation-dws。

    LakeFormation实例

    下拉框选择步骤一:创建LakeFormation实例创建的LakeFormation实例。

    数据库

    要创建的LakeFormation数据源连接所在的数据库。

    委托

    选择10创建的委托。

    描述

    -

  4. 单击“确认”。

步骤四:通过LakeFormation读取MRS的Hive数据

  1. 通过创建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。

  2. 查看dws当前用户,例如dbadmin。

    1
    SELECT current_user;
    

  1. 在LakeFormation创建同名角色,并授权。

    1. 登录LakeFormation控制台
    2. 在左侧下拉框中选择待操作的LakeFormation实例,选择“数据权限 > 角色”。
    3. 单击“创建角色”,在弹出的窗口中“角色名称”填写dbadmin,单击“确定”。
    4. 选择“数据权限 > 数据授权”。单击“授权”,在弹出的窗口中参考下表配置参数后,单击“确定”。
      表6 LakeFormation授权角色

      参数

      参数说明

      主体类型

      角色

      选择角色

      dbadmin

      授权类型

      资源

      资源类型

      选择“Catalog”为hive下的“default”数据库。

      权限

      ALL

    5. 单击“确定”。

  2. 回到DWS连接数据库的界面,执行以下SQL,查询Hive表数据成功。

    1
    SELECT * FROM ex_lf.test;
    

相关文档