1.Datax简介&核心架构
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等等各种异构数据源之间高效的数据同步功能
job:datax完成单个的数据同步作业,被称之为job,其为整个单例数据同步流程的管理节点,承载了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
Split:DataXJob启动后,会根据不同的源端切分策略,对将要同步的数据进行切分,称之为Split。
Task:DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
Schedule:切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。
TaskGroup:每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。每个TaskGroup任务组中的Task并发执行,默认配置为5个并发。
2.Datax的使用
1.官方案例解析:
mysqlreader、hdfsreader、ftpreader mysqlwriter、hdfswriter
{
"job": {
{
"content":[ # datax同步的具体配置
{
"reader":{ # reader的配置(类型、字段等等)
"name":"streamreader", # name 就是 type 类型 ,streamreader测试的时候使用
"parameter":{ # 这里指的是每一种不同的数据源插件的具体参数
"column":[ # 在 streamreader 中需要设定发送的字段
{
"type":"string", # 发送一个string类型的 字段数据
"value":"DataX" # 数据就是Datax
},
{
"type":"long", # streamreader中字段的type是没有int的,只有long
"value":19890604
},
{
"type":"date",
"value":"1989-06-04 00:00:00"
},
{
"type":"bool",
"value":true
},
{
"type":"bytes",
"value":"test"
}
],
"sliceRecordCount":100000 # 发送多少条测试数据
}
},
"writer":{ # 指明这个属性中填写的是写入到哪里的插件配置
"name":"streamwriter", # 插件的类型是 streamwriter
"parameter":{ # streamwriter 的参数配置信息
"encoding":"UTF-8", # 输出的字符编码为 UTF-8
"print":false # 不输出到控制台
}
}
}
],
"setting":{ # 一系列的配置信息
"errorLimit":{ # 错误数据忽略
"percentage":0.02, # 允许百分之多少的数据出现错误
"record":0 # 根据报错记录进行忽略
},
"speed":{
"byte":10485760 # 控制内存和网速
}
}
}
}
}
配置文件结构:Datax的脚本格式是json,整个json包括content和setting两个部分
2.配置文件结构
- job: 顶层元素,包含任务的所有设置。
- setting: 任务设置,通常包括任务的速度控制等。
- speed: 速度控制设置。
- channel: 并发通道数量,表示同时进行数据传输的线程数。
- speed: 速度控制设置。
- content: 一个数组,每个元素代表一个数据同步任务。
- reader: 数据源读取配置,定义了如何读取数据。
- writer: 目标数据源写入配置,定义了如何写入数据。
Reader部分
reader配置块定义了如何读取数据。
- name: reader插件的名称。
- parameter: 读取参数。
- username: 数据源数据库的用户名。
- password: 数据源数据库的密码。
- column: 要读取的列。
- splitPk: 分片键,用于数据的并行读取。
- connection: 数据库连接信息。
- table: 要读取的表。
- jdbcUrl: 数据库的JDBC URL。
Writer部分
writer配置块定义了如何写入数据。
- name: writer插件的名称。
- parameter: 写入参数。
- username: 目标数据库的用户名。
- password: 目标数据库的密码。
- column: 要写入的列。
- preSql: 写入前执行的SQL语句,用于清理目标表等操作。
- connection: 数据库连接信息。
- table: 要写入的表。
- jdbcUrl: 数据库的JDBC URL。