Java/Python3 初探ETL开源框架DataX

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

工具部署

官方提供的工具部署方式有俩种,第一种是下载源码,Maven构建编译
第二种是直接运行编译好的程序,如果不是深度定制开发,推荐第二种


1.源码构建

这块有一些坑,因为在Pom文件中,有一些依赖是没有上传于Maven公服的,所以我们需要修改一些依赖jar的版本号,如下图(三个Pom文件,依次修改如下)

之后CD到项目根路径,打包
mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/


2.直接下载编译好的Bin

Click Here

官方提供的文档是由Python2.x直接调用Java (datax/bindatax.py)
介于本机只有Python3环境,所以需要针对几个py文件稍改即可,如下
print函数加上括号,以及try catch 加as关键字


Do-DataX

    @Test
    public void testDataX() throws Exception {
        // doDataXWithJava();
        // doDataXWithPython();
    }

    private static void doDataXWithJava() {
        System.setProperty("datax.home", "C:\\Work\\Data\\datax\\datax");
        System.setProperty("now", LocalTime.now().toString());// 替换job中的占位符
        String[] args = {"-job", System.getProperty("datax.home") + "/bin/data.json", "-mode", "standalone", "-jobid", "-1"};
        try {
            Engine.entry(args);
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    private static void doDataXWithPython() {

        String path = "C:\\Work\\Data\\datax\\datax\\bin";
        try {
            String windowCommand = String.format("cmd /c python " + path + "\\%s " + path + "\\%s", "datax.py", "data.json");
            log.info(windowCommand);
            Process pr = Runtime.getRuntime().exec(windowCommand, null, new File(path));
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String line;
            StringBuilder sb = new StringBuilder();
            while ((line = in.readLine()) != null) {
                sb.append(line).append("\n");
            }
            log.info(sb.toString());
            in.close();
            pr.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

调用分Python与Java, 实际上Python脚本也是调用的Java
但是如果需要直接Java调用,需要添加相关依赖以及环境变量(读取环境下conf文件)

Java-Maven-Pom依赖如下

        <!--datax-->
        <dependency>
            <groupId>com.alibaba.datax</groupId>
            <artifactId>datax-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.datax</groupId>
            <artifactId>streamreader</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.datax</groupId>
            <artifactId>streamwriter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

大卡车

趣闻,关于数据迁移,看看Amazon之前的解决方案

用啥DataX, 用大卡车吧

voidm

在黑暗中支撑和平的无名者

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐