Datax

1.windows

1.前置环境

JDK(1.8以上,推荐1.8) 
Python(网上都说用3.0会报错)
Apache Maven 3.x (Compile DataX)

datax可以跨多种数据源同步数据,主要是通过系统定时任务操作脚本执行job任务

jdk地址:链接: https://pan.baidu.com/s/1TXj1xrBLkQ7TyFOJUoobkw?pwd=vn7g 提取码: vn7g 

python:链接: https://pan.baidu.com/s/1i53AUKpKoeSEG5uH4qc9eA?pwd=63tm 提取码: 63tm 

maven:链接: https://pan.baidu.com/s/14DQTrVupKeHdCly340JiQA?pwd=4q3c 提取码: 4q3c 

2.使用和介绍

datax地址:

解压压缩包,安装使用

压缩完打开

主要需要用到的是bin, job和log

bin下是执行命令的位置

job目录里放需要执行的json脚本

log里放的执行日志,可以看json语句是否有问题

操作:

进入bin目录,cmd打开命令窗

执行测试语句 python datax.py ../job/job.json

出现一下信息,表示可以正常运行成功

 

windows下使用:

从sqlserver写到mysql

Device_warn.json文件内容

{  
    "job": {  
        "setting": {  
            "speed": {  
                "channel": 1  
            },  
            "errorLimit": {  
                "percentage": 1  
            }  
  
        },  
        "content": [{  
            "reader": {  
                "name": "sqlserverreader",  
                "parameter": {  
                    "username": "sqlserver账号",  
                    "password": "sqlserver密码",  
                    "connection": [{  
                        "querySql": [  
                            "SELECT br.[id] as id,br.[设备ID] as device_id,br.[记录时间] as record_time,br.[采集时间] as collect_time FROM [dbo].[报警记录_2021] as br"  
                        ],  
                        "jdbcUrl": [  
                            "jdbc:sqlserver://sqlserverip;DatabaseName=zzsby" 
                        ]  
                    }],  
                    "maxRetries": 3  
                }  
            },  
            "writer": {  
                "name": "mysqlwriter",  
                "parameter": {  
                    "username": "mysql账号",  
                    "password": "mysql密码",  
                    "dateFormat": "YYYY-MM-dd hh:mm:ss",  
                    "column": [  
                        "id","device_id","record_time","collect_time"     ],  
                    "connection": [{  
                        "jdbcUrl": "jdbc:mysql://目标数据库ip+端口/库名",  
                        "table": [  
                            "表名"  
                        ]  
                    }]  
                }  
            }  
        }]  
    }  
} 

Device_warn.bat内容

1.@echo off  
2.python D:/DataX/datax/datax/bin/datax.py D:/DataX/datax/datax/job/device_warn.json  
3.pause  

2.linux环境下

1.前置环境

需要的环境和window一致,安装包一致

Sh文件 dd.sh

可能启动时会读取不到jdk环境,需引用环境地址

1.#!/bin/bash  d  
2.PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/jdk1.8.0_201/bin:/root/bin  
3.export PATH  
4.python /usr/local/datax/datax/bin/datax.py /usr/local/datax/datax/job/device_warn.json  

job脚本和window的json文件一样 

3.注意

1.问题

在使用时,如果mysql版本小于5.几不需要考虑以下问题

由于截至到2020年3月份,gtihub上最新的datax tar包所包含的mysql驱动是mysql-connector-java-5.1.34.jar Mysql版本大于5.几时,需要修改官网源码重新编译后使用

  参考 解决DataX支持Mysql 8的读写 - 下班闪电去打卡 - 博客园

解决步骤

源码地址: 

1.下载datax-master源码(官网直接下载很慢)

datax-master源码:链接: https://pan.baidu.com/s/1pMX_2IuHwa2ASqh2AYTGjw?pwd=fdnr 提取码: fdnr 

2.修改代码中的mysql版本和数据库连接参数

3.打包编译后使用(参考文档中说编译后直接使用,我这里是选择的替换部分mysql的文件包)

 

4.定时任务和脚本

1.定时任务操作

Crontab -l 查看列表

Crontab -e 编辑

 执行频率是靠系统的定时任务

2.需要使用年份的数据表

echo device_000${i}_$(date +%Y)

拼接字符串

3.需要从定时任务sh文件中向json中传值,循环处理多个表数据

datax.sh文件

1.#!/bin/bash  d  
2.JAVA_HOME=/usr/local/jdk/jdk1.8.0_201  
3.export PATH=$PATH:$JAVA_HOME/bin  
4.for i in 123 124 125 126 127 128 129 130 131 132;  
5.do    
6.python /usr/local/datax/datax/bin/datax.py -p "-Dsqlserver="[dbo].[历史记录_000${i}_2021]" -Dmongo="device_000${i}_2021"" /usr/local/datax/datax/job/sqlServerToMongo.json  
7.done  

写法:sh文件中用-D+名称设置   josn中的文件使用 $+值名称来获取

json文件  

1.{  
2.    "job": {  
3.        "setting": {  
4.            "speed": {  
5.                "channel": 5  
6.            },  
7.            "errorLimit": {  
8.                "percentage": 1  
9.            }  
10.  
11.        },  
12.        "content": [{  
13.            "reader": {  
14.                "name": "sqlserverreader",  
15.                "parameter": {  
16.                    "username": "sqlserver的账号",  
17.                    "password": "密码",  
18.                    "connection": [{  
19.                        "querySql": [  
20.                            "SELECT his.[id] as serial,his.[设备ID] as device_id,his.[记录时间] as record_time,his.[采集时间] as collect_time FROM $sqlserver as his "  
21.                            ],  
22.                        "jdbcUrl": [  
23.                            "jdbc:sqlserver://sqlserver的ip;DatabaseName=zzsby"  
24.                        ]  
25.                    }],  
26.                    "maxRetries": 3  
27.                }  
28.            },  
29.             "writer": {  
30.                    "name": "mongodbwriter",  
31.                    "parameter": {  
32.                        "address": [  
33.                            "mongo的ip+端口"  
34.                        ],  
35.                        "userName": "mongo的用户名",  
36.                        "userPassword": "mongo密码",  
37.                        "dbName": "数据库名",  
38.                        "collectionName": "$mongo",  
39.                        "column": [   
40.                            {  
41.                                "name":"serial",  
42.                                "type":"LONG"  
43.                            },  
44.                            {  
45.                                "name": "device_id",  
46.                                "type": "LONG"  
47.                            },  
48.                            {  
49.                                "name": "record_time",  
50.                                "type": "DATE"  
51.                            }
52.                        ],  
53.                        "writeMode": {  
54.                            "isReplace": "false",  
55.                            "replaceKey": "_id"  
56.                        }  
57.                    }  
58.                }  
59.        }] 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值