通过EMR+DLF数据湖方案,可以为企业提供数据湖内的统一的元数据管理,统一的权限管理,支持多源数据入湖以及一站式数据探索的能力。本方案支持已有EMR集群元数据库使用RDS或内置MySQL数据库迁移DLF,通过统一的元数据管理,多种数据源入湖,搭建高效的数据湖解决方案。
本文主要介绍如何将Hive Metasstore存储在MySQL/RDS中的元数据迁移到DLF中,并介绍如何在EMR集群中配置使用DLF作为数据湖统一元数据。
适用场景
从其他大数据集群迁移到阿里云E-MapReduce产品时,元数据迁移可以参考该文档。
从阿里云EMR老集群(MySQL做元数据),整体集群需要迁移到阿里云EMR新集群(DLF做元数据)时,元数据迁移可参考该文档。
从阿里云EMR老集群(MySQL做元数据),仅元数据修改为DLF时,可以参考该文档。
注意版本:EMR主版本需要3系列>=EMR 3.33,或 4系列>= EMR 4.6 ,或 5系列>=EMR 5.1 才能使用DLF,其他更低版本需要迁移DLF,可加钉钉群:33719678
元数据迁移
准备工作
在元数据迁移之前,我们需要检查元数据库远程访问权限。
登录RDS或MySQL元数据库,执行如下语句进行远程访问授权(以root账号,hivemeta库为例)
GRANT ALL PRIVILEGES ON hivemeta.* TO 'root'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION;
FLUSH PRIVILEGES;
如果是RDS数据库,也可以在RDS控制台上查看和修改访问权限
开始迁移
DLF提供了可视化的元数据迁移产品功能,可以快速的将Hive Metastore元数据迁移到DLF元数据中。
创建迁移任务
进入数据湖构建控制台,切换到EMR集群所属的区域,选择左侧菜单“元数据管理-元数据迁移”,并单击“创建迁移任务”进行配置迁移任务,如下图
源库配置
元数据库类型:选择MySQL类型即可。
MySQL类型:根据Hive元数据类型选择。
集群内置MySQL,请选择“其他MySQL”。需要填写JDBC URL、用户名与密码。(建议JDBC URL填写内网ip,并通过阿里云VPC连接方式访问;如果选择公网连接,则填写公网ip)
独立RDS元数据,请选择“Aliyun RDS”。需要选择RDS实例,填写元数据库名称、用户名与密码(RDS元数据仅支持阿里云VPC连接方式访问)。
网络连接:当前支持“阿里云VPC”,“公网连接”两种方式。请根据上一步MySQL类型进行配置。
阿里云VPC:即EMR集群或RDS的VPC信息
公网连接:当选择公网连接时,在EMR控制台上添加规则,使EMR集群3306端口(默认)对DLF弹性公网IP 开放。如下图所示(以杭州弹性公网IP 121.41.166.235为例 )
各region DLF弹性公网IP:
region | 弹性公网IP |
杭州 | 121.41.166.235 |
上海 | 47.103.63.0 |
北京 | 47.94.234.203 |
深圳 | 39.108.114.206 |
新加坡 | 161.117.233.48 |
法兰克福 | 8.211.38.47 |
张家口 | 8.142.121.7 |
香港 | 8.218.148.213 |
迁移任务配置
任务名称:输入元数据迁移任务的名称。
任务描述(可选):输入您的一些任务备注信息。
冲突解决策略(建议选择更新旧的元数据):
更新旧的元数据:在原有DLF元数据基础上更新元数据。
重建元数据,即先删除旧的DLF元数据后再新建。
日志存放路径:迁移任务会将每个元数据对象、迁移状态、错误日志(如有)记录到该OSS路径下。
同步对象:包括Database、Function、Table、Partition 四种对象,一般为全选。
Location替换:适用于迁移过程中需要对table/database的location进行替换修改的情况。
运行迁移任务
在迁移任务列表中可以查看刚刚创建的迁移任务,点击右侧“运行”操作按钮执行任务,如下图。
查看运行记录和日志
单击右侧操作 “运行记录”,可以查看运行的详情信息
单击查看日志,可以查看运行中的日志信息,如下
确认元数据迁移到DLF
在元数据管理-元数据库/元数据表中,可以查询到期望同步的元数据库表信息。如下
EMR集群切换元数据
如果是上文第2种场景,需要将EMR集群切换使用DLF元数据。
引擎切换元数据
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
<!-- Hive3需要配置 -->
hive.notification.event.poll.interval=0s
<!--EMR-3.33版本之前和EMR-4.6.0之前,需要配置-->
dlf.catalog.sts.isNewMode=false
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版本之前和EMR-4.6.0之前,需要配置-->
dlf.catalog.sts.isNewMode=false
Spark
点击“部署客户端配置”,然后重启Spark服务。
Impala
点击“部署客户端配置”,然后重启Impala。
验证切换成功
以Hive引擎为例,其他引擎也可进行验证。
1. 进入集群,执行hive命令
2. create database dlf_test_db;
3. 登录dlf页面,查看是否存在该db
4. drop database dlf_test_db;
常见问题
如果同一个元数据迁移任务,多次运行是什么结果?
元数据迁移任务以RDS或MySQL元数据为基准,保证DLF元数据与源库中元数据的最终一致性。
参考资料
最佳实践详细步骤(包括环境搭建),参考:EMR元数据迁移数据湖DLF最佳实践