DataX插件编写指南

简介

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。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和正在开发中的插件。

时间: 2024-11-10 13:14:44

DataX插件编写指南的相关文章

Bookmarklet编写指南

前一段日子,我写了两个Bookmarklet----"短网址生成"和"短网址还原". 它们用起来很方便,除了我本人之外,其他朋友也在用.第一次发布Bookmarklet,就能有用户,我挺满意的. 下面就是我整理的<Bookmarklet编写指南>,供自己和需要的朋友参考. ==================================================== Bookmarklet编写指南 阮一峰 编写 一.什么是Bookmarklet

基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)

原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三种协议来实现VoIP,同时可以与目前电话使用的标准硬件进行交互通信,Asterisk在实现VoIP时,不需要任何附加硬件,本文所采用的也是这种使用方式.但是,如果企业没有与VoIP语音网关运营商建立合作关系,想要自己构建这样的一个平台,那么要和数字电话设备与模拟电话设备进行交互通信,Asterisk

自己动手丰衣足食之征服jQuery插件编写

原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择.

《阿里巴巴Java开发手册》IDEA插件与Eclipse插件使用指南

首先非常感谢大家对插件的支持与意见,这里详细介绍一下<阿里巴巴Java开发手册>IDEA插件与Eclipse插件的安装使用. 关于规约插件的背景介绍,可见上篇文章:提升团队研发效能利器,<阿里巴巴Java开发手册>插件全球首发(附插件下载地址) 一.阿里巴巴Java开发手册IDEA插件使用指南 通过Jetbrains官方仓库安装 1. 打开 Settings >> Plugins >> Browse repositories... 2. 在搜索框输入alib

HTML Email编写指南

今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周收到一封邮件,了解本周的大事. 有一天,我就在想,是不是我也能做一个这样的邮件? 然后,就发现这事不那么容易.抛开后台和编辑工作,单单是设计一个Email样板,就需要不少心思. 因为这种带格式的邮件,其实就是一张网页,正式名称叫做HTML Email.它能否正常显示,完全取决于邮件客户端.大多数的邮件客户端(比如Outlook和Gmail),会过滤HTML设

typecho插件编写教程(一):Hello World

  这篇文章主要介绍了typecho插件编写教程(一):Hello World,本文讲解了插件的文件结构.插件信息.插件结构.插件流程等内容,需要的朋友可以参考下 最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的不断深入,老高也慢慢上手了,于是总结出此篇编写教程分享给大家! I. 从HelloWorld说起 基本信息 想必想要开发typecho的你一定阅读过官方示例插件HelloWorld的源

typecho插件编写教程(二):写一个新插件

  这篇文章主要介绍了typecho插件编写教程(二):写一个新插件,本文是系列文章的第二篇,需要的朋友可以参考下 第一节我们了解了一个插件的基本构成,下面我们需要一个实例练习巩固. 真赶巧,老高最近正在改版百度sitemap提交插件for typecho,下面和老高一起改版吧! 准备 不知道大家用过WP版的百度结构化插件没?老高就是研究了那个插件,观察其API,然后就写出了typecho版的. 为什么要改版呢? 百度站长最近推出新的接口,使用起来更简单,工作量不算大,索性就改改吧! 新版插件需

typecho插件编写教程(三):保存配置

  这篇文章主要介绍了typecho插件编写教程(三):保存配置,本文讲解了完善方法.如何保存配置.使用需要注意的问题等内容,需要的朋友可以参考下 上一节我们制作了一个裸插件,下面我们开始让我们的插件开始工作! I. 完善方法 两个方法 我们实现activate和deactivate方法 代码如下: public static function activate(){ return 'activate'; } public static function deactivate(){ return

typecho插件编写教程(四):插件挂载

  这篇文章主要介绍了typecho插件编写教程(四):插件挂载,本文讲解了如何找到插件点并挂载插件的方法,需要的朋友可以参考下 终于,在能够保存配置信息后,我们可以开始编写插件的挂载功能了. 首先我们需要知道系统为我们在各个关键的环节都预留了插件点给我们,系统运行到插件点时,会检测到是否有插件挂在这个点上,然后执行插件的逻辑! 插件的工作就是找到合适的插件点,挂上去,然后执行自己的逻辑. 插件点,插件钩子,插件接口...在老高这儿是一个概念 官方的插件接口及功能列表 我们的插件需要执行的逻辑在