datax笔记

DataX 简介

DataX 是阿里巴巴开源的一款数据同步工具,支持多种数据源和目标数据的同步,包括 MySQL、Oracle、HDFS 等。使用 DataX 可以快速、可靠地完成数据的迁移和同步。

DataX 工作原理

DataX 的工作原理如下图所示:

img

DataX 包含三个核心组件:

  1. Job:描述数据同步的具体步骤和规则。
  2. Task:Job 的执行单元,负责具体的数据同步操作。
  3. Scheduler:负责调度 Task 的执行,包括并发执行和任务监控等。

DataX Java 示例

下面是使用 Java 实现 DataX 数据同步的示例代码:

public static void main(String[] args) {
    // 配置 DataX 的系统参数
    System.setProperty("datax.home", "/path/to/datax/home");

    // 加载 Job 配置文件
    String jobFilePath = "/path/to/job.json";
    Configuration configuration = Configuration.from(new File(jobFilePath));

    // 创建 DataX Job 实例
    Job job = new DefaultJob(configuration);

    // 启动 DataX Job 实例
    job.start();
}

其中,datax.home 是 DataX 的安装路径,job.json 是 DataX Job 配置文件的路径。

DataX 常用操作

下面是 DataX 常用的操作:

  • 数据源配置

DataX 支持多种数据源,需要根据具体情况进行配置。以 MySQL 数据源为例,配置文件如下:

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "root",
            "password": "123456",
            "column": [
              "*"
            ],
            "connection": [
              {
                "jdbcUrl": [
                  "jdbc:mysql://localhost:3306/source_db"
                ],
                "table": [
                  "source_table"
                ]
              }
            ]
          }
        }
      }
    ]
  }
}

其中,usernamepassword 分别是 MySQL 数据库的用户名和密码,jdbcUrl 指定连接的数据库和端口号,table 指定需要同步的数据表。

  • DataX 运行环境配置
{
    "core": {
        "transport": {
            "channel": {
                "speed": 1000
            }
        }
    }
}

其中,channel.speed 指定了数据传输的速度。

  • 数据源和目标数据的连接配置
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://localhost:3306/source_db"
                                ],
                                "table": [
                                    "source_table"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://localhost:3306/target_db",
                                "table": [
                                    "target_table"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}

其中,usernamepassword 分别是 MySQL 数据库的用户名和密码,jdbcUrl 指定连接的数据库和端口号,table 指定同步数据的目标表。

  • 数据同步配置
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://localhost:3306/source_db"
                                ],
                                "table": [
                                    "source_table"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "*"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://localhost:3306/target_db",
                                "table": [
                                    "target_table"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}

其中,reader 指定数据源配置,writer 指定目标数据配置,column 指定需要同步的列名。

  • 数据同步任务调度

    {
        "job": {
            "setting": {
                "speed": {
                    "channel": 3
                },
                "errorLimit": {
                    "record": 0,
                    "percentage": 0.02
                }
            },
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "username": "root",
                            "password": "123456",
                            "column": [
                                "*"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl": [
                                        "jdbc:mysql://localhost:3306/source_db"
                                    ],
                                    "table": [
                                        "source_table"
                                    ]
                                }
                            ]
                        }
                    },
                    "writer": {
                        "name": "mysqlwriter",
                        "parameter": {
                            "username": "root",
                            "password": "123456",
                            "column": [
                                "*"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl": "jdbc:mysql://localhost:3306/target_db",
                                    "table": [
                                        "target_table"
                                    ]
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }
    
  • Java 代码示例

下面是一个使用 Java API 调用 DataX 实现数据同步的示例代码:

import com.alibaba.datax.common.exception.DataXException;
import com.alibaba.datax.core.Engine;
import com.alibaba.datax.core.util.ExceptionTracker;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DataXExample {
    public static void main(String[] args) {
        String jobConfig = "job.json";
        Map<String, String> params = new HashMap<>();
        List<String> logFiles = new ArrayList<>();

        try {
            Engine engine = new Engine();
            engine.start(jobConfig, params, logFiles);
        } catch (Throwable e) {
            if (DataXException.isDataXException(e)) {
                ExceptionTracker.track(e);
            }
            System.exit(1);
        }
    }
}

其中,jobConfig 指定了配置文件的路径,paramslogFiles 分别是参数和日志文件列表。

  • 数据同步流程图

下面是数据同步的流程图:

img

其中,Reader 模块从源数据读取数据,Writer 模块将数据写入目标数据。Job Scheduler 调度任务并控制整个数据同步的流程。

posted @ 2022-01-12 22:54  runrab  阅读(46)  评论(0编辑  收藏  举报