Plugin family for task types — shell, SQL, Spark, Flink, Python, HTTP, K8s, EMR, DataX, … — executed by the worker. The runtime dolphinscheduler-task-executor drives lifecycle; each plugin here supplies the "what to actually do" part.
This directory is a Maven parent POM.
dolphinscheduler-task-api— the SPI and shared types.TaskChannelFactory,TaskChannel,AbstractTask,TaskExecutionContext, parameter DTOs. Plugin authors depend on this.dolphinscheduler-task-all— uber module aggregating every plugin; depended on bydolphinscheduler-workerso the worker can run any task type.
Shell family: task-shell, task-remoteshell, task-python, task-java, task-sql, task-procedure.
Big-data: task-spark, task-flink, task-flink-stream, task-mr, task-hivecli, task-seatunnel, task-datax, task-chunjun, task-sqoop, task-linkis.
Cloud: task-k8s, task-kubeflow, task-emr, task-emr-serverless, task-sagemaker, task-dms, task-datasync, task-datafactory, task-aliyunserverlessspark.
ML/Notebook: task-jupyter, task-zeppelin, task-dinky, task-mlflow, task-openmldb, task-dvc.
Network: task-http, task-grpc.
(See the directory listing for the complete live set.)
Each plugin ships:
- A
TaskChannelFactoryimplementation annotated with@AutoService(TaskChannelFactory.class). The annotation processor generatesMETA-INF/services/org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactoryat compile time. - A
TaskChannelimplementation that returns a concreteAbstractTasksubclass given anITaskExecutionContext. - A parameter DTO + UI-form description (via
PluginParamsTransfer, inherited fromdolphinscheduler-spi).
TaskPluginManager (in task-api) runs a PrioritySPIFactory<TaskChannelFactory> at startup; factories register themselves in a Map<taskType, factory>. Startup happens inside dolphinscheduler-api (for form metadata) and dolphinscheduler-worker (for actual execution).
@AutoServicerequires the Googleauto-serviceannotation processor configured in the plugin'spom.xml. Copy a working sibling exactly.TaskExecutionContextcarries secrets (passwords, tokens, access keys). Never log it raw. Every plugin has its own redaction discipline — mirror the neighbors.- Plugin naming: the
name()a factory returns becomes the task type as stored in the DB. Changing it is a data-migration event. - Classpath isolation is not implemented: every plugin shares the worker's classloader. Version conflicts between plugins (e.g. two plugins pulling different Jackson) must be resolved at the parent
pom.xml. - Do not create a new plugin outside this directory. The build scripts +
task-allrely on the directory pattern. - Each plugin's
pom.xmldeclares its own external deps with precise versions. Preferdolphinscheduler-bomfor versions shared with the core; large client libraries (Spark, Flink, Hadoop) are plugin-local.
Each plugin has src/test/java with mocked clients (e.g., mocked SparkSubmit, mocked HttpClient). End-to-end task runs are exercised by dolphinscheduler-e2e with real backends when possible.
dolphinscheduler-spi— base SPI.dolphinscheduler-task-executor— the lifecycle framework plugins execute inside.dolphinscheduler-worker— loadstask-allat runtime.dolphinscheduler-api— loads plugin metadata for UI forms (no execution).dolphinscheduler-datasource-plugin— SQL / big-data tasks consume datasource plugins.dolphinscheduler-storage-plugin— artifact storage for task inputs/outputs.