本文为您介绍如何将Hive MetaStore存储在MySQL、RDS中的元数据迁移到DLF中,并介绍如何在EMR集群中配置使用DLF作为数据湖统一元数据。

适用场景

  • 从其他大数据集群迁移到阿里云E-MapReduce产品。
  • 从阿里云EMR老集群(MySQL做元数据),整体集群需要迁移到阿里云EMR新集群(DLF做元数据)。
  • 从阿里云EMR老集群(MySQL做元数据),仅元数据修改为DLF。
    说明 仅EMR-3.33及后续版本、EMR-4.6及后续版本 、EMR-5.1及后续版本才能使用DLF,其他更低版本需要迁移DLF,可加钉钉群33719678咨询。

元数据迁移

准备工作

在元数据迁移之前,需要先检查元数据库远程访问权限、MySQL或RDS网络连接。

登录RDS或MySQL元数据库,执行以下语句进行远程访问授权(以root账号,hivemeta库为例)。
GRANT ALL PRIVILEGES ON hivemeta.* TO 'root'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION;
FLUSH PRIVILEGES;
如果是RDS数据库,也可以在RDS控制台上查看和修改访问权限。RDS

开始迁移

DLF提供了可视化的元数据迁移产品功能,可以快速的将Hive Metastore元数据迁移到DLF元数据中。

  1. 创建迁移任务。
    1. 登录数据湖构建控制台
    2. 在上方切换到EMR集群所属的地域。
    3. 在左侧导航栏,选择元数据管理 > 元数据迁移
    4. 元数据迁移页面,单击创建迁移任务
  2. 配置源库信息。
    配置以下信息,单击下一步
    参数 说明
    数据库类型 选择MySQL类型即可。
    MySQL类型 根据Hive元数据类型选择。
    • 集群内置MySQL:请选择其他MySQL。需要填写JDBC URL、用户名与密码。
    • 独立RDS元数据:请选择Aliyun RDS。需要选择RDS实例,填写元数据库名称、用户名与密码(RDS元数据仅支持阿里云VPC连接方式访问)。
    网络连接 当前支持阿里云VPC公网连接两种方式。请根据上一步MySQL类型进行配置。
    • 阿里云VPC:即EMR集群或RDS的VPC信息。
    • 公网连接:当选择公网连接时,在EMR控制台上添加规则,使EMR集群3306端口(默认)对DLF弹性公网IP开放。添加端口详情请参见管理安全组
  3. 配置迁移任务。
    1. 配置以下信息,单击下一步
      参数 说明
      任务名称 输入元数据迁移任务的名称。
      任务描述 可选参数,输入您的一些任务备注信息。
      冲突解决策略
      • 更新旧的元数据(建议选择):在原有DLF元数据基础上更新元数据。
      • 重建元数据,即先删除旧的DLF元数据后再新建。
      日志存放路径 迁移任务会将每个元数据对象、迁移状态、错误日志(如果有的话)记录到该OSS路径下。
      同步对象 包括Database、Function、Table、Partition四种对象,通常为全选。
      Location替换 适用于迁移过程中需要对table、database的location进行替换修改的情况。
    2. 确认信息无误后,单击确定
  4. 运行迁移任务。
    在迁移任务列表中可以查看刚刚创建的迁移任务,单击操作列的运行执行任务。run
  5. 查看运行记录和日志。
    1. 元数据迁移页面,单击执行历史页签。
    2. 单击操作列的查看日志,可以查看详情信息。
      log
  6. 确认元数据迁移到DLF。
    1. 在左侧导航栏,选择元数据 > 元数据管理
    2. 元数据库页签中,可以查询到期望同步的元数据库表信息。

EMR集群切换元数据

引擎切换元数据

  • Hive
    在Hive服务的hive-site.xml中添加如下配置,开启自动配置更新并保存,然后重启Hive服务。
    <!-- 配置DLF元数据服务地址,Region替换为集群所在的Region,例如cn-hangzhou -->
    dlf.catalog.endpoint=dlf-vpc.{regionId}.aliyuncs.com
    <!-- 注意:复制粘贴后需检查,不要有空格。-->
    hive.imetastoreclient.factory.class=com.aliyun.datalake.metastore.hive2.DlfMetaStoreClientFactory
    dlf.catalog.akMode=EMR_AUTO
    dlf.catalog.proxyMode=DLF_ONLY
    
    <!-- Hive 3需要配置-->
    hive.notification.event.poll.interval=0s
    <!-- EMR-3.33.0之前版本和EMR-4.6.0之前版本,需要配置 -->
    dlf.catalog.sts.isNewMode=false
  • Presto
    在Presto服务的hive.properties中添加如下配置,开启自动配置更新并保存,然后重启Presto服务。
    hive.metastore=dlf
    <!-- 配置DLF元数据服务地址,Region替换为集群所在的Region,例如cn-hangzhou -->
    dlf.catalog.endpoint=dlf-vpc.{regionId}.aliyuncs.com
    dlf.catalog.akMode=EMR_AUTO
    dlf.catalog.proxyMode=DLF_ONLY
    
    <!-- 请参考Hive组件hive-site.xml中配置的hive.metastore.warehouse.dir值 -->
    dlf.catalog.default-warehouse-dir= <!-- 与hive.metastore.warehouse.dir值相同 -->
    
    <!--EMR-3.33.0之前版本和EMR-4.6.0之前版本,需要配置-->
    dlf.catalog.sts.isNewMode=false
  • Spark
    单击部署客户端配置,然后重启Spark服务。部署服务
  • Impala

    单击部署客户端配置,然后重启Impala服务。

验证切换情况

以Hive引擎为例进行验证。

  1. 登录EMR集群,详情请参见登录集群
  2. 执行hive命令,创建数据库。
    create database dlf_test_db;
  3. 登录数据湖构建控制台,查看是否存在数据库dlf_test_db。
    1. 登录数据湖构建控制台
    2. 在左侧导航栏,选择元数据 > 元数据管理
    3. 数据库名称中输入dlf_test_db,单击回车。
      数据库
  4. 在EMR集群执行以下命令,删除创建的数据库。
    drop database dlf_test_db;

常见问题

Q:如果同一个元数据迁移任务,多次运行是什么结果?

A:元数据迁移任务以RDS或MySQL元数据为基准,可以保证DLF元数据与源库中元数据的最终一致性,不会影响最终的准确性。