DataX和xxl-job的应用实践

DataX和xxl-job的应用实践

一、需求背景

​ 由于公司业务原因,需要下线大数据平台,而在线上继续运营的服务中,存在不少BI报表数据来源于大数据平台,为了在下线大数据平台之后,仍然能够保证BI报表数据的正常输出,决定采用DataX同步业务数据表,xxl-job实现中间表和最终数据表的逻辑计算和输出:

  • 需求一:将业务库中的业务数据表定时(例如每晚0-1时执行)同步到数据库中
  • 需求二:通过SQL代替原来的大数据平台hive逻辑,定时(例如每晚2-3时执行)通过业务表生成中间表及数据表
二、开发方案
  • 通过DataX实现表数据同步:

    • DataX简介

      ​ DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。

    • 开源地址:https://github.com/alibaba/DataX

  • 通过xxl-job实现定时SQL执行

    • xxl-job简介

      ​ XXL-JOB is a distributed task scheduling framework. It’s core design goal is to develop quickly and learn simple, lightweight, and easy to expand. Now, it’s already open source, and many companies use it in production environments, real “out-of-the-box”.

      ​ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

    • 开源地址:https://github.com/xuxueli/xxl-job

三、脚本配置
  • DataX脚本配置(以Mysql为例)

    {
        "job": {
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "username": "user",
                            "password": "password",
                            "column": [
                                "id",
                                "user_id",
                                "company_id",
                                "region_id",
                                "store_id",
                                "role_id",
                                "status",
                                "create_time",
                                "update_time",
                                "dpt_id",
                                "dpt_type"
                            ],
                            "connection": [
                                {
                                "jdbcUrl": ["jdbc:mysql://******(业务库地址)/***(业务库)?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8"],
                                "table": ["arm_org_user"]
                                }
                            ],
                            "where": "DATEDIFF(NOW(), update_time) <= 2;"
                        }
                    },
                    "writer": {
                        "name": "mysqlwriter",
                        "parameter": {
                            "username": "root",
                            "password": "12345678",
                            "writeMode": "update",
                            "column": [
                                "id",
                                "user_id",
                                "company_id",
                                "region_id",
                                "store_id",
                                "role_id",
                                "status",
                                "create_time",
                                "update_time",
                                "dpt_id",
                                "dpt_type"
                            ],
                            "session": [],
                            "preSql": [],
                            "connection": [
                                {
                                    "jdbcUrl": "jdbc:mysql://localhost:3306(目标库地址)/***(目标库)?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8",
                                    "table": ["tmp_arm_org_user"]
                                }
                            ]
                        }
                    }
                }
            ],
            "setting": {
                "speed": {
                    "channel": "3"
                }
            }
        }
    }
    
  • xxl-job配置参照:https://www.xuxueli.com/xxl-job/

  • SQL脚本略,根据实际业务需求

四、其他
  • DataX配置中的column尽量不填*,因为可能存在业务库和目标数据库中相同表但字段顺序不一致的情况
  • WriteMode使用update,相当于以下语句:ON DUPLICATE KEY UPDATE(存在则更新,不存在则插入)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataX是一个开源的数据同步工具,主要用于在不同数据源之间高效地传输大量数据。DataX-web是DataX的Web版控制台,它提供了一个用户友好的界面来管理和监控DataX任务的执行。 要连接DataXDataX-web,你需要按照以下步骤操作: 1. **安装DataX**:首先,确保你已经在本地或服务器上安装了DataX。你可以从DataX的GitHub仓库下载并按照官方文档进行安装。 2. **配置DataX任务**:使用命令行工具创建DataX的任务配置文件(如:job.yaml),指定源和目标数据库、表名、字段等信息。在配置中,可能需要设置一些连接参数,如用户名、密码、URL等。 3. **运行DataX任务**:使用DataX的命令行工具(如`java -jar datax-*.jar job job.yaml`)启动任务,DataX会根据配置文件执行数据同步操作。 4. **启动DataX-web**:在DataX-web的安装目录下运行web服务器,例如`cd datax-web && ./bin/start.sh`(假设你在Linux环境下)。这将启动一个本地HTTP服务器,提供DataX-web的界面。 5. **访问DataX-web**:在浏览器中输入`http://localhost:8080`(默认端口),你将看到DataX-web的登录页面。如果你之前没有设置过用户,通常可以使用默认的管理员账户(用户名:admin,密码:admin)登录。 6. **添加、编辑和查看任务**:登录后,可以在DataX-web的界面中添加新的任务配置,编辑现有的任务,以及查看任务执行状态和日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~鱼缸里的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值