DataX 简介

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

DataX 本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的 Reader 插件,以及向目标端写入数据的 Writer 插件,理论上 DataX 框架可以支持任意数据源类型的数据同步工作。同时 DataX 插件体系作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

DataX 已经在 github 开源,开源地址是:github.com/Alibaba/datax,开源的产品不支持 OceanBase 和 DB2 ,OceanBase 团队提供针对 OceanBase 和 DB2 的读写插件。

DataX 的使用示例

DataX 安装后,默认目录在 /home/admin/datax3 。目录下有个文件夹 job ,默认存放数据迁移任务的配置文件,当然也可以自定义目录。

每个任务的参数文件是一个 json 格式,主要由一个 reader 和一个 writer 组成。job 文件夹下有个默认的示例任务配置文件 job.json

  1. [admin /home/admin/datax3/job]
  2. $cat job.json
  3. {
  4. "job": {
  5. "setting": {
  6. "speed": {
  7. "byte":10485760
  8. },
  9. "errorLimit": {
  10. "record": 0,
  11. "percentage": 0.02
  12. }
  13. },
  14. "content": [
  15. {
  16. "reader": {
  17. "name": "streamreader",
  18. "parameter": {
  19. "column" : [
  20. {
  21. "value": "DataX",
  22. "type": "string"
  23. },
  24. {
  25. "value": 19890604,
  26. "type": "long"
  27. },
  28. {
  29. "value": "1989-06-04 00:00:00",
  30. "type": "date"
  31. },
  32. {
  33. "value": true,
  34. "type": "bool"
  35. },
  36. {
  37. "value": "test",
  38. "type": "bytes"
  39. }
  40. ],
  41. "sliceRecordCount": 100000
  42. }
  43. },
  44. "writer": {
  45. "name": "streamwriter",
  46. "parameter": {
  47. "print": false,
  48. "encoding": "UTF-8"
  49. }
  50. }
  51. }
  52. ]
  53. }
  54. }

这个任务的配置文件的 reader 和 writer 类型是一个 stream。这个任务会检测 DataX 是否正确安装,运行之前确保安装 JDK 运行环境。

  1. [admin@h07g12092.sqa.eu95 /home/admin/datax3/job]
  2. $cd ../
  3. [admin@h07g12092.sqa.eu95 /home/admin/datax3]
  4. $bin/datax.py job/job.json

运行结果如下:

  1. 2021-03-16 16:52:21.489 [job-0] INFO JobContainer -
  2. === total summarize info ===
  3. 1. all phase average time info and max time task info:
  4. PHASE | AVERAGE USED TIME | ALL TASK NUM | MAX USED TIME | MAX TASK ID | MAX TASK INFO
  5. TASK_TOTAL | 0.403s | 1 | 0.403s | 0-0-0 | null
  6. READ_TASK_INIT | 0.001s | 1 | 0.001s | 0-0-0 | null
  7. READ_TASK_PREPARE | 0.001s | 1 | 0.001s | 0-0-0 | null
  8. READ_TASK_DATA | 0.076s | 1 | 0.076s | 0-0-0 | null
  9. READ_TASK_POST | 0.000s | 1 | 0.000s | 0-0-0 | null
  10. READ_TASK_DESTROY | 0.000s | 1 | 0.000s | 0-0-0 | null
  11. WRITE_TASK_INIT | 0.001s | 1 | 0.001s | 0-0-0 | null
  12. WRITE_TASK_PREPARE | 0.000s | 1 | 0.000s | 0-0-0 | null
  13. WRITE_TASK_DATA | 0.276s | 1 | 0.276s | 0-0-0 | null
  14. WRITE_TASK_POST | 0.000s | 1 | 0.000s | 0-0-0 | null
  15. WRITE_TASK_DESTROY | 0.000s | 1 | 0.000s | 0-0-0 | null
  16. WAIT_READ_TIME | 0.041s | 1 | 0.041s | 0-0-0 | null
  17. WAIT_WRITE_TIME | 0.025s | 1 | 0.025s | 0-0-0 | null
  18. 2. record average count and max count task info :
  19. PHASE | AVERAGE RECORDS | AVERAGE BYTES | MAX RECORDS | MAX RECORD`S BYTES | MAX TASK ID | MAX TASK INFO
  20. READ_TASK_DATA | 100000 | 2.60M | 100000 | 2.60M | 0-0-0 | null
  21. 2021-03-16 16:52:21.490 [job-0] INFO MetricReportUtil - reportJobMetric is turn off
  22. 2021-03-16 16:52:21.491 [job-0] INFO StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 2.48MB/s, 100000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.025s | All Task WaitReaderTime 0.041s | Percentage 100.00%
  23. 2021-03-16 16:52:21.491 [job-0] INFO LogReportUtil - report datax log is turn off
  24. 2021-03-16 16:52:21.492 [job-0] INFO JobContainer -
  25. 任务启动时刻 : 2021-03-16 16:52:20
  26. 任务结束时刻 : 2021-03-16 16:52:21
  27. 任务总计耗时 : 1s
  28. 任务平均流量 : 2.48MB/s
  29. 记录写入速度 : 100000rec/s
  30. 读出记录总数 : 100000
  31. 读写失败总数 : 0

说明

这个默认的任务参数关闭了数据流输出,所以看不到输出结果。