湖仓一体架构EMR元数据迁移DLF

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 通过EMR+DLF数据湖方案,可以为企业提供数据湖内的统一的元数据管理,统一的权限管理,支持多源数据入湖以及一站式数据探索的能力。本方案支持已有EMR集群元数据库使用RDS或内置MySQL数据库迁移DLF,通过统一的元数据管理,多种数据源入湖,搭建高效的数据湖解决方案。

通过EMR+DLF数据湖方案,可以为企业提供数据湖内的统一的元数据管理,统一的权限管理,支持多源数据入湖以及一站式数据探索的能力。本方案支持已有EMR集群元数据库使用RDS或内置MySQL数据库迁移DLF,通过统一的元数据管理,多种数据源入湖,搭建高效的数据湖解决方案。

概述

适用场景

  • EMR元数据迁移至DLF。

  • 元数据迁移验证。

  • 数据一致性校验。

技术架构

本实践方案基于如下图所示的技术架构和主要流程编写操作步骤:

方案优势

  • 统一元数据管理,快速构建数据库架构。

  • 没有数据丢失风险。

  • 较短的服务停机时间。

基础环境搭建

使用CADT创建资源

  1. 登录CADT控制台,选择官方模板新建。

  1. 由于元数据库使用了独立的RDS,需要先创建RDS再部署EMR,故先不部署EMR,先取消EMR资源部署。

  1. 安全组增进开放3306端口(这里测试方便全部开放,建议仅针对VPC开放)。

  1. 填写密码,保存应用。

  1. 填写名称,保存应用。

  1. 开始部署应用,等待部署完成。

说明

以下价格为测试环境价格,实际价格以官网提供的为准。

  1. 等待部署完成,创建数据库账号密码。

  1. 创建Hive元数据库。

  1. 在RDS控制台找到内网连接地址。

  1. 部署完成的架构图把浏览模式变为编辑模式,开启EMR资源部署,设置EMR的登录密码,RDS数据库用户名和密码。

重要
  • 这里填写的数据库账号密码需和前面在RDS中创建的账号密码一致。

  • 数据库连接地址调整为RDS的内网地址(仅修改rm-xxxxxx为RDS实例id,其他内容保留)。

  1. 再次部署资源。

  1. 登录EMR master节点,使用独立RDS还需先初始化元数据库。

su hadoop
schematool -initSchema -dbType mysql

本方案使用的命令行文件可以从以下文件获取。点击下载文件

重要

避免文档中字符问题,建议从txt文件中拷贝命令行。

一、上传测试数据

说明

本方案以一个apache日志文件作为原始数据,构建HDFS存储和Hive数据。日志下载地址

  1. 使用scp命令拷贝测试数据到EMR集群。

scp 本地apache_logs.log文件path root@emr master公网ip:path
  1. 登录EMR master节点,上传hdfs文件。

hdfs dfs -mkdir /user/hadoop/input
hdfs dfs -put /apache_logs.log /user/hadoop/input 
  1. 使用以下命令查看hdfs文件,可见已成功上传。

hadoop fs -ls /user/hadoop/input 
  1. 使用hive client创建数据库。

hive
create database log_data_warehouse;
use log_data_warehouse; 
  1. 创建hive表。

CREATE TABLE apache_logs(
ipaddr STRING,
identity STRING,
username STRING,
accesstime STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING) 
PARTITIONED BY (year string,month string,day string)  
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\".*?\") (-|[0-9]*) (-|[0-9]*) (\".*?\") (\".*?\")",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;
  1. 给Hive表增加一个分区。

alter table apache_logs add partition (year='2015', month='05', day='17'); 
  1. 把数据载入这个分区。

load data inpath '/user/hadoop/input/*'into table log_data_warehouse.apache_logs partition (year='2015',month='05',day='17');
  1. 通过hive sql查看数据可以成功查询。

select * from log_data_warehouse.apache_logs where year='2015' and month='05' and day='17';
  1. 可见log文件也被移动到当前分区下面了。

hadoop fs -ls -R /user/hive/warehouse/log_data_warehouse.db/apache_logs/year=2015/month=05/day=17

二、元数据迁移

1. 元数据迁移流程说明

请仔细阅读迁移流程,并严格按流程执行:

  1. 建立DLF元数据迁移任务,并进行测试,确保迁移流程没问题。

  2. 停止EMR服务,保证元数据不会变更。

  3. 执行DLF元数据迁移任务。

  4. 原hive元数据成功迁移DLF后,进行元数据校验。

  5. 如果校验有问题,进行回滚(修改回原来hive metastore)

  6. 元数据切换到DLF,重启EMR服务。

  7. 校验相关任务执行情况是否正常。

如有问题:

  1. 启动服务后,执行的任务不影响生产的,如第五步回滚。

  2. 启动服务后,执行的任务可以重跑恢复的,如第五步回滚,并重跑任务。

  3. 启动服务后,执行的任务无法重跑恢复的,联系阿里云支持同学。

2. 元数据迁移DLF

说明

EMR-3.30.0和EMR-4.5.0及后续版本开始支持DLF,如果版本低于此版本需升级后迁移。

  1. 进入数据湖构建(DLF)控制台,选择元数据迁移,创建迁移任务。

  1. 选择MySQL数据库,类型为RDS(如果其他类型的数据库可以使用JDBC连接),配置相关的实例信息,进入下一步。

  1. 输入名称,选择OSS的存储路径(如果没有OSS bucket请先到OSS控制台创建)。

  1. 确认信息无误后提交。

  1. 开始运行迁移任务。

  1. 运行成功后,查看运行日志,可见迁移元数据起始时间(如果有错误参考日志进行排查)。

  1. 迁移成功后,可以看到元数据库和表都自动创建成,确认元数据迁移成功。

3. 元数据校验

说明

成功将元数据迁移到DLF后,需要校验Hive MetaStore、DLF两边的元数据是否一致。目前可以通过DLF提供的元数据校验工具进行比对(后期会集成到DLF产品功能中)。

  1. 在EMR master节点获取元数据校验工具包,点击下载

su root
cd /
wget https://testbp-106.oss-cn-shanghai.aliyuncs.com/236/Democode/dlf-migrator-tools-1.0.0-RC1.jar
  1. 创建YML配置文件,比如名称为migrator_config_validate.yml,内容如下。

!!com.aliyun.dlf.migrator.app.config.MigratorConfig
clientInfo:
  accessKeyId: $accessKeyId
  accessKeySecret: $accessKeySecret
  endPoint: dlf-vpc.$regionId.aliyuncs.com
  regionId: $regionId
  catalogId: $aliyunUid
mysql:
  connectionUri: jdbc:mysql://$host:$port/hivemeta
  driver: com.mysql.cj.jdbc.Driver
  userName: $userName
  password: $password
runOptions:
  batchSize: 200
  debug: false
  deleteBeforeCreate: false
  lowerCaseTableNames: true
  schema: hivemeta
  records: oss://$bucket/validate/
  objectTypes:
    - database
    - function
    - table
    - partition
  operations:
- validate
  locationMappings:
    - source: 原路径,如hdfs://user/hive/warehouse/
     target: 目标路径,如oss://dlf/warehouse/

配置项含义:

  • DLF SDK Client相关信息。

  • accessKeyId:用户阿里云主账号的Access Key Id。

  • asscessKeySecret:用户阿里云主账号的Access Key Secret。

  • endPoint:DLF的EndPoint,一般为 dlf-vpc.[region-id].aliyuncs.com。

  • catalogId:用户阿里云主账号的UID。

重要

Access Key需要有读写DLF元数据的权限。

  • MySQL元数据库相关信息。

  • connectionUrl:元数据库JDBC连接信息。

  • driver:mysql driver,一般不需要改。

  • userName:数据库用户名。

  • password:数据库密码。

  • RunOptions:运行时参数。

  • batchSize:必选配置。批量调用DLF SDK的批次大小,最大不能超过500,太大可能会超时,太小效率慢,一般100左右可以。

  • debug:必选配置。Spark是否会向console输出debug信息。

  • deleteBeforeCreate:必选配置。如果在DLF创建对象的时候,如果对象已经存在,是否要删除后再重新创建。false的情况不会删除,冲突时会update;true的情况会删掉再创建;两者最大的区别是像创建时间之类的信息会有所不同。

  • lownerCaseTableNames:必选配置。客户的元数据库里面的表是大写还是小写,目前需要客户自行判断。

  • objectTypes: 必选配置。校验对象的类型列表,可以包含database、function、table、partition。

  • operations:必选配置。校验工具执行的操作,指定validate进行元数据的比对校验,将把结果写到records路径上。

  • records:必选配置。工具的运行结果日志,处理的记录,以及错误信息。

  • locationMappings: 可选配置。对象location映射支持,应用于要修改替换database、table、partition等对象location信息的场景。有两个配置参数source和target,参数source表示要替换的路径(建议/结尾),target表示目标路径。

参考配置如下:

  1. 上传为HDFS文件。

hdfs dfs -put /migrator_config_validate.yml /user/hadoop/
  1. SSH到EMR集群,通过spark-submit命令提交运行校验任务(需要指定实际的校验工具包和配置文件的路径)。命令参考:

spark-submit \
 --master yarn \
 --deploy-mode client \
 --driver-memory 2G \
--executor-memory 2G \
--executor-cores 4 \
 --num-executors 3 \
--conf spark.sql.shuffle.partitions=200 \
 --conf spark.kryoserializer.buffer.max=128m \
 --conf spark.sql.autoBroadcastJoinThreshold=-1 \
--conf spark.sql.adaptive.enabled=false \
 --conf spark.sql.adaptive.join.enabled=false \
--conf spark.executor.heartbeatInterval=600s \
--conf spark.network.timeout=3600s \
 --class com.aliyun.dlf.migrator.app.MigratorApplication \
/dlf-migrator-tools-1.0.0-RC1.jar  \
/user/hadoop/migrator_config_validate.yml
  1. 创建验证数据库。命令参考:

create table validate_database_result (leftResult string, rightResult string, status boolean, errorMessage string, fixResult string) stored as parquet location 'oss://testbp-106/validate/Databases';


create table validate_table_result (leftResult string, rightResult string, status boolean, errorMessage string, fixResult string) stored as parquet location 'oss://testbp-106/validate/Tables';


create table validate_function_result (leftResult string, rightResult string, status boolean, errorMessage string, fixResult string) stored as parquet location 'oss://testbp-106/validate/Functions';


create table validate_partition_result (leftResult string, rightResult string, status boolean, errorMessage string, fixResult string) stored as parquet location 'oss://testbp-106/validate/Partitions';
  1. 通过以下命令验证是否存在不一致,为0表示全部一致。命令参考:

select count(*) from validate_database_result where status = false;
select count(*) from validate_table_result where status = false;
select count(*) from validate_function_result where status = false;
select count(*) from validate_partition_result where status = false;
  1. 如果有数据不一致,通过以下命令查看详情,errorMessage字段表示不一致的具体情况。

select * from validate_database_result where status = false limit 10;
select * from validate_table_result where status = false limit 10;
select * from validate_function_result where status = false limit 10;
select * from validate_partition_result where status = false limit 10;
说明

这个case下由于我在DLF里面创建了其他数据库,所以和EMR集群的数据库不一致,实际是正常的。

4. 元数据服务切换到DLF

警告

为了避免在迁移过程中元数据发生变化,建议在业务低峰期时先停止HiveServer2和Hive MetaStore,再进行切换(在正式开始迁移之前,建议先拿测试库跑所有流程,没问题再进行生产环境操作)。

说明

在正式切换前先停止业务,避免元数据发生变化,同时再同步最新的元数据到DLF(重复步骤2.2)

  1. 元数据校验没问题后,再进行元数据切换,进入EMR控制台,修改添加以下配置。

hive.imetastoreclient.factory.class=com.aliyun.datalake.metastore.hive2.DlfMetaStoreClientFactory
dlf.catalog.endpoint=dlf-vpc.cn-shanghai.aliyuncs.com
dlf.catalog.uid=156******8939
dlf.catalog.region=cn-shanghai
dlf.catalog.akMode=EMR_AUTO
dlf.catalog.sts.isNewMode=true
dlf.catalog.proxyMode=DLF_ONLY
说明

dlf.catalog.proxyMode配置支持以下几种模式

METASTORE_ONLY, // read/write Metastore Only
METASTORE_DLF_FAILURE, // read/write Metastore first and write dlf allow failure
METASTORE_DLF_SUCCESS, // read/write metastore first and write dlf must success
DLF_METASTORE_SUCCESS, // read/write dlf first and write metastore must success
DLF_METASTORE_FAILURE, // read/write dlf first and write metastore allow failure
DLF_ONLY, // read/write dlf only
  1. 重新启动HMS服务。

5. 验证元数据服务

  1. 在EMR中使用hive命令创建一个新的元数据库。

  1. 在DLF控制台查看新的元数据库已经创建成功,可见EMR集群的元数据库已经使用了DLF。

  1. 验证数据查询成功(运行稳定后,可以切掉原来的RDS,仍可正常访问)。

use log_data_warehouse;
select * from log_data_warehouse.apache_logs where year='2015' and month='05' and day='17';

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
4月前
|
存储 SQL 监控
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
存储 SQL 分布式计算
19章构建企业级大数据平台:从架构设计到数据治理的完整链路
开源社区: 贡献者路径:从提交Issue到成为Committer 会议演讲:通过DataWorks Summit提升影响力 标准制定: 白皮书撰写:通过DAMA数据治理框架认证 专利布局:通过架构设计专利构建技术壁垒
|
8月前
|
SQL 缓存 分布式计算
vivo 湖仓架构的性能提升之旅
聚焦 vivo 大数据多维分析面临的挑战、StarRocks 落地方案及应用收益。 在 **即席分析** 场景,StarRocks 使用占比达 70%,查询速度提升 3 倍,P50 耗时从 63.77 秒缩短至 22.30 秒,查询成功率接近 98%。 在 **敏捷 BI** 领域,StarRocks 已完成 25% 切换,月均查询成功数超 25 万,P90 查询时长缩短至 5 秒,相比 Presto 提升 75%。 在 **研发工具平台** 方面,StarRocks 支持准实时数据查询,数据可见性缩短至 3 分钟,查询加速使 P95 延迟降至 400 毫秒,开发效率提升 30%。
vivo 湖仓架构的性能提升之旅
|
2月前
|
存储 分布式计算 资源调度
【赵渝强老师】阿里云大数据MaxCompute的体系架构
阿里云MaxCompute是快速、全托管的EB级数据仓库解决方案,适用于离线计算场景。它由计算与存储层、逻辑层、接入层和客户端四部分组成,支持多种计算任务的统一调度与管理。
177 1
|
3月前
|
SQL 存储 监控
流处理 or 批处理?大数据架构还需要流批一体吗?
简介:流处理与批处理曾是实时监控与深度分析的两大支柱,但二者在数据、代码与资源上的割裂,导致维护成本高、效率低。随着业务对数据实时性与深度分析的双重需求提升,传统架构难以为继,流批一体应运而生。它旨在通过逻辑、存储与资源的统一,实现一套系统、一套代码同时支持实时与离线处理,提升效率与一致性,成为未来大数据架构的发展方向。
|
4月前
|
消息中间件 分布式计算 大数据
“一上来就搞大数据架构?等等,你真想清楚了吗?”
“一上来就搞大数据架构?等等,你真想清楚了吗?”
76 1
|
7月前
|
存储 运维 Serverless
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
605 69
|
5月前
|
架构师 Oracle 大数据
从大数据时代变迁到数据架构师的精通之路
无论从事何种职业,自学能力都显得尤为重要。为了不断提升自己,我们可以尝试建立一套个性化的知识目录或索引,通过它来发现自身的不足,并有针对性地进行学习。对于数据架构师而言,他们需要掌握的知识领域广泛而深入,不仅包括硬件、网络、安全等基础技术,还要了解应用层面,并熟练掌握至少一门编程语言。同时,深入理解数据库技术、具备大数据实操经验以及精通数据仓库建模和ELT技术也是必不可少的。只有这样,数据架构师才能具备足够的深度和广度,应对复杂的业务和技术挑战。 构建个人知识体系是数据架构师在学习和工作中的一项重要任务。通过系统化、不断深化的知识积累,数据架构师能够有效应对快速变化的商业环境和技术革新,进一
|
7月前
|
SQL 分布式数据库 Apache
网易游戏 x Apache Doris:湖仓一体架构演进之路
网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
541 3
网易游戏 x Apache Doris:湖仓一体架构演进之路

热门文章

最新文章

下一篇
开通oss服务