DataX Web使用体验入门

一、DataX Web是什么

DataX web是在DataX的基础上开发的分布式的数据同步工具,方便DataX的用户在网页上通过点击和配置就能完成DataX任务的配置和执行等动作。同时,DataX web是基于xxl-job进行二次开发的DataX任务管理后台,天生支持任务定时调度、日志查看等功能,能帮助用户更好地管理DataX任务。

因此,在学习使用DataX web之前,至少要了解过DataX和xxl-job,才能继续下去。

二、为什么要使用DataX Web

DataX才是异构数据源进行数据同步的核心关键,DataX web只是为使用DataX提供了便利,因此DataX web的使用并不是必须的,但是作为一个追求高效率和简化工作的工程师,好的工具必然不会放过。那么DataX web有哪些好处呢?

  1. 提供简单易用的操作界面,降低用户使用DataX的学习成本;
  2. 缩短任务配置时间,避免配置过程中出错;
  3. 可通过页面选择数据源即可创建数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源;
  4. RDBMS数据源可批量创建数据同步任务;
  5. 支持实时查看数据同步进度及日志并提供终止同步功能;
  6. 集成并二次开发xxl-job可根据时间、自增主键增量同步数据;
  7. 任务"执行器"支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖;
  8. 支持对执行器CPU、内存、负载的监控等等;

DataX web是如何工作的呢?

DataX web架构图

可以看到,整体的架构和xxl-job基本类似,调度中心进行任务的触发和调度,同时监控各个执行器的执行,汇总任务的执行过程和结果。

三、使用DataX Web进行数据迁移

3.1 DataX Web的部署

官网文档描述的很详细,参考:github.com

部署完成后,需要在执行器管理菜单中新建一个可用的执行器,选择自动注册即可。

3.2 MySQL数据导入Hive示例

假设已经安装好了MySQL和Hive,下面只是演示一个同步的过程。

首先我们在MySQL中创建一张表并插入一些演示数据:

CREATE TABLE `zx_user` (
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `user_name` varchar(30) DEFAULT NULL COMMENT '用户姓名',
  `age` int(11) DEFAULT NULL COMMENT '用户年龄',
  `user_email` varchar(50) DEFAULT NULL COMMENT '用户邮箱',
  `create_by` varchar(100) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `update_by` varchar(100) DEFAULT NULL,
  `update_date` datetime DEFAULT NULL,
  `deleted` int(11) DEFAULT '0' COMMENT '0-未删除;1-已删除',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `zx_user_un` (`user_id`),
  UNIQUE KEY `zx_user_un2` (`user_email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO zx_user (user_id,user_name,age,user_email,create_by,create_date,update_by,update_date,deleted) VALUES
     (1,'Jone',18,'test1@baomidou.com',NULL,NULL,NULL,NULL,0),
     (2,'Jack',20,'test2@baomidou.com',NULL,NULL,NULL,NULL,0),
     (5,'Anna',27,'test5@baomidou.com',NULL,NULL,NULL,NULL,0),
     (7,'Anna',27,'test7@baomidou.com','System','2021-06-17 14:36:03','System','2021-06-17 14:54:51',0),
     (11,'slide',21,'slide@baomidou.com',NULL,NULL,NULL,NULL,0),
     (21,'mify',20,'mify@baomidou.com',NULL,NULL,NULL,NULL,0),
     (51,'kitty',27,'kitty@baomidou.com',NULL,NULL,NULL,NULL,0);

然后我们在Hive上也创建一张目标表:

CREATE TABLE `zx_user` (
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `user_name` string COMMENT '用户姓名',
  `age` int COMMENT '用户年龄',
  `user_email` string COMMENT '用户邮箱'
) comment "用户信息表" 
row format delimited fields terminated by ",";

以上表示,我们只需要同步MySQL中相同表的前4个字段,并且字段之间分隔符使用逗号。

然后我们打开DataX web的管理界面,在数据源管理里面,分别新建如上MySQL和Hive两个数据源:

新建MySQL和Hive数据源

然后,我们开始新建一个任务模板,当然这一步不是必须的,可以直接新建任务,任务模板的优点是后续可以从模板直接创建任务,省区了重复填写任务配置信息的繁琐工作。

新建DataX任务模板

然后我们就开始进行任务构建,目标是让DataX web为我们自动生成需要的Json。

  • 步骤一:设置Reader;

    任务构建_步骤一_设置Reader
  • 步骤二:设置Writer;

    任务构建_步骤二_设置Writer
  • 步骤三:字段映射;

    任务构建_步骤三_字段映射
  • 步骤四:生成Json并从模板创建任务

    任务构建_步骤四_生成Json并从模板创建任务

此时我们回到“任务管理”界面,就可以看到刚才新建的任务了。

任务管理

默认情况下,任务是停止状态,我们将其打开,因为设置了每分钟执行一次,所以等一会,就可以看到“执行状态”字段变成了“已完成”,此时就可以查看执行记录和执行日志了。

任务执行记录查看

可以看到,前两次运行都是以失败告终,最后修改了Json内容才得以成功,详情见第4.1节避坑记录。我们在hive中执行select操作,就可以看到导入的数据了。

3.3 Hive数据导入MySQL示例

假设已经安装好了MySQL和Hive,下面只是演示一个同步的过程。

在3.2案例的基础上,我们清理MySQL中的用户数据:

truncate table zx_user;

然后我们在Datax web上重新构建一个任务,步骤基本和上面相似,只是步骤一种的Reader改为使用Hive数据源,步骤二种的Writer改为使用MySQL数据源,而且hdfs的路径需要指定到具体的文件。

然后启动执行一次后,发现报错如下:

01-29 13:25:22.878 [0-0-0-reader] ERROR StdoutPluginCollector - 脏数据:
经DataX智能分析,该任务最可能的错误原因是:
2023-01-29 11:29:32 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-14], Description:[DataX传输脏数据超过用户预期,该错误通常是由于源端数据存在较多业务脏数据导致,请仔细检查DataX汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 .].  - 脏数据条数检查不通过,限制是[0]条,但实际上捕获了[7]条.
2023-01-29 11:29:32 [AnalysisStatistics.analysisStatisticsLog-53]   at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30)
2023-01-29 11:29:32 [AnalysisStatistics.analysisStatisticsLog-53]   at com.alibaba.datax.core.util.ErrorRecordChecker.checkRecordLimit(ErrorRecordChecker.java:58)

经过排查,是因为DataX不支持所有的Hive数据类型,可以参考官方文档

Hive和DataX数据类型比较

我们需要将自动生成的json种的bigint、int类型全部转换为Long才可以成功执行任务。执行成功后,再次查询MySQL中的目标表就能发现数据被成功导入了。

四、避坑记录

4.1 MySQL数据导入Hive示例失败

使用自动生成的json运行DataX任务具体的报错日志如下:

2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
......
2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] 2023-01-29 09:55:45.437 [job-0] INFO  StandAloneJobContainerCommunicator - Total 0 records, 0 bytes | Speed 0B/s, 0 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.000s |  All Task WaitReaderTime 0.000s | Percentage 0.00%
2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] 2023-01-29 09:55:45.541 [job-0] ERROR Engine - 
2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] 
2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] 经DataX智能分析,该任务最可能的错误原因是:
2023-01-29 09:55:45 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数
...
2023-01-29 09:55:45 [JobThread.run-165] <br>----------- datax-web job execute end(finish) -----------<br>----------- ReturnT:ReturnT [code=500, msg=command exit value(1) is failed, content=null]
2023-01-29 09:55:45 [TriggerCallbackThread.callbackLog-186] <br>----------- datax-web job callback finish.

按照提示信息,猜测错误的原因是json中指定了channel为3,并且限定总限速为1048576byte,但是DataX则是要求必须指定单个channel的限速bps。限速这块内容对于DataX入门小白来说可以先不用看,因此解决方案是把总限速给删除即可。然后保存json,重新执行任务就可以成功了。

五、总结

关于DataX和DataX web还有很多功能没有实验,本文仅作为入门体验记录一些过程,便于后续和别人上手。

体验下来,DataX web确实能简化DataX的任务管理和json的书写,特别是还提供了定时任务的功能,但需要注意的是,自动生成的json并不是一定可靠的,比如3.3节中没有支持Hive数据类型的自动转换,需要使用者自己注意json的正确性。

六、参考文档:

WeiYe-Jing/datax-web: DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。 (github.com)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容