EMR元数据迁移到数据湖构建(DLF)

本文为您介绍如何将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,并且EMR集群仅支持DLF 1.0。对于其他低于此版本的用户,需迁移至DLF,相关咨询请加入钉钉群33719678。

元数据迁移

准备工作

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

登录RDSMySQL元数据库,执行以下语句进行远程访问授权(以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集群或RDSVPC信息。

    • 公网连接:当选择公网连接时,在EMR控制台上添加规则,使EMR集群3306端口(默认)对DLF弹性公网IP开放。添加端口详情请参见管理安全组

  3. 配置迁移任务。

    1. 配置以下信息,单击下一步

      参数

      说明

      任务名称

      输入元数据迁移任务的名称。

      任务描述

      可选参数,输入您的一些任务备注信息。

      冲突解决策略

      • 更新旧的元数据(建议选择):在原有DLF元数据基础上更新元数据。

      • 重建元数据,即先删除旧的DLF元数据后再新建。

      日志存放路径

      迁移任务会将每个元数据对象、迁移状态、错误日志(如果有的话)记录到该OSS路径下。

      同步对象

      包括Database、Function、Table、Partition四种对象,通常为全选。

      Location替换

      适用于迁移过程中需要对table、databaselocation进行替换修改的情况。

    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:元数据迁移任务以RDSMySQL元数据为基准,可以保证DLF元数据与源库中元数据的最终一致性,不会影响最终的准确性。