tar -zxvf datax.tar.gz -c /opt/module/ 指定目录解压
解压之后,datax下的目录:
- bin 运行的命令跟脚本
- conf 配置文件
- lib 依赖
- plugin 读写插件的jar包
- job 编写的某一个XX的同步脚本 比如说mysql 同步hdfs 的json串 写在job里面
- script
- tmp
bin 目录下有:
- datax.py
- dxprof.py
- perftrace.py
最核心的是 datax.py 我们要运行的就是这个脚本
datax.py是一个python脚本,我们运行的时候 执行的命令是:python datax.py xxx
conf 目录下有:
- core.json 全局核心配置
- logback.xml 日志相关的
job目录下有:
- job.json 就是一个模板
lib目录下:
- xxx.jar
- yyy.jar
- zzz.jar
lib目录下就是一些公共依赖
plugin目录下:
- reader
- writer
plugin目录下有各种数据源的依赖
进入reader目录(cd reader/):
- casscandrareader
- drdsreader
- ftpreader
- hdfsreader
- xxx
这些就是目前支持读取的数据源,前缀就是目前支持的数据源的名称
进入hdfsreader目录(cd hdfsreader/):
- hdfsreader-0.0.1-SNAPSHOT.jar 就是一个jar包
- libs 里面是自己需要的一些依赖
- plugin_job_template.json 模板
- plugin.json 一些配置
安装python的命令:yum install -y python
打开官方自带模板的命令:python bin/datax.py ./job/job.json
job.json 就是一个json串,主要分为4部分内容
{
作业设置
reader
writer
参数:速率、错误率
}
Setting参数说明
"setting":{
"speed":{ //传输速率控制
"channel":1, //并发数
"byte":100 //从数据量的角度来限制 比如100 以上就是每秒钟最高只能达到100字节 /s 上面是从流量和数据量来控制
},
"errorLimit":{ //容错比例配置
"record":1, //错误条数上限,超出则任务失败
“percentage”:0.02 //错误比例上限,超出则任务失败
}
}
mysqlreader参数解析
"reader": {
//name:reader名
"name": "mysqlreader",
"parameter": {
//column:需要同步的列名集合,使用JSON数组描述自带信息 *代表所有列
"column": [],
"connection": [
{
//需要同步的表,支持多个
"table": [],
//jdbcUrl:对数据库的JDBC连接信息,使用JSON数组描述,支持多个连接地址
"jdbcUrl": [],
//querySql:自定义SQL,配置它后,mysqlreader直接忽略table、column、where 也就是说 它的优先级是最高的
【"querySql":[]】
}
],
//username:数据库用户名
"username": "",
//password:数据库用户名对应的密码
"password": "",
//where:筛选条件 比如只同步新增的数据,同步昨天的数据,where 创建时间=昨天
【"where":""】
//splitPK:数据分片字段,一般是主键,仅支持整型 job会切分成多个task,正常来说,你不指定的话 她会自动切,我们可以指定切分字段,让它切的更均匀 因为既然是切分,可能分的不均匀,所以我们可以指定这个切分条件,一般我们使用的是自增的主键,而且是整型的,不要指定字符串类型,比如自增ID
【"splitPK":""】
}
}
注意:【】中的参数为可选参数
hdfswriter参数解析
"writer": {
//name:writer名
"name": "hdfswriter",
"parameter": {
//column:写入数据的字段,其中name指定字段名,tyoe指定类型 不能写* 列里面的字段必须指定类型,并且顺序跟reader的保持一致 顺序不能错
"column": [],
//compress:hdfs文件压缩类型,默认不填写意味着不压缩
"compress":"",
//defaultFS:hdfs文件系统namenode节点地址,格式:hdfs://ip:端口
"defaultFS":"",
//fieldDelimiter:字符分隔符
"fieldDelimiter": "",
//fileName:写入文件名
"fileName":"",
//fileType:文件的类型,目前只支持用户配置为“、text”或"orc"
"fileType":"",
//path:存储到Hadoop hdfs文件系统的路径信息
"path":"",
//writeMode:hdfswriter写入数据清理处理模式:
(1)append:写入前不做任何处理,DataX hdfswriter直接使用filename写入,并保证文件名不冲突
(2)nonConflict:如果目录下有fileName前缀的文件,直接报错
"writeMode":""
}
}
datax怎么保证数据的一致性:
- 写入一个临时文件
- 因为是多线程,如果全部成功就修改文件名、路径
- 如果个别失败那就是任务失败,job失败,删除临时路径