datax一次读,多次写改造

datax一次读,多次写改造

  第一次写技术类文章,写的不好请不要喷,最近公司在用datax进行数据同步,但是由于datax只支持一次读,一次写模式,如果我一份数据要分发到多处就会频繁读、写极大浪费资源,所以就下载了datax源码,尝试能否改造为一次读,多次写这样的模式,经过一点点debug以及源码的查看,了解datax的传输机制,决定尝试修改源码,经过几天还真的搞出来了,下面是我测试的job  json配置文件:

{
    "job": {
        "setting": {
            "speed": {
                "channel": 2
            }
        },
        "content": [
          {
            "reader":{
"name":"mysqlreader",
"parameter":{
"connection":[
{
"jdbcUrl":[
"jdbc:mysql://xxx.xxx.xxx.xxx:3306/dp_test?useUnicode=true&characterEncoding=utf8"
],
"querySql":[
"select id,username,password from testzhuser;"
]
}
],
"password":"****",
"username":"root"
}
},
             "writer": [{
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "root",
                        "password": "****",
                        "column":["id","username","password"],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://xxx.xxx.xxx.xxx:3306/dp_test?useUnicode=true&characterEncoding=utf8",
                                "table": ["testzhuser1"]
                            }
                        ]
                    }
                },{
"name": "oraclewriter",
"parameter": {
"username": "xxxx",
"password": "xxxx",
"column": ["id", "username", "password"],
"connection": [{
"jdbcUrl": "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:orcl",
"table": ["TESTZHUSER1"]
}]
}
},{
                    "name": "hdfswriter",
                    "parameter": {
                        "defaultFS": "hdfs://xxx.xxx.xxx.xxx:9000",
                        "fileType": "text",
                        "path": "/hive/warehouse/testzhuser1",
                        "fileName": "testzhuser11.txt",
                        "column": [
                            {
                                "name":"id",
                                "type":"string"
                            },
                            {
                                "name":"username",
                                "type":"string"
                            },
                            {
                                "name":"password",
                                "type":"string"
                            }
                        ],
                        "writeMode": "append",
                        "fieldDelimiter": "|",
                        "compress":""
                    }
                }
            ]
          }
        ]
    }

}

中间经历过磨难,datax传输原理是 channel ,channel中通过queue来进行数据的传输,本来想的是在datax 写入目标的时候进行数据的多分发,在小数据量的时候还真的运行成功了,当我同步16000+数据时,问题暴露了,就是数据混乱了。然后又换了种思路来修改,就是在数据读出后创建多个channel 以及queue队列,并创建一个唯一channelkey ,同一个writer用同一个channelKey进行数据的获取,并写入到目标中去。

  由于第一次注册csdn还不会上传文件,这几天研究了就把修改的源码上传到csdn中,请关注!

DataX是一个用于数据同步的开源工具,它提供了丰富的插件来支持不同的数据源和目标。根据引用[2],DataX插件的开发模式是基于Record的抽象,各个插件只需要按照规范进行开发即可。引用[3]中提到,DataX的打包成功后的包结构中包含了插件目录。 对于Elasticsearch插件的二次开发,你可以参考DataX的插件开发规范和文档。首先,你需要了解Elasticsearch的数据结构和API,以便在插件中进行数据读取操作。然后,你可以在DataX的插件目录中创建一个新的插件目录,并按照规范进行插件的开发。在插件的配置文件中,你需要指定Elasticsearch的连接信息和查询条件等参数。 在插件的开发过程中,你可以使用DataX提供的各种工具和接口来简化开发和测试。例如,你可以使用DataX的RecordReader接口来读取Elasticsearch中的数据,并将其转换为DataX的Record对象。你还可以使用DataX的各种工具类来处理数据转换和批量入等操作。 最后,你可以使用DataX的命令行工具来运行你开发的插件,并通过配置文件指定插件的参数和数据源信息。例如,你可以使用类似于引用[1]的命令来运行你的Elasticsearch插件,并指定数据源的路径和插件的配置文件。 总结起来,要进行DataX的Elasticsearch插件的二次开发,你需要了解Elasticsearch的数据结构和API,按照DataX的插件开发规范进行插件的开发,使用DataX的工具和接口简化开发和测试,最后使用DataX的命令行工具来运行你开发的插件。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值