DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。
DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。
或者
注意:dataX需要在jdk1.8及Python2.0以上运行查询jdk
#java-version查询Python
安装完成。
这里我以从SqlServer数据库中的一张表数据同步到MySQL中为例讲解一下数据同步功能。
首先需要说明一下这里的操作原理,建议看一下方便理解。如果想直接实操的可以跳过【一、】这个步骤。
在刚刚我们执行的#bin/datax.pyjob/job.json命令中分为两个步骤,第一个是启动名为datax.py的Python脚本。第二个是通过datax.py脚本来执行一个job.json文件。
datax.py脚本就不多说了,大家可以打开自己看看。主要我们要知道的是job.json文件,该文件也是我们用于进行数据同步功能的主要配置文件。
job.json文件内容:
{ "content":[ { "reader":{ "name":"streamreader", "parameter":{ "column":[ { "type":"string", "value":"DataX" }, { "type":"long", "value":19890604 }, { "type":"date", "value":"1989-06-0400:00:00" }, { "type":"bool", "value":true }, { "type":"bytes", "value":"test" } ], "sliceRecordCount":100000 } }, "writer":{ "name":"streamwriter", "parameter":{ "encoding":"UTF-8", "print":false } } } ], "setting":{ "errorLimit":{ "percentage":0.02, "record":0 }, "speed":{ "byte":10485760 } }}解析(个人理解,非官方语言):
setting:对上面执行单元的基本设置
看完上面配置文件的解释大家应该可以明白,数据同步的规则就是配置一个读入数据源一个写出数据源,执行之后即可进行数据同步。
查询结果
数据同步功能完成!
原理实际上没区别,直接用java输入刚刚自己在命令行中输入的命令即可
下面代码是java执行Linux命令
try{String[]cmd=newString[]{"/bin/sh","-c","/opt/software/datax/bin/datax.py./steamSqlServerMysql.json"};Processps=Runtime.getRuntime().exec(cmd);BufferedReaderbr=newBufferedReader(newInputStreamReader(ps.getInputStream()));StringBuffersb=newStringBuffer();Stringline;while((line=br.readLine())!=null){sb.append(line).append("\n");}Stringresult=sb.toString();logger.info(result);}catch(Exceptione){logger.error("----error-----");e.printStackTrace();}如果觉得有帮助的话给个免费的点赞吧,Thanks(ω)
JUC包的学习可以点这里摘要:我们已经知道,synchronized是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但synchronized粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock提供了比synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。本文以synchronized与Lock的对比为切...
1.java实现多线程有几种方法2种根据Oracle的官方说明。方法一:实现Runnable接口方法二:继承Thread类方法一:方法二:这两种实现那种更好方法一的run方法二和方法一致但是实现继承会覆盖run方法同时继承Thread和实现Runnable接口console:我来自Thread为什么输出的是我来自Thread因为在实现Thread时也重...
TheBootstrapApplicationContext概念这里是引用ASpringCloudapplicationoperatesbycreatinga“bootstrap”context,whichisaparentcontextforthemainapplication.Itisresponsibleforl...
思路:利用数组来存取数字,再利用头文件algorithm中提供的sort函数进行排序输出,这是个快速排序。...
让我们开始吧更新ppa源,更新apt源信息使用系统设置面板更新显卡驱动更新ppa源,更新apt源信息使用系统设置面板更新显卡驱动打开“系统设置”(SystemSettings)-->“软件与更新”(Software&Updates),点击“额外驱动”(AdditionalDrivers),可...
本文主要参考的是kaldi-asr.org,主要讲述的是用自己的录音来构建一个数字串识别系统。本文将主要分为以下几个部分:录制语音这里是英文数字串识别,因此需要一些用英语朗读数字的语音。我录制了128个语音文件,分别是两个人朗读,其中每个文件只包含三个数字。这128文件中80个用于训练,48个用于测试。并且训练数据和测试数据都被分成了8部分(可以假装成8个人),每部...
Question问题描述如下:为啥是日本呢,真的不是有意的,我发四。。。Solution解决办法很简单,只要判断条件就好了,代码如下:Result运行代码就可以揭开凶手的面纱了:...