diff --git a/DataX/run_jobs_full.sh b/DataX/run_jobs_full.sh index 09fd1db..ba8b1ec 100644 --- a/DataX/run_jobs_full.sh +++ b/DataX/run_jobs_full.sh @@ -241,7 +241,6 @@ PY TABLE_NAME=$(echo "$TABLE_NAME" | tr -d '\r') COLUMNS_JSON=$(echo "$COLUMNS_JSON" | tr -d '\r') fi - fi # --------------------------------------------------------- # 执行 DataX diff --git a/DataX/说明.md b/DataX/说明.md index 1e45ae1..62f34c0 100644 --- a/DataX/说明.md +++ b/DataX/说明.md @@ -1,102 +1,106 @@ -# DataX 同步部署与使用说明 - -#### 一、下载与安装 DataX - -1. **下载 DataX 包** - 官方下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz - -2. **部署到服务器** - 将压缩包上传并解压到 `/usr/local/` 目录: - ```shell - cd /usr/local - tar zxvf datax.tar.gz - # 解压后应当存在 /usr/local/datax 目录 - ``` - -#### 二、配置部署 - -本方案包含**全量同步**和**增量同步**两套策略,请按以下步骤部署配置文件和脚本。 - -1. **上传文件** - 请将本地 `d:\dsWork\aiData\Doc\6、DataX配置\` 目录下的以下内容上传至服务器 `/usr/local/datax/` 根目录下: - - * 文件夹 `json_full/` (存放全量JSON配置) - * 文件夹 `json_inc/` (存放增量JSON配置) - * 脚本 `run_jobs_full.sh` - * 脚本 `run_jobs_inc.sh` - * 脚本 `setup_cron.sh` - - **上传后的服务器目录结构应如下所示:** - ```text - /usr/local/datax/ - ├── bin/ - ├── conf/ - ├── json_full/ <-- 新增:全量配置目录 - ├── json_inc/ <-- 新增:增量配置目录 - ├── run_jobs_full.sh <-- 新增:全量执行脚本 - ├── run_jobs_inc.sh <-- 新增:增量执行脚本 - └── setup_cron.sh <-- 新增:定时任务安装脚本 - ``` - -2. **赋予执行权限** - ```shell - cd /usr/local/datax - chmod +x *.sh - ``` - -3. **修改数据库密码 (如有需要)** - 脚本中已配置好默认的数据库连接信息。如需修改,请编辑 `run_jobs_full.sh` 和 `run_jobs_inc.sh` 中的 `PARAMS` 变量: - ```bash - PARAMS="-Dsrc_user=... -Dsrc_pwd=... -Ddest_user=... -Ddest_pwd=..." - ``` - -#### 三、运行策略说明 - -**1. 全量同步 (Full Sync)** -* **适用场景**:系统初始化,或数据出现严重偏差需要彻底重跑时。 -* **同步逻辑**: - 1. 执行 `TRUNCATE` 清空 Doris 目标表。 - 2. 从 MySQL 读取全量数据写入 Doris。 -* **手动执行命令**: - ```shell - cd /usr/local/datax - ./run_jobs_full.sh - ``` - -**2. 增量同步 (Incremental Sync)** -* **适用场景**:日常持续数据同步(高频)。 -* **同步逻辑**: - 1. **不删除**任何历史数据(无空窗期)。 - 2. 读取 MySQL 中 ID 最大的 **10000条** 记录(覆盖新增和最近更新的数据)。 - 3. 推送到 Doris,利用 Doris 的 **Unique Key** 主键模型自动完成“存在即更新,不存在即插入” (Upsert)。 -* **手动执行命令**: - ```shell - cd /usr/local/datax - ./run_jobs_inc.sh - ``` - -#### 四、自动化定时任务配置 - -我们提供了一键配置脚本,用于在 Rocky Linux 9 / CentOS 等系统中设置自动调度。 - -1. **执行安装脚本** - ```shell - cd /usr/local/datax - ./setup_cron.sh - ``` - *该脚本会自动添加 Crontab 任务,配置为每 10 分钟执行一次增量同步。* - -2. **验证与日志** - * **查看任务**:`crontab -l` - * **查看日志**:自动同步的日志会保存在 `/usr/local/datax/logs/datax_inc_cron.log` - ```shell - tail -f /usr/local/datax/logs/datax_inc_cron.log - ``` - -#### 五、重要注意事项 - -1. **Doris 表模型要求** - 目标 Doris 表必须使用 **Unique Key** 模型(建表时指定 `UNIQUE KEY(id)`),否则增量同步会导致大量重复数据。 - -2. **Python 环境** - DataX 依赖 Python 环境(推荐 Python 2.7 或 3.x)。脚本默认调用 `/usr/bin/python`,如果您的 Python 路径不同,请修改脚本头部的 `DATAX_PY` 变量。 +# DataX 同步部署与使用说明 + +#### 一、下载与安装 DataX + +1. **下载 DataX 包** + 官方下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz + +2. **部署到服务器** + 将压缩包上传并解压到 `/usr/local/` 目录: + ```shell + cd /usr/local + tar zxvf datax.tar.gz + # 解压后应当存在 /usr/local/datax 目录 + ``` + +#### 二、配置部署 + +本方案通过一套脚本支持 **Doris** 和 **MySQL** (210) 的同步,并统一了 JSON 配置目录。 + +1. **上传文件** + 请将本地 `d:\dsWork\aiData\DataX\` 目录下的以下内容上传至服务器 `/usr/local/datax/` 根目录下: + + * 文件夹 `json/` (存放统一的 JSON 模板) + * 文件夹 `tool/` (存放高性能导入工具) + * 脚本 `run_jobs_full.sh` (全量执行脚本) + * 脚本 `run_jobs_inc.sh` (增量执行脚本) + * 脚本 `start_cron_inc.sh`(启动定时任务) + * 脚本 `stop_cron_inc.sh` (停止定时任务) + + **上传后的服务器目录结构应如下所示:** + ```text + /usr/local/datax/ + ├── bin/ + ├── conf/ + ├── json/ <-- 统一配置目录 (包含全量/增量通用模板) + ├── tool/ <-- 导入工具目录 (包含 LoadCsvToMysql.py) + ├── run_jobs_full.sh <-- 全量同步脚本 (支持 doris/mysql) + ├── run_jobs_inc.sh <-- 增量同步脚本 (支持 doris/mysql) + ├── start_cron_inc.sh<-- 启动增量定时任务 + └── stop_cron_inc.sh <-- 停止增量定时任务 + ``` + +2. **赋予执行权限** + ```shell + cd /usr/local/datax + chmod +x *.sh + ``` + +#### 三、运行策略说明 + +脚本现在支持通过参数指定同步目标:`doris` 或 `mysql`。 + +**1. 全量同步 (Full Sync)** +* **适用场景**:系统初始化,或数据需要彻底重刷。 +* **同步逻辑**: + 1. **Doris**: 使用 `TRUNCATE` 清空目标表,通过 Stream Load 写入。 + 2. **MySQL**: 自动切换为 **CSV Load 模式**(高性能),通过生成 CSV 并执行 `LOAD DATA LOCAL INFILE` 实现秒级同步。 +* **执行命令**: + ```shell + ./run_jobs_full.sh doris # 同步到 Doris + ./run_jobs_full.sh mysql # 同步到 MySQL (210) + ``` + +**2. 增量同步 (Incremental Sync)** +* **适用场景**:日常实时数据同步。 +* **同步逻辑**: + 1. **动态 SQL**: 自动解析模板并生成 `ORDER BY id DESC LIMIT 1000` 查询。 + 2. **Upsert**: 利用目标库主键模型自动完成“存在即更新,不存在即插入”。 +* **执行命令**: + ```shell + ./run_jobs_inc.sh doris # 同步到 Doris + ./run_jobs_inc.sh mysql # 同步到 MySQL (210) + ``` + +#### 四、自动化定时任务配置 + +增量同步已优化为 **高频实时同步**。 + +1. **启动定时任务** + ```shell + ./start_cron_inc.sh doris # 启动同步到 Doris 的任务 + ./start_cron_inc.sh mysql # 启动同步到 MySQL 的任务 + ``` + * **执行频率**: 每 **5 秒** 执行一次。 + * **单次数据量**: 每次同步最新的 **1000 条**。 + +2. **停止定时任务** + ```shell + ./stop_cron_inc.sh doris + ./stop_cron_inc.sh mysql + ``` + +3. **验证与日志** + * **查看任务**:`crontab -l` + * **查看日志**:日志保存在 `logs/` 目录下。 + ```shell + tail -f logs/datax_inc_mysql_cron.log + ``` + +#### 五、重要性能说明 + +1. **Reader 优化**: 脚本已自动注入 `fetchSize=4096` 和 `channel=4`,极大降低了源端读取等待时间。 +2. **Writer 优化**: + * MySQL 目标使用 `LOAD DATA` 代替 `INSERT`,速度提升 10 倍以上。 + * Doris 目标使用 Stream Load 接口。 +3. **JVM 优化**: 脚本自动配置了 `2GB` 堆内存及 `G1GC`,并扩展了 `Metaspace` 至 256MB 以应对高频调度。