写点什么

快速实现数据导入及简单 DCS 的实现

  • 2019-10-30
  • 本文字数:4864 字

    阅读完需:约 16 分钟

快速实现数据导入及简单DCS的实现

对于多数用户而言,在利用云计算的大数据服务时首先要面临的一个问题就是如何将已有存量数据快捷的导入到大数据仓库中。本文将演示如何基于京东云数据计算服务平台,简单、快速地将数据导入数据计算服务。


我们通常说的大数据平台主要包括三部分:数据相关的产品和技术、数据资产、数据管理。京东云数据计算服务(Data Computing Service,简称:DCS)是一个全托管、低使用成本的云上数据仓库服务。通过数据工厂,可轻松实现云上各数据源(包括对象存储、云数据库、数据仓库等)间、本地数据源与云数据源间的多种不同数据源的数据同步,实现多源数据分析与管理。


在数据工厂服务中可以创建同步任务来搬运数据,并按照指定的调度策略(每天、每周、每月)运行。该模块提供任务监控和告警功能,用户可以通过任务执行的明细日志和告警历史,轻松查明问题所在;同时,提供全面托管的工作流服务,支持图形化设计数据分析。以工作流任务的方式实现对数据的处理和相互依赖,帮助用户快速构建数据处理分析作业并周期性地执行。


下面会以 MySQL 数据库为例说明如何利用京东云数据工厂进行数据采集和 DTS 数据库之间的数据同步。数据工厂支持常见 RDS 数据库,如 MySQL、SQLServer、Oracle、DB2 和 NoSQL 数据库,也支持从 OSS、FTP 站点及 Elastic Search 等。


下图是数据工厂支持的数据源种类:



下面会演示以 MySQL 数据库为例,如何利用数据工厂进行数据采集,以及如何利用数据工厂作为 DTS 在两个数据源之间进行数据迁移。


为了方便测试,首先我们要创建数据库表单并灌入测试数据。为了测试方便,提前创建了一台 CentOS 7.4 云主机作为模拟客户端对数据库进行访问。

一、核心概念

数据集

在数据工厂服务中的数据集,是指由同步任务时需指定的数据源端或数据目标端的不同数据存储实例。因此,在创建同步任务之前,你必须先连接数据集。同一个数据集,可以是多个同步任务的数据源端或者数据目标端。

数据集的连通性

在用户创建数据集连接时,为检验数据集成服务能否连接成功,需要用户更具根据不同的数据集类型,填入相应的值用于连通性校验。数据集连接成功,是数据同步任务成功的前提。

同步任务

同步任务,是用户使用数据集成服务的最小单元。每一个同步任务需要用户配置数据源端、数据目标端以及相应的同步策略(如脏数据的处理等)。

工作流

工作流以图形化设计任务的方式实现对数据的处理和相互依赖。

开始实战

一、准备测试数据源

首先创建模拟数据环境。本例采用京东云的 RDS MySQL 8.0 数据库服务作为数据源,创建时可指定数据库名字为 Testdb。数据库创建完成后要开启外网访问,数据工厂可以通过公网 IP 或域名对数据库进行访问,详细域名可以在数据库的详情页中找到。



创建 MySQL 数据库可以通过图形界面按提示填写必要信息开通,这里不赘述。需要提醒的是数据库开通后默认不允许外网访问,要点击开启外网访问,并记住默认端口 3306。



对 MySQL 访问可以通过图形界面访问或通过客户端访问。当然也可以通过其他支持 MySQL 的图形化客户端进行访问。



本例使用 CentOS 系统作为客户端访问,如未安装客户端可以使用 Yum 命令安装 MySQL。顺利安装可以看到如下提示。


 1[root@CentOS ~]# yum install mysql 2Loaded plugins: fastestmirror, langpacks 3Loading mirror speeds from cached hostfile 4base                                | 3.6 kB     00:00      5epel                                | 4.7 kB     00:00      6extras                              | 3.4 kB     00:00      7updates                             | 3.4 kB     00:00      8(1/2): epel/x86_64/updateinfo         | 986 kB   00:00      9(2/2): epel/x86_64/primary_db         | 6.7 MB   00:00     10Resolving Dependencies11--> Running transaction check12---> Package mariadb.x86_64 1:5.5.60-1.el7_5 will be installed13--> Processing Dependency: mariadb-libs(x86-64) = 1:5.5.60-1.el7_5 for package: 1:mariadb-5.5.60-1.el7_5.x86_6414--> Running transaction check15---> Package mariadb-libs.x86_64 1:5.5.56-2.el7 will be updated16---> Package mariadb-libs.x86_64 1:5.5.60-1.el7_5 will be an update17--> Finished Dependency Resolution1819Dependencies Resolved2021===========================================================22 Package        Arch     Version              Repository23                                                      Size24===========================================================25Installing:26 mariadb        x86_64   1:5.5.60-1.el7_5     base   8.9 M27Updating for dependencies:28 mariadb-libs   x86_64   1:5.5.60-1.el7_5     base   758 k2930Transaction Summary31===========================================================32Install  1 Package33Upgrade             ( 1 Dependent package)3435Total download size: 9.6 M36Is this ok [y/d/N]: y37Downloading packages:38Delta RPMs disabled because /usr/bin/applydeltarpm not installed.39(1/2): mariadb-libs-5.5.60-1.el7_5.x8 | 758 kB   00:00     40(2/2): mariadb-5.5.60-1.el7_5.x86_64. | 8.9 MB   00:00     41-----------------------------------------------------------42Total                          11 MB/s | 9.6 MB  00:00     43Running transaction check44Running transaction test45Transaction test succeeded46Running transaction47  Updating   : 1:mariadb-libs-5.5.60-1.el7_5.x86_64    1/3 48  Installing : 1:mariadb-5.5.60-1.el7_5.x86_64         2/3 49  Cleanup    : 1:mariadb-libs-5.5.56-2.el7.x86_64      3/3 50  Verifying  : 1:mariadb-libs-5.5.60-1.el7_5.x86_64    1/3 51  Verifying  : 1:mariadb-5.5.60-1.el7_5.x86_64         2/3 52  Verifying  : 1:mariadb-libs-5.5.56-2.el7.x86_64      3/3 5354Installed:55  mariadb.x86_64 1:5.5.60-1.el7_5                          5657Dependency Updated:58  mariadb-libs.x86_64 1:5.5.60-1.el7_5                     5960Complete!
复制代码


安装后执行 MySQL 命令,测试一下是否可以链接数据库,客户端访问命令格式是 MySQL -h 主机地址 -u 用户名 -p 用户密码主机地址使用 MySQL 数据库的外部域名。从连接数据库到创建表单的详细执行过程如下:


1、验证是否可以正常连接数据库


1[root@CentOS ~]# mysql -h mysql-cn-north-1-aed0e558da5e4877.public.jcloud.com -P3306 -umysqlxxx –pPasswordxxx
复制代码


如可以正常连接,可以新开一个窗口创建 SQL 脚本用于数据库的创建和测试数据插入操作,也可以提前制作好并上传到客户端。


创建数据表格,创建一个测试数据库和测试表便于测试。选择合适目录创建 SQL 脚本文件,可以用 vi ctable.sql 创建,也可以用其他文本编辑工具制作,脚本内容如下:


 1[root@CentOS ~]# cat ctable.sql  2USE testdb; 3DROP TABLE IF EXISTS `sqltest`; 4CREATE TABLE `sqltest` ( 5    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 6    `user_id` varchar(20) NOT NULL DEFAULT '', 7    `vote_num` int(10) unsigned NOT NULL DEFAULT '0', 8    `group_id` int(10) unsigned NOT NULL DEFAULT '0', 9    `status` tinyint(2) unsigned NOT NULL DEFAULT '1',10    `create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',11    PRIMARY KEY (`id`),12    KEY `index_user_id` (`user_id`) USING HASH13) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
复制代码


2、创建临时数据产生脚本文件,vi adddb.sql


 1[root@CentOS ~]# cat adddb.sql 2DELIMITER // -- 修改MySQL delimiter:'//' 3DROP FUNCTION IF EXISTS `rand_string` // 4SET NAMES utf8 // 5CREATE FUNCTION `rand_string` (n INT) RETURNS VARCHAR(255) CHARSET 'utf8' 6BEGIN  7    DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 8    DECLARE return_str varchar(255) DEFAULT ''; 9    DECLARE i INT DEFAULT 0;10    WHILE i < n DO11        SET return_str = concat(return_str, substring(char_str, FLOOR(1 + RAND()*62), 1));12        SET i = i+1;13    END WHILE;14    RETURN return_str;15END //

复制代码


– 创建插入数据的存储过程


 1DROP PROCEDURE IF EXISTS `adddb` // 2CREATE PROCEDURE `adddb`(IN n INT) 3BEGIN 4    DECLARE i INT DEFAULT 1; 5    DECLARE vote_num INT DEFAULT 0; 6    DECLARE group_id INT DEFAULT 0; 7    DECLARE status TINYINT DEFAULT 1; 8    WHILE i < n DO 9        SET vote_num = FLOOR(1 + RAND() * 10000);10        SET group_id = FLOOR(0 + RAND()*3);11        SET status = FLOOR(1 + RAND()*2);12        INSERT INTO `sqltest` VALUES (NULL, rand_string(20), vote_num, group_id, status, NOW());13        SET i = i + 1;14    END WHILE;15END //DELIMITER ; 
复制代码


– 改回默认的 MySQL delimiter:’;’


3、登陆数据库执行 ctable.sql 和 adddb.sql 脚本



执行命令:


1MySQL [testdb]> source /root/ctable.sql;2MySQL [testdb]> source /root/adddb.sql;

复制代码


增加 100 条数据


1MySQL [testdb]> call adddb(100);
复制代码


通过调整 adddb(要增加数字)参数的数字,也可以增加 1000 条如 adddb(1000)。



至此我们有了数据源的测试环境,接下来可以开始利用数据工厂进行数据同步。

二、利用数据工厂进行源数据采集

选择大数据与分析的数据工厂菜单。在连接管理中添加连接,如下:



建立连接时建议点击连接测试按钮先进行测试数据库连接,不能连接时请检查域名、端口、用户名密码是否正确,数据库是否允许外网访问。


建立好数据库连接后,就可以进行数据同步工作了。数据同步工作可以在数据同步中单独建立任务设置,也可以在工作流中通过数据集成选项进行设置。数据集成设置后会自动生成数据同步任务。




调度策略可以选择手工执行、周期调度和单次运行三种模式,也可以直接选择单次运行。




执行完毕后在数据计算服务中就同步产生了数据。


上述操作可以用工作流的形式实现,衔接更为复杂的 Spark 计算脚本。



成功执行后可以在运维中心查看执行情况,在实例列表中的画图试布中看到执行节点变为绿色。



通过以上建立数据同步任务和工作流两种形式都能实现数据源的数据获取,数据获取后就可以直接使用大数据服务进行数据处理了。在大数据与分析菜单下选择数据计算服务管理。默认用自己用户名/PIN(本例用户名是 jdc-14)为实例名,建立了 Default HIVE INSTANCE。



数据的库表管理下可以看到刚刚新建的库 MySQLdb 和表 SQLTest,点击进入 SQLTest 表名可以看到更详细的表信息如图。




可以基于获取的大数据信息在数据计算服务中进行任务开发,任务开发可以使用 SQL 或开发脚本对数据进行计算。


三、DCS 大数据导出

可以利用这个能力把数据工厂当作简单 DTS 工具,把数据传给目的数据库。本例在京东云建立一个 MySQL 目的数据库,把 SQLTest 同步给目的数据库,实现两个数据库的数据同步。


准备好或新建立目的 MySQL 数据库 destmysqldb,将数据计算服务的 MySQLdb 同步给目的数据库 destmysqldb。


在数据工厂菜单下,选择连接管理,新建到 destmysqldb 的连接。



新建同步任务,将数据计算服务的数据同步给 destmysqldb 数据库,任务名称 synctodest。选择数据源端要选择大数据的数据计算服务,数据库名为 mysqldb 数据表名为 sqltest,表的数据可以预览,避免出错。


在传输数据前要在数据库中事先建立空表结构,执行文章开头的 ctable.sql 建立表 SQLTest,数据插入时要选择目的表名。



执行完毕后可以在 destmysqldb 中确认结果,通过 select count(*) from sqltest 可以确认数据已经成功导入。



可以确认利用数据工厂作为简单 DTS 工具进行源数据库数据同步到目的数据库,实战成功!


2019-10-30 18:031281

评论

发布
暂无评论
发现更多内容

LeetCode题解:456. 132 模式,n平方暴力,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构实战营模块 3 课后作业

hello

架构师实战营

架构实战营模块四作业

老猎人

架构实战营

根据译文片段预测翻译作者

毛显新

tensorflow

机器学习- 吴恩达Andrew Ng Coursera学习总结合集 John 易筋 ARTS 打卡 Week 57

John(易筋)

ARTS 打卡计划

架构实战营 - 模块三作业: 架构文档

Julian Chu

架构实战营

takin(全链路压测)快速安装-mac图文版

国隆

大数据 性能压测 生产环境全链路压测 takin 探针

带你了解弯曲文本检测算法的两种思路:区域重组和像素分割

华为云开发者联盟

文字 目标检测算法 文本检测 区域重组 像素分割

架构实战营 模块三作业

孫影

架构实战营 #架构实战营

如何实现支持百亿级文件的分布式文件存储

焱融科技

云计算 云原生 高性能 分布式存储 海量存储

云图说|云上应用监控神器——应用性能监控APM2.0

华为云开发者联盟

APM 华为云 云图说 应用性能管理 应用监控

TensorFlow 2 quickstart for experts

毛显新

tensorflow

从源码角度详解Java的Callable接口

华为云开发者联盟

Java ide jdk Callable Callable接口

汽车燃料效率预测

毛显新

tensorflow

Go语言:RESTful API 服务,急速入门

微客鸟窝

Go 语言

第三届WICC圆满结束 融云打造技术与生态平台推动产业发展

融云 RongCloud

Java实战:教你如何进行数据库分库分表

华为云开发者联盟

Java 数据库 分布式 分库 分表

怎么在Guitar Pro乐谱中加入哇音

懒得勤快

stack overflow 问题分类

毛显新

tensorflow

聊聊百度搜索背后的故事

程序员鱼皮

Java 搜索引擎 数据结构 算法 后端

架构实战营 模块三 作业

脉醉

#架构实战营

来也科技:RPA+AI的赋能者和布道者

海比研究院

4问教你搞定java中的ThreadLocal

华为云开发者联盟

Java 线程 多线程 ThreadLocal 变量

我花了 24 天使用 C++ 从零实现了一个解释器

lmymirror

interpreter compiler

手写基数排序算法

实力程序员

程序员 C语言 排序算法

拨云开雾!阿里面试官力荐Java开发必看的操作系统底层原理PDF

Java架构追梦

Java 阿里巴巴 架构 面试 操作系统

架构训练营-学生管理系统详细架构文档

sophiahuxh

Python OpenCV 轮廓检测与轮廓特征,加图像金字塔知识补充一点点

梦想橡皮擦

Python 7月日更

就想搞明白,component-scan 是怎么把Bean都注册到Spring容器的!

小傅哥

Java spring 小傅哥 bean注册

没怎么写过 Java 的遗憾

escray

学习 极客时间 朱赟的技术管理课 7月日更

架构实战营模块三作业

袁小芬

快速实现数据导入及简单DCS的实现_架构_赵琦_InfoQ精选文章