白癜风专家在线 http://www.xxzywj.com/m/背景简介
目前在大数据生态中,调度系统是不可或缺的一个重要组件。ApacheDolphinScheduler作为一个顶级的Apache项目,其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说,能够支持的可调度的任务类型同样是一个非常重要的因素,在调度、分布式、高可用、易用性解决了的情况下,随着业务的发展或者各种需求使用到的组件增多,用户自然而然会希望能够快速、方便、简洁地对ApacheDolphinscheduler可调度的任务类型进行扩充。本文便带大家了解如何方便、极速扩充一个ApacheDolphinSchedulerTask。
作者简介
张柏强,大数据开发工程师,主要研究方向为实时计算、元数据治理、大数据基础组件。
01什么是SPI服务发现(WhatisSPI)?
SPI全称为(ServiceProviderInterface),是JDK内置的一种服务提供发现机制。大多数人可能会很少用到它,因为它的定位主要是面向开发厂商的,在java.util.ServiceLoader的文档里有比较详细的介绍,其抽象的概念是指动态加载某个服务实现。
02为什么要引入SPI(WhydidweintroduceSPI)?
不同的企业可能会有自己的组件需要通过task去执行,大数据生态中最为常用数仓工具ApacheHive来举例,不同的企业使用Hive方法各有不同。有的企业通过HiveServer2执行任务,有的企业使用HiveClient执行任务,而ApacheDolphinScheduler提供的开箱即用的Task中并没有支持HiveClient的Task,所以大部分使用者都会通过Shell去执行。然而,Shell哪有天然的TaskTemplate好用呢?所以,ApacheDolphinScheduler为了使用户能够更好地根据企业需求定制不同的Task,便支持了TaskSPI化。
我们首先要了解一下ApacheDolphinScheduler的Task改版历程,在DS1.3.x时,扩充一个Task需要重新编译整个ApacheDolphinScheduler,耦合严重,所以在ApacheDolphinScheduler2.0.x引入了SPI。前面我们提到了SPI的抽象概念是动态加载某个服务的实现,这里我们具象一点,将ApacheDolphinScheduler的Task看成一个执行服务,而我们需要根据使用者的选择去执行不同的服务,如果没有的服务,则需要我们自己扩充,相比于1.3.x我们只需要完成我们的Task具体实现逻辑,然后遵守SPI的规则,编译成Jar并上传到指定目录,即可使用我们自己编写的Task。
03谁在使用它(Whoisusingit)?
1、ApacheDolphinScheduler
task
datasource
2、ApacheFlink
flinksqlconnector,用户实现了一个flink-connector后,Flink也是通过SPI来动态加载的
3、Springboot
springbootspi
4、Jdbc
jdbc4。0以前,开发人员还需要基于Class。forName("xxx")的方式来装载驱动,jdbc4也基于spi的机制来发现驱动提供商了,可以通过META-INF/services/java。sql。Driver文件里指定实现类的方式来暴露驱动提供者
5、更多
dubbo