DataX是一个数据同步工具,可以将数据从一个地方读取出来并以极快的速度写入另外一个地方。常见的如将mysql中的数据同步到另外一个mysql中,或者另外一个mongodb中。
1:DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataXJob模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
2:DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
3:切分多个Task之后,DataXJob会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5
4:每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作
5:DataX作业运行起来之后,Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0
举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。DataX的调度决策思路是:
作为极简教程,本文将从mysql中读取一张表的数据,然后同步到clickhouse中。
下载下来是一个tar.gz的包,windows下解压命令:
tar-zxvfxxx.tar.gz程序目录:
DataX是基于python和java的,需要机器拥有python和java的运行环境。
在下载完毕后,通过执行自检脚本,可确认环境是否正确
python{YOUR_DATAX_HOME}/bin/datax.py{YOUR_DATAX_HOME}/job/job.json执行流程编写同步任务配置文件,在job目录中创建mysql-to-clickhouse.json文件,并填入如下内容
{"job":{"setting":{"speed":{"channel":3},"errorLimit":{"record":0,"percentage":0.02}},"content":[{"reader":{"name":"mysqlreader","parameter":{"username":"xxx","password":"xxx","column":["id","name"],"splitPk":"id","connection":[{"table":["table_name"],"jdbcUrl":["jdbc:mysql://192.168.1.xxx:xxx/db_name"]}]}},"writer":{"name":"clickhousewriter","parameter":{"username":"xxx","password":"xxx","column":["id","ame"],"connection":[{"jdbcUrl":"jdbc:clickhouse://192.168.1.xxx:xxx/table_name","table":["table_name"]}],"preSql":[],"postSql":[],"batchSize":65536,"batchByteSize":134217728,"dryRun":false,"writeMode":"insert"}}}]}}根据任务配置文件启动datax,先cd到datax的根目录
pythonbin/datax.pyjob/mysql-to-clickhouse.json运行上述命令后,任务就开启了。本例从mysql数据库中的一张表中读取了两个字段(id,name),然后同步到clickhouse中,clickhouse中需要先创建同样的库,表和列。