DataX 二进制与源码部署及 DataX-Web 可视化平台搭建
DataX 的两种核心部署方式(二进制与源码编译),涵盖环境准备、Python 版本适配及动态传参配置。详细讲解了并发度设置策略(Channel、Bps、Tps)及其优先级。此外,还演示了 DataX-Web 可视化管理平台的二进制安装流程,包括数据库初始化、服务启动及日志查看,旨在构建企业级数据同步运维体系。

DataX 的两种核心部署方式(二进制与源码编译),涵盖环境准备、Python 版本适配及动态传参配置。详细讲解了并发度设置策略(Channel、Bps、Tps)及其优先级。此外,还演示了 DataX-Web 可视化管理平台的二进制安装流程,包括数据库初始化、服务启动及日志查看,旨在构建企业级数据同步运维体系。


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
环境准备:
注意: DataX 这个项目本身是用 Python2.7 进行开发的,因此需要使用 Python2.7 的版本进行执行。
常见问题:
_ 开头的文件都删除即可。安装步骤参考官方 GitHub 详细介绍:DataX 源码方式安装
{DataX_source_code_home}/target/datax/datax/,结构如下:DataX 这个项目本身是用 Python2.7 进行开发的,因此建议使用 Python2.7 的版本进行执行。如果使用 python3 执行的话,可能会出现问题,因为 3 和 2 的语法差异还是比较大的。
如果需要使用 python3 去执行数据同步的计划,需要修改 bin 目录下的三个 py 文件,将这三个文件中的如下部分修改即可:
Python 2 升级到 Python 3 时必须修改的两个核心语法变化——print 从语句变为函数,异常捕获语法从逗号改为 as 关键字:
print xxx 替换为 print(xxx) ### 打印语法变更
Exception, e 替换为 Exception as e ### 异常捕获语法变更
同样的,通过 DataX 提供的自测脚本,通过 python3 命令测试一下能不能正常启动一个同步任务。 虽然 python3 的语法变更,但是也向下兼容,同样可以使用 python2 执行。
DataX 同步数据的时候需要使用到自己设置的配置文件,其中可以定义同步的方案,通常为 json 的格式。在执行同步方案的时候,json 文件中的 channel、password、username 等等都是静态的参数数据,有些场景下需要有一些动态的数据。
例如:将 MySQL 的数据同步到 HDFS,多次同步的时候只是表的名字和字段不同。比如 MySQL 中有一个订单表 orders 需要同步到 HDFS 中,那么第一次同步肯定是全量同步,将数据全量同步到今天,比如今天的日期是 2025-06-30,之后的每天每时每秒订单表都在产生新的数据,那么之后就没有必要进行全量同步,只需要进行增量同步,如果在 json 文件写了 where 条件,比如 where date='2025-07-01',那么是进行了增量同步,但之后的每一天都需要修改这个 where 条件,非常的不智能。因此就需要使用到动态传参,让增量同步的 where 条件变的智能,自动进行调整。
将 MySQL 的数据增量的同步到 HDFS 或者 Hive 中的时候,需要指定每一次同步的时间。
这些时候,如果我们每一次都去写一个新的 json 文件将会非常麻烦,此时我们就可以使用 动态传参。 所谓的动态传参,就是在 json 的同步方案中,使用类似变量的方式来定义一些可以改变的参数。在执行同步方案的时候,可以指定这些参数具体的值。
在使用到同步方案的时候,可以使用 -D 来指定具体的参数的值。例如在上述的 json 中,我们设置了一个参数 TIMES,在使用的时候,可以指定 TIMES 的值,来动态的设置 sliceRecordCount 的值。
在 DataX 的处理流程中,Job 会被划分成为若干个 Task 并发执行,被不同的 TaskGroup 管理。在每一个 Task 的内部,都由 reader -> channel -> writer 的结构组成,其中 channel 的数量决定了并发度。那么 channel 的数量是怎么指定的?
下面对三种计算 channel 数量的方式进行一一介绍:
在同步方案的 json 文件中,我们可以设置 job.setting.speed.channel 来设置 channel 的数量。这是最直接的方式。在这种配置下,channel 的 Bps 为默认的 1MBps,即每秒传输 1MB 的数据。
在 json 文件中,指定 channel 数量的配置如下:
说明: DataX 中默认一个 TaskGroup(任务组) 的并发数量为 5,也就是 channel,相关参数的定义在 conf 目录下的 core.json 文件中。可以看到如下分配了 10 个并发,每个并发都由 reader -> channel -> writer 的结构组成,10 个 task 分成了 2 个 TaskGroup(taskGroupId=[0]、taskGroupId=[1]),然后不同的 TaskGroup 下通过 task 执行(taskGroup[0] taskId[5]、taskGroup[1] taskId[0]…)。
对上述的日志进行分析:一个 Job 被拆分成了两个任务组。因为 DataX 中默认一个 TaskGroup(任务组) 的并发数量为 5,也就是 channel,因此为了满足 10 个通道的需求,自动创建 2 个任务组。
用建筑工地比喻这个场景,整个工程(Job):要搬 10 堆砖(10 个任务),有 10 个工人(10 个通道)。但工头决定:工地 A(任务组 0):派 5 个工人,负责搬砖堆 1-5;工地 B(任务组 1):派 5 个工人,负责搬砖堆 6-10。 两个工地同时开工,互不干扰!
Bps(Byte per second)是一种非常常见的数据传输速率的表示,在 DataX 中,可以通过参数设置来限制总 Job 的 Bps 以及单个 channel 的 Bps,来达到限速和 channel 数量计算的效果。
job.setting.speed.byte 进行设置(单位字节)。core.transport.channel.speed.byte 进行设置(单位字节)。在 json 文件中,指定 Job Bps 的配置如下:
在 json 文件中,指定 channel Bps 的配置如下,需要注意 core 和 job 是平级参数。
说明: DataX 中默认一个 TaskGroup(任务组) 的并发数量为 5,也就是 channel,相关参数的定义在 conf 目录下的 core.json 文件中。根据计算公式(channel=500/50)看到如下分配了 10 个并发,每个并发都由 reader -> channel -> writer 的结构组成,10 个 task 分成了 2 个 TaskGroup(taskGroupId=[0]、taskGroupId=[1]),然后不同的 TaskGroup 下通过 task 执行(taskGroup[0] taskId[2]、taskGroup[1] taskId[6]…)。
tps(transcation per second)是一种很常见的数据传输速率的表示,在 DataX 中,可以通过参数设置来限制总 Job 的 tps 以及单个 channel 的 tps,来达到限速和 channel 数量计算的效果。
job.setting.speed.record 进行设置(单位每秒传输 N 条数据)。core.transport.channel.speed.record 进行设置(单位每秒传输 N 条数据)。在 json 文件中,指定 Job tps 的配置如下:
在 json 文件中,指定 channel tps 的配置如下,需要注意 core 和 job 是平级参数。
说明: DataX 中默认一个 TaskGroup(任务组) 的并发数量为 5,也就是 channel,相关参数的定义在 conf 目录下的 core.json 文件中。根据计算公式(channel=500/100)看到如下分配了 5 个并发,每个并发都由 reader -> channel -> writer 的结构组成,5 个 task 分成了 1 个 TaskGroup(taskGroupId=[0]),然后不同的 TaskGroup 下通过 task 执行(taskGroup[0] taskId[0]、taskGroup[0] taskId[1]…)。
如果同时配置了 Bps 和 tps 限制,以小的为准。只有在 Bps 和 tps 都没有配置的时候,才会以 channel 数量配置为准。
在 json 文件中,同时配置了直接指定 channel 数量、通过 Bps 计算 channel 数量、通过 tps 计算 channel 数量这三种方式。
说明: DataX 中默认一个 TaskGroup(任务组) 的并发数量为 5,也就是 channel,相关参数的定义在 conf 目录下的 core.json 文件中。根据优先级并发将采用'通过 tps 计算 channel 数量',原因参考上面的优先级。根据计算公式(channel=500/100)看到如下分配了 5 个并发,每个并发都由 reader -> channel -> writer 的结构组成,5 个 task 分成了 1 个 TaskGroup(taskGroupId=[0]),然后不同的 TaskGroup 下通过 task 执行(taskGroup[0] taskId[2]、taskGroup[0] taskId[1]…)。
环境准备:
进入 GitHub 官网的 DataX-Web 主页:https://github.com/WeiYe-Jing/datax-web。下拉到'Quick Start'部分,点击'一键部署',然后就进入到了 DataX-Web 的安装部署文档界面。下载官方提供的版本 tar 版本包。
在安装部署前先部署 MySQL 数据库。datax-web 需要将一些元数据信息保存到数据库。MySQL 的安装部署可以自行安装。
登录到 Linux 服务器,解压 Data-Web 包,和 datax 部署在一个目录下。
/data/DataX 是 datax 软件的安装目录,将 Data-Web 部署和 datax 在一个目录下。
执行一键安装脚本。 进入解压后的目录,找到 bin 目录下面的 install.sh 文件,进行交互式安装,则直接执行。 如果你的服务上安装有 mysql 命令,在执行安装脚本的过程中则会出现以下提醒。按照提示输入数据库地址,端口号,用户名,密码以及数据库名称;并且 datax-web 需要将一些元数据信息保存到数据库中,按照提示执行 datax_web.sql 数据库初始化脚本。
注意: 如上是交互式安装,在交互模式下,对各个模块的 package 压缩包的解压以及 configure 配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试;如果不想使用交互模式,跳过确认过程,则执行 --force 命令安装:./bin/install.sh --force
进入到 MySQL 数据库中,查看创建的数据库。
如果服务上并没有安装 mysql 命令,则可以取用目录下 ./bin/db/datax-web.sql 脚本去手动执行,完成后修改相关配置文件。
按照提示输入数据库地址,端口号,用户名,密码以及数据库名称。
配置邮件服务 (可跳过)。 在项目目录(/data/DataX/datax-web-2.1.2/)下/modules/datax-admin/bin/env.properties 配置邮件服务。data-web 提供了失败告警功能,如果某一个任务执行失败,可以通过配置的邮件服务给指定邮箱发送一封'执行失败'的邮件。
指定 PYTHON_PATH 的路径。
一键启动和一键关闭 DataX-Web 服务。
一键启动所有服务:
中途可能发生部分模块启动失败或者卡住,可以退出重复执行,如果需要改变某一模块服务端口号,则 vi ./modules/{module_name}/bin/env.properties 找到 SERVER_PORT 配置项,改变它的值即可。当然也可以单一地启动某一模块服务:./bin/start.sh -m {module_name}
一键取消所有服务:
当然也可以单一地停止某一模块服务:./bin/stop.sh -m {module_name}
查看服务。
在 Linux 环境下使用 JPS 命令,查看是否出现 DataXAdminApplication 和 DataXExecutorApplication 进程,如果存在这表示项目运行成功。
如果项目启动失败,请检查启动日志:modules/datax-admin/bin/console.out 或者 modules/datax-executor/bin/console.out。
注意: 脚本使用的都是 bash 指令集,如若使用 sh 调用脚本,可能会有未知的错误。
运行。
部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip 为 datax-admin 部署所在服务器 ip,port 为 datax-admin 指定的运行端口,默认 9527)。
输入用户名 admin 密码 123456 就可以直接访问系统。
运行日志。 部署完成之后,在 modules/对应的项目/data/applogs 下 (用户也可以自己指定日志,修改 application.yml 中的 logpath 地址即可),用户可以根据此日志跟踪项目实际启动情况。 如果执行器启动比 admin 快,执行器会连接失败,日志报'拒绝连接'的错误,一般是先启动 admin,再启动 executor,30 秒之后会重连,如果成功请忽略这个异常。
安装步骤参考官方 GitHub 详细介绍:DataX-Web 编译打包方式安装