网络带宽等硬件因素调优
1、使用scp移动文件等方式观察实际网络及网卡速度;
2、结合监控观察任务运行时间段,网络整体的繁忙情况避开网络高峰
3、观察datax节点磁盘IO负载
参数调优
全局参数
{
"core":{
"transport":{
"channel":{
"speed":{
"channel": 2, ## 数据导入的并发度
"record":-1, ##解除对读取行数的限制
"byte":-1, ##解除对字节的限制
"batchSize":2048 ##每次读取batch的大小
}
}
}
},
"job":{
...
}
}
局部参数
{
"job": {
"setting": {
"speed": {
"channel": 2, ## 数据导入的并发度
"record":-1, ##解除对读取行数的限制
"byte":-1, ##解除对字节的限制
"batchSize":2048 ##每次读取batch的大小
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "*****",
"column": [*],
"splitPk": "db_id", ## 必须指定切分键并发才生效
"connection": [
......
]
}
]
}
},
"writer": {
......
channel增大,可根据服务器的实际配置修改datax.py,提升-Xms与-Xmx,来防止OOM。
DEFAULT_JVM = "-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log" % (DATAX_HOME)
channel并不是越大越好,过分大反而会影响宿主机的性能。
jvm调优
$ python ./bin/datax.py --jvm="-Xms512m -Xmx512m" ./job/stream2stream.json
任务启动时刻 : 2019-09-12 16:51:04
任务结束时刻 : 2019-09-12 16:51:14
任务总计耗时 : 10s
任务平均流量 : 147.82MB/s
记录写入速度 : 5000000rec/s
读出记录总数 : 50000000
读写失败总数 : 0
$ python ./bin/datax.py --jvm="-Xms1G -Xmx1G" ./job/job.json
任务启动时刻 : 2019-09-12 16:54:38
任务结束时刻 : 2019-09-12 16:54:48
任务总计耗时 : 10s
任务平均流量 : 147.82MB/s
记录写入速度 : 5000000rec/s
读出记录总数 : 50000000
读写失败总数 : 0
根据服务器条件为job设置合适等jvm大小,可惜我使用的streamreader没测出效果,从十万到千万,它总是保持总耗时10s。