DataX 运行时加载自定义 transformer 插件

往期相关内容:

如何让 DataX 运行时加载自定义 transformer 插件

早该知道的一种更高级的 transformer 自定义方法。

前言

之前的文章有介绍过通过自定义 transformer 在 DataX 上实现 ETL(Extract Transform Load) 过程中定制化的数据处理,当时的实现方法是自定义插件并手写代码注册到com/alibaba/datax/core/transport/transformer/TransformerRegistry.java文件中。
如下所示:

 registTransformer(new SubstrTransformer());
 registTransformer(new PadTransformer());
 registTransformer(new ReplaceTransformer());
 registTransformer(new FilterTransformer());
 registTransformer(new GroovyTransformer());

这种方法有明显的缺点:当我们对 transformer 进行修改后,需要重新编译 dataX 的核心模块。显然这种做法的系统耦合性过大,完全不符合 DataX 系统重视插件机制的设计理念。

那么,有没有更好的方法呢?

官方文档提到了 Reader 和 Writer 的加载原理,依据相关做法,开发者可以仅编写编译自己要使用的插件,然后按要求包装后放到指定的位置,DataX 就会在启动后加载相关插件。

原代码告诉我,Transformer 也支持类似的加载方法。

核心的功能实现是由下面的 TransformerRegistry 类来完成的:

/* 
	com/alibaba/datax/core/transport/transformer/TransformerRegistry.java
*/
public static void loadTransformer(String each) {
   
    String transformerPath = CoreConstant.DATAX_STORAGE_TRANSFORMER_HOME + File.separator + each;
    Configuration transformerConfiguration;
    try {
   
        transformerConfiguration = loadTransFormerConfig(transformerPath);
    } catch (Exception e) {
   
        LOG.error(String.format("skip transformer(%s),load transformer.json error, path = %s, ", each, transformerPath), e
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值