玩转DB里的数据 — 阿里云DMS任务编排之简介和实操
1.任务编排介绍
数据库是企业IT系统里的重要基础设施,里面存储了大量有价值的数据资产,如:交易数据、客户数据、订单数据,等等。其实,数据库在企业里一直扮演着一个数据生产者(Producer)的角色,日积月累这些数据会形成一个巨大的宝藏。但是,随着数据库中数据量的增长和数据形态的多样化,如何对数据进行存储、迁移和加工,并挖掘出其中的价值,是许多企业面临的难题。
为解决上述问题,阿里云DMS(Data Management Service)产品近期推出了一个新功能——任务编排。无论您的数据库部署在何处(阿里云/本地IDC/其他云厂商等),是何种类型(OLTP交易型数据库/OLAP分析型数据库),DMS任务编排都能够触达您的数据库,让您轻松地对数据库中的数据进行流转、加工和变换。DMS任务编排提供的主要功能和特性包括:
- 丰富的数据迁移能力:可实现数据库与数据库之间(如:OLTP在线库与OLAP离线库)、数据库与弹性存储之间(如:MySQL与OSS)的数据自由流动;
- 丰富的数据加工手段:单库SQL任务、跨库SQL任务、数据迁移任务、Spark任务、数据备份与恢复服务(建设中);不仅可以通过SQL语句对单个数据库或多个数据库里的数据进行加工,还可编写Spark任务进行复杂的数据处理和AI分析;
- 任务流和定时调度:通过可视化的方式将多个任务节点进行编排形成任务流,灵活按需设置多种不同粒度间隔的定时调度;
- 按模板一键创建任务流:为不同的场景(如:历史数据归档到OSS)内置了任务流模板,用户可一键生成模板任务流,通过简单的配置即可应用于生产;
- 牢靠的数据安全保障:依托DMS强大的数据安全能力,任务编排会对用户权限进行严格检查,仅限有权限的用户才能执行相应的任务。
了解了DMS任务编排的功能,你一定开始好奇用DMS任务编排能做什么?下图展示了DMS任务编排支持的四类主要场景:
场景1:数据归档
目前比较流行的有两类数据库:传统单机版数据库(如:MySQL)和云原生数据库(如:阿里云PolarDB和AnalyticDB for MySQL)。前者的存储空间是有限的,后者虽然可以对存储扩容,但也要收取较高的费用。那么,当数据库中的数据量持续增长时,该如何降低存储成本呢?许多用户希望能将数据库中的冷数据/历史数据转储到可靠又低价的存储上,如:阿里云对象存储(OSS)。现在通过DMS任务编排,可轻松实现数据库数据周期归档(如:每日/每周)到OSS的需求。同时,DMS还有好地对接了阿里云数据湖分析产品(DLA),用户可在DMS里方便地访问DLA,对归档到OSS上的数据进行即席查询和分析。
场景2:数据集成
企业的数据可能分散在不同的数据源中(如:MySQL、SQL Server),也可能分散在不同的地域(例如:北京、杭州、深圳)。导致数据分散的原因有很多,比如:业务的垂直划分、微服务、应用的本地部署等等。数据的分散不可避免,但同时许多企业又有数据集成的需求,需要将各地的数据汇聚到一起进行全局分析(如:汇总和AI分析),典型的场景就是OLTP交易库的数据同步至OLAP分析库做离线分析。通过DMS任务编排,可以轻松实现这一需求。首先,DMS打通了各种网络环境(如:阿里云VPC/经典网络,本地IDC网络),可连接至各个地域的数据源。其次,DMS支持异构数据源间的数据集成,如:RDS MySQL到AnalyticDB。此外,通过DMS任务编排,还能满足各种集成方式的需求,如:单次全量集成、周期性增量集成。
场景3:数据加工
做完数据集成之后,用户通常还要对汇聚的原始数据进行加工、清洗和分析,才能挖掘出其中的价值,例如:每日统计产品的用户数(UV),按周产生报表数据。DMS任务编排提供了任务流和定时调度能力,通过任务流可以将复杂加工任务进行拆解和编排,然后配置调度信息。DMS支持单次调度和周期调度(如:按日、周、月),此外还支持多类型的加工任务,用户可使用SQL进行数据加工,也可编写Spark程序进行复杂的数据处理和AI分析。通过丰富的调度配置和任务类型,DMS任务编排能满足各种简单/复杂场景的数据加工需求。
场景4:定时操作
在日常数据库的使用中,有许多DML/DDL/DCL操作需要定期执行,如:每周清理历史数据(DELETE)防止表过大、每日更新统计信息(ANALYZE TABLE)以获得更好的查询优化结果。有些数据库在内核层面已经提供了事件调度功能,如:MySQL Event,但是使用特殊的语法创建Event和维护Event都有一定的成本。DMS任务编排的调度功能提供了可视化的方式轻松创建定时任务,并且不依赖数据库引擎上的能力,因此更加简易灵活,适用范围更广。
2.任务编排实操 — DB数据周期归档
介绍完DMS任务编排的功能和使用场景,下面将以数据归档场景为例,介绍如何通过DMS任务编排和阿里云DLA服务将RDS MySQL数据周期地归档至OSS上。具体的实操步骤还可查阅DMS的使用文档。
2.1 背景和需求
用户的RDS MySQL业务库中某张表(如:交易记录、登录/操作日志)的数据持续增长,占用了大量的存储空间,甚至影响到了数据库性能。同时,这部分数据又是有价值的,比如:用于审计、报表和统计分析,不能随意删除。为解决这个问题,用户有三个核心的需求:
• 降低MySQL业务库的存储压力;
• 对历史业务数据做增量归档;
• 对归档数据做分区,可按分区过滤进行高效查询。
为满足这三个需求,我们选择了阿里云DLA服务,因为其同时打通了OSS和RDS MySQL,能够对上面的数据进行迁移和即席分析。但是,DLA并不具备周期调度和增量数据迁移的能力,DMS任务编排正好可以与DLA互补,形成完整的解决方案满足用户需求。
在下面的实操中,我们假设用户RDS MySQL中待归档的表为订单表orders,其表结构如下(created_date字段为订单创建日期):
create table orders(
order_id bigint,
product_name varchar(32),
price double,
total_amount double,
created_date date
);
2.2前置条件
1、已购买阿里云DLA服务,且DLA服务的区域(Region)和待归档的RDS MySQL区域一致,如:都是华东1(杭州)
2、已开通阿里云OSS服务,且服务的区域与DLA、RDS MySQL一致
3、已购买阿里云DMS服务
4、DLA实例已录入DMS中(请参考DMS实例录入)
各产品的购买要求和用途:
产品 | 购买产品的区域 | 用途 |
---|---|---|
DMS | 无限制 | 周期调度 |
DLA | 与RDS MySQL同区域 | RDS MySQL数据迁移至OSS;查询OSS上的归档数据 |
OSS | 与RDS MySQL同区域 | 存储RDS MySQL归档的数据 |
2.3 配置任务流
下面介绍如何在DMS中操作实现RDS MySQL数据周期归档,主要包含5个步骤:
步骤1:创建DLA归档库
若要将数据归档至DLA上,首先要在DLA中创建一个用于归档的schema,用于存放归档表。在DMS首页的顶部菜单中,找到SQLConsole单库查询,并打开查询窗口,然后输入如下SQL语句并执行:
CREATE DATABASE demo_schema
WITH DBPROPERTIES (
catalog = 'oss',
location = 'oss://xxxxxx/dla_demo/'
)
步骤2:创建任务流
在DMS首页的顶部菜单中,选择数据工厂 -> 任务编排,进入任务编排的首页。在首页点击“新建任务流”,或者点击左侧tab进入开发空间,也可以快速地找到新建任务流的入口。在新建任务流的窗口,我们将任务流名称设为:rds_data_to_oss。
步骤3:配置任务节点
在任务流rds_data_to_oss中,依次新建三个DLA-SQL类型的任务节点:
- 创建RDS同步Schema:在DLA中创建Scheme映射到RDS
- 创建OSS备份表:在DLA中建立OSS备份表,用于存储历史数据
- 备份数据:实现RDS MySQL前一天数据的备份。
节点创建完以后,可在节点间添加连线,对节点的执行顺序进行编排,产生完整任务流。
下面对每个节点的内容进行设置:
节点1:创建RDS同步Schema
要让DLA顺利访问RDS MySQL的数据,需要在DLA中为RDS MySQL创建一个Schema,取名: dla_mysql_rds。我们将以SQL的方式来创建Schema。首先,点击第一个任务节点,在右侧的内容设置Tab页中,输入如下SQL语句(其中部分参数需替换为RDS上的真实信息):
CREATE SCHEMA IF NOT EXISTS dla_mysql_rds WITH DBPROPERTIES (
CATALOG = 'mysql',
LOCATION = 'jdbc:mysql://xxxxxx.rds.aliyuncs.com:3306/dmstest',
USER = 'dmstest',
PASSWORD = 'xxxxxxxxx',
INSTANCE_ID = 'xxxxxx'
);
MSCK REPAIR DATABASE dla_mysql_rds;
此外,为了让DLA顺利访问RDS MySQL,还需要在RDS MySQL中添加DLA的白名单,即:将IP地址段100.104.0.0/16加入到RDS的白名单列表中。RDS白名单的配置方法可参考这个文档。
节点2:创建OSS备份表
我们需要在DLA中创建OSS备份表(oss_orders),首先将节点的目标数据库设为demo_schema,然后将节点内容设置为如下的SQL语句。oss_orders表的结构与RDS中的orders表完全一致,不同的是oss_orders为分区表,按照年/月/日(y/m/d)分区:
CREATE EXTERNAL TABLE oss_orders (
order_id bigint,
product_name varchar(32),
price double,
total_amount double,
created_date date)
PARTITIONED BY (y string, m string, d string)
STORED AS TEXTFILE
LOCATION 'oss://xxxxxx/dla_demo/';
其中,LOCATION参数需要填写一个OSS路径,即:归档数据储存的OSS地址。
节点3:数据备份
该数据备份实现了将RDS MySQL数据备份至OSS的功能。配置节点需要选择目标数据库为DLA的demo_schema,设置时间变量,并且编写备份SQL语句。
配置三个时间变量,它们分别是:
• year:当前日期前一天的年份(格式为yyyy)
• month:当前日期前一天的月份(格式为MM)
• day:当前日期前一天的日(格式为dd)
注:关于DMS任务编排中变量的配置和使用,请参阅该文档。bizdate为DMS任务编排里的系统参数,对应到任务运行时间的前一天,其他自定义变量也会随着任务执行时间的变化而自动更新。
设置数据备份SQL语句
/* 创建临时表 */
CREATE EXTERNAL TABLE oss_orders_tmp (
order_id bigint,
product_name varchar(32),
price double,
total_amount double,
created_date date)
STORED AS TEXTFILE
LOCATION 'oss://xxxxxx/dla_demo/y=${year}/m=${month}/d=${day}'
TBLPROPERTIES('auto.create.location'= 'true');
/* 备份日数据 */
insert into oss_orders_tmp
SELECT * FROM dla_mysql_rds.orders
where created_date = '${bizdate}';
/* 更新备份表分区信息以及删除临时表 */
msck repair table oss_orders;
drop table oss_orders_tmp;
上面的SQL脚本本质上包括3个步骤来实现数据备份:
- DLA OSS中创建临时表:临时表oss_orders_tmp映射位置为oss_orders所在OSS之下的年/月/日目录中,临时表的数据会自动成为oss_orders一个分区;
- 备份日数据:直接使用insert-select SQL语句从RDS MySQL中的orders表中读取数据(对应到DLA中的dla_mysql_rds.orders),写入OSS中的临时表;
- 更新分区信息以及删除临时表:更新oss_orders元数据信息,然后删除临时表oss_orders_tmp。
这里的巧妙之处在于,合理地利用了DMS任务编排里变量的功能,以及DLA OSS表的分区功能。临时表对应的OSS路径正好是全局备份表的一个分区路径。随着任务每日执行,变量的值会自动更新,由此产生新的OSS目录和分区,RDS MySQL的增量数据也自动地归档至新分区下。例如:RDS中created_date为2020-06-01的数据,将归档至oss://xxxxxx/dla_demo/y=2020/m=06/d=01的路径下。
2.4 配置任务流调度
最后,再介绍一下如何对任务流的调度进行配置。点击任务流空白处,调出右侧的调度配置页面。首先将该任务流的调度进行开启,然后将运行时间设为RDS MySQL的业务低峰期(如:凌晨5点),并将调度周期设为“日”。这样设置以后,该任务流将在每天的5点钟定期执行,无需人工干预。如果要查看任务流的执行历史,可点击左侧的运维中心,其中还会展示每一次执行的时间和日志。
3 快速任务流构建 — 任务流模板
为了节省用户手动创建和配置任务流的时间,DMS任务编排还提供了多种模板。这些模板通常包含了内置好的任务节点和SQL内容;它们从具体的场景出发,经过悉心的设计来解决实际问题,并且来源于DMS用户的真实案例,例如:第二节介绍的RDS数据周期归档OSS场景就来自于某知名跨国汽车厂商。
通过模板,用户可一键创建任务流,然后经过简单的配置,如:设置节点的目标数据库和SQL中的部分参数,即可生成可运行的任务流。目前,我们已经上线了多个任务流模板,欢迎访问DMS任务编排的首页进行查看,我们也将持续补充模板,让任务编排的使用更加便捷。
4 总结
DMS是阿里云用户非常喜爱的一款数据库工具产品,能帮助用户打通各种网络环境,对数据库进行管理和操作。除了常规的数据库增删改查和DDL操作,越来越多的用户需要对数据库中的数据进行归档、迁移、备份和加工。为了满足这些需求,DMS推出了任务编排功能,它打通了数据库与其他系统/存储之间的通道,让数据库不再成为数据孤岛。此外,DMS任务编排还提供了丰富的任务类型,以及任务流和定时调度能力,可以帮助用户轻松地对数据库中的数据进行清洗加工,把数据转变成商业智能。
玩转DB里的数据 — 阿里云DMS任务编排之简介和实操的更多相关文章
- 阿里云DMS发布数据库网关服务: 打通网络限制 开启数据库统一管理的万能钥匙
概述 阿里云数据管理DMS在云端可提供专业的数据库服务,除对标本地数据库软件的基础功能外,还包含性能诊断.数据追踪.跨实例SQL查询(含异构数据库类型之间)等专业性功能,同时提供审计安全和企业级数据库 ...
- 微信小程序里如何用阿里云上传视频,图片。。
纯手写,踩了半天多的坑干出来了... 网上也有对于阿里云如何在微信小程序里使用,但是很不全,包括阿里云文档的最佳实践里. 话不多说上代码了. upvideo(){ var aliOssParams = ...
- 如何在DJANGO里,向有外键(一对多和多对多)的DB里插入数据?
需要插入的数据表结构如下: class UserInfo(models.Model): user_id =models.AutoField(primary_key=True) user_name=mo ...
- 玩转阿里云server——安装WebserverTomcat7
1. 以root用户身份登录阿里云server 2. 使用apt-get install安装Tomcat7 sudo apt-get install tomcat7 3.安装后.Tomcat在启动时报 ...
- AWS、阿里云、Azure、Google Cloud、华为云、腾讯云 各种云服务器价格收费对比(上)
他来了,他来了~ 他带着六家公有云厂商的资源价格走来了~ 不久前,我们上线了一款小工具——[多云成本计算器]1.0版,公众号菜单栏可以直接体验.详细介绍可以戳这里<3秒即得最低价,速石上线「多云 ...
- 阿里云部署Redis服务器远程连接问题
昨天在阿里云免费领了一个月的云服务器,就着最近学的SpringBoot,准备做一个SpringBoot与Redis的整合. 因为以前用的Redis都是安装在本地的,使用过程中没遇到什么大问题,可是一旦 ...
- 【阿里云ACP】-02(弹性储存、对象储存OSS)
弹性网卡 弹性网卡: 是一种可以附加到专有网络VPC类型ECS实例上的虚拟网卡.通过弹性网卡,您可以在任何阿里云地域下实现高可用集群搭建.低成本故障转移和精细化的网络管理. 弹性网卡属性: 属性 规格 ...
- 【阿里云ACP】-01(阿里云综述、弹性计算)
课程能力 课程范围 ECS 磁盘 实例 磁盘 快照 镜像 网络 安全组 AS 伸缩组 伸缩配置 伸缩规则 伸缩活动 伸缩触发任务 伸缩模式 冷却时间 SLB 定义 实现原理 支持的协议 绘画保持 健康 ...
- 阿里云服务器 ECS Ubuntu系统安装配置
1. 登陆服务器 系统开通成功后手机会收到阿里云发来的短信,包含公网IP及root登录密码. WEB管理后台方式 可通过阿里云管理后台选择“连接管理终端…”进行登录 提示输入VNC密码 登录成功后显示 ...
- 阿里云重磅发布DMS数据库实验室 免费体验数据库引擎
2月27日,阿里云数据管理DMS发布年度巨献——数据库实验室,用户可在该实验室环境下免费体验数据库引擎.以及DMS各项产品功能.数据库实验室是DMS所提供的体验空间,免费赠送数据库引擎资源. 用户只需 ...
随机推荐
- 修改Tomcat服务器Server Locations
首先双击我们集成好的Tomcat服务器 修改Server Locations选项 Specify the server path (i.e. catalina.base) and deploy p ...
- Spring之事务传播属性
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量. 在使用Spring时,大部分会用到他的声明式事务,简单的在配置文件中进行一些规则 ...
- 3DCAT云流送技术如何搅动各大行业
在不久前结束的数字会展上,3DCAT展位的实时云流送技术技惊四座,带来不一样的视觉体验,到访的客户都无法分辨这些数字内容是在本地还是云端运行的,每一个粒子都真实可见,有现场的参观者瞪大了双眼,直呼不可 ...
- linux下永久添加静态路由-不同
linux下永久添加静态路由-不同 添加路由的命令: 1,route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0#添加一 ...
- 记录--Vue3+TS(uniapp)手撸一个聊天页面
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue3+TS(uniapp)手撸一个聊天页面 前言 最近在自己的小程序中做了一个智能客服,API使用的是云厂商的API,然后聊天页面.. ...
- 记录--教你用three.js写一个炫酷的3D登陆页面
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 该篇文章用到的主要技术:vue3.three.js 我们先看看成品效果: 高清大图预览(会有些慢): 座机小图预览: 废话不多说, ...
- golang gc的内部优化
今天讲一个常见的gc compiler(也就是官方版本的go编译器和runtime)在垃圾回收的扫描标记阶段做的优化. 我对这个优化的描述印象最深的是在bigcache的注释里,大致内容是如果map的 ...
- C#人脸对比服务(基于虹软人脸识别SDKV4.1封装)
软件截图 项目截图 部分代码 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- Linux下Bochs,NASM安装和使用
安装环境 以Ubuntu为例,先更新一下: sudo apt-get update sudo apt-get upgrade 然后安装Bochs环境: sudo apt-get install bui ...
- 对OpenHarmony中LiteOS的内核分析——超时原理和应用
前言 在软件世界里面,超时是一个非常重要的概念.比如 ● 当前线程暂时休眠1秒钟,休眠结束后继续执行 ● 每5秒钟采集一下CPU利用率 ● 数据发送失败,2秒钟以后再试一试 ● 等待某种数据,但最多等 ...