DataX插件编写指南

简介: DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github。

简介

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQLOracleHDFSHiveOceanBaseHBaseOTSODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github


代码托管地址:

https://github.com/alibaba/DataX

插件的开发可以参考:

https://github.com/alibaba/DataX/wiki/DataX%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E5%AE%9D%E5%85%B8


下面是参考《DataX插件开发宝典》,进行插件开发的一个完整的流程。


新建模块

首先从 https://github.com/alibaba/DataX 克隆代码,然后执行如下命令:

mvn clean package -DskipTests assembly:assembly

这个命令会生成datax.tar.gz,我们可以将生成的文件部署到相应的环境,进行数据的导入导出。

后续,开发测试之后,可以使用上面的命令,将我们自己开发的插件集成到DataX中。


然后将代码导入到Eclispe(或者其它IDE)中,然后在这个项目下新建一个maven模块。

接着做一些配置,配置之后就可以进行开发了


配置

DataX使用Maven工具来管理项目,插件和框架使用多模块的方式组织在一起。使用maven-assembly-plugin将所有的模块打包在一起。

在开发的过程中,需要进行两方面的配置

  1. 插件模块本身的配置:目录和文件要满足约定
  2. DataX主模块的配置:需要配置2个文件:./pom.xml./package.xml

插件本身的配置:

建立一个插件模块之后,源代码的结果应该满足如下结构:

pom的配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.alibaba.datax</groupId>
        <artifactId>datax-all</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>qvxfilereader</artifactId>

    <properties>
        <datax-project-version>0.0.1-SNAPSHOT</datax-project-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.datax</groupId>
            <artifactId>datax-common</artifactId>
            <version>${datax-project-version}</version>
        </dependency>
        <dependency>
        	<groupId>junit</groupId>
        	<artifactId>junit</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/package.xml</descriptor>
                    </descriptors>
                    <finalName>datax</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>dwzip</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

这里要注意的是,

1 增加了对datax-common的依赖,这个依赖是DataX的框架,

2 配置了maven-assembly-plugin,在这里应用了src/main/assembly/package.xml。package.xml定义了打包之后的目录结构,这个目录结果是DataX约定好的。具体如下:

<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id></id>
	<formats>
		<format>dir</format>
	</formats>
	<includeBaseDirectory>false</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>src/main/resources</directory>
			<includes>
				<include>plugin.json</include>
				<include>plugin_job_template.json</include>
			</includes>
			<outputDirectory>plugin/reader/qvxfilereader</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>target/</directory>
			<includes>
				<include>qvxfilereader-0.0.1-SNAPSHOT.jar</include>
			</includes>
			<outputDirectory>plugin/reader/qvxfilereader</outputDirectory>
		</fileSet>
	</fileSets>

	<dependencySets>
		<dependencySet>
			<useProjectArtifact>false</useProjectArtifact>
			<outputDirectory>plugin/reader/qvxfilereader/libs</outputDirectory>
			<scope>runtime</scope>
		</dependencySet>
	</dependencySets>
</assembly>

除了上面的两个xml文件,还需要两个json文件

plugin.json是对插件本省的描述,在框架根据这个文件来加载插件,例如:


{
    "name": "qvxfilereader",
    "class": "com.alibaba.datax.plugin.reader.qvxfilereader.QvxFileReader",
    "description": "useScene: test. mechanism: use datax framework to transport data from qvx file. warn: The more you know about the data, the less problems you encounter.",
    "developer": "dtstack.com"
}

plugin_job_template.json:插件的配置模块,用户在使用插件是,根据这个模版来进行配置。例如:

{
    "name": "qvxfilereader",
    "parameter": {
        "path": [],
        "fieldDelimiter": ""
    }
}

DataX主模块的配置

pom.xml 中添加本插件的模块名称 模块名称artifactId

<modules>
        <module>qvxfilereader</module>     
 </modules>  
package.xml 中添加本插件的打包内容,以让 DataX 能够把该插件纳入整个插件体系。

<fileSet>
<directory>qvxfilereader/target/datax/</directory>
<includes>
<include>**/*.*</include>
</includes>
<outputDirectory>datax</outputDirectory>
</fileSet>

开发

主要参考《DataX插件开发宝典》,这里面讲的比较详细。

下面是插件如何通过RecordSenderchannel写入数据的伪代码:

public void startRead(RecordSender recordSender) {
	Record record=recordSender.createRecord();
	record.addColumn(new LongColumn(1));
	record.addColumn(new StringColumn("hello,world!"));
	recordSender.sendToWriter(record);
	recordSender.flush();
}

测试

开发完成之后,可以通过执行命令:

mvn clean package -DskipTests assembly:assembly

来生成DataX,然后进行测试。

因为每次执行这条命令,会把DataX中所有的插件重新编译和打包,速度会比较慢。所以,可以修改DataX中的pom.xml和package.xml,模块只保留common和正在开发中的插件。

相关文章
|
5月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
DataWorks Java 调度
DataWorks产品使用合集之进行离线同步时,如何使用DataX的Reader插件来实现源端过滤
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
81 0
DataWorks产品使用合集之进行离线同步时,如何使用DataX的Reader插件来实现源端过滤
|
7月前
|
消息中间件 SQL 分布式计算
DataX插件开发-KafkaWriter
DataX插件开发-KafkaWriter
225 0
|
Java 关系型数据库 MySQL
DataX教程(10)- DataX插件热插拔原理
DataX教程(10)- DataX插件热插拔原理
632 0
|
Oracle Java 关系型数据库
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
聊聊 datax 的 OceanBase 数据同步插件 分析下批处理参数 rewriteBatchedStatements=true&useCursorFetch=true 对大规模数据读写的性能影响
聊聊 datax 的 OceanBase 数据同步插件 ||批处理参数 rewriteBatchedStatements=true&useCursorFetch=true
|
JSON 分布式计算 关系型数据库
DataX插件开发
面向DataX插件开发人员,阐述开发一个DataX插件所经过的历程,消除开发者的困惑,让插件开发变得简单。
4132 0
|
4月前
|
数据采集 DataWorks 监控
DataWorks产品使用合集之数据集成并发数不支持批量修改,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
数据采集 DataWorks 数据管理
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第10天】随着大数据技术的发展,企业对数据处理的需求日益增长。阿里云推出的DataWorks是一款强大的数据集成和管理平台,提供从数据采集、清洗、加工到应用的一站式解决方案。本文通过电商平台案例,详细介绍了DataWorks的核心功能和优势,展示了如何高效处理大规模数据,帮助企业挖掘数据价值。
137 1
|
2月前
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
129 3
|
3月前
|
存储 分布式计算 DataWorks
dataworks数据集成
dataworks数据集成
147 1

热门文章

最新文章