美文网首页后端砖头架构etl
DataX Web使用体验入门

DataX Web使用体验入门

作者: 文景大大 | 来源:发表于2023-01-28 13:49 被阅读0次

    一、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)

    相关文章

      网友评论

        本文标题:DataX Web使用体验入门

        本文链接:https://www.haomeiwen.com/subject/megyhdtx.html