This is an automated email from the ASF dual-hosted git repository.

tianqiyan pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 78ba71bdbd [Feature][task]add azure datafactory task type (#13417)
78ba71bdbd is described below

commit 78ba71bdbd9aa8e64854fd9a758dfb9f22c3943f
Author: Tq <[email protected]>
AuthorDate: Mon Jan 30 11:15:20 2023 +0800

    [Feature][task]add azure datafactory task type (#13417)
    
    * init data factory
    
    * add task-type-config.yaml
    
    * add data factory ui
    
    * submit doc
    
    * submit license
    
    ---------
    
    Co-authored-by: devosend <[email protected]>
---
 docs/docs/en/guide/task/datafactory.md             |  70 ++++++++++
 docs/docs/zh/guide/task/datafactory.md             |  68 +++++++++
 docs/img/tasks/demo/datafactory.png                | Bin 0 -> 7174 bytes
 docs/img/tasks/demo/datafactory_auth1.png          | Bin 0 -> 31893 bytes
 docs/img/tasks/demo/datafactory_auth2.png          | Bin 0 -> 39440 bytes
 docs/img/tasks/icons/datafactory.png               | Bin 0 -> 3707 bytes
 dolphinscheduler-api/pom.xml                       |   8 ++
 .../api/controller/CloudController.java            | 108 +++++++++++++++
 .../apache/dolphinscheduler/api/enums/Status.java  |   3 +
 .../dolphinscheduler/api/service/CloudService.java |  31 +++++
 .../api/service/impl/CloudServiceImpl.java         |  88 ++++++++++++
 .../src/main/resources/task-type-config.yaml       |   1 +
 dolphinscheduler-bom/pom.xml                       |  12 ++
 .../src/main/resources/common.properties           |  11 ++
 dolphinscheduler-dist/release-docs/LICENSE         |  44 +++++-
 .../licenses/LICENSE-azure-core-management.txt     |  14 ++
 .../LICENSE-azure-resourcemanager-appplatform.txt  |  14 ++
 .../LICENSE-azure-resourcemanager-appservice.txt   |  14 ++
 ...LICENSE-azure-resourcemanager-authorization.txt |  14 ++
 .../licenses/LICENSE-azure-resourcemanager-cdn.txt |  14 ++
 .../LICENSE-azure-resourcemanager-compute.txt      |  14 ++
 ...NSE-azure-resourcemanager-containerinstance.txt |  14 ++
 ...NSE-azure-resourcemanager-containerregistry.txt |  14 ++
 ...ENSE-azure-resourcemanager-containerservice.txt |  14 ++
 .../LICENSE-azure-resourcemanager-cosmos.txt       |  14 ++
 .../LICENSE-azure-resourcemanager-datafactory.txt  |  14 ++
 .../licenses/LICENSE-azure-resourcemanager-dns.txt |  14 ++
 .../LICENSE-azure-resourcemanager-eventhubs.txt    |  14 ++
 .../LICENSE-azure-resourcemanager-keyvault.txt     |  14 ++
 .../LICENSE-azure-resourcemanager-monitor.txt      |  14 ++
 .../licenses/LICENSE-azure-resourcemanager-msi.txt |  14 ++
 .../LICENSE-azure-resourcemanager-network.txt      |  14 ++
 .../LICENSE-azure-resourcemanager-privatedns.txt   |  14 ++
 .../LICENSE-azure-resourcemanager-redis.txt        |  14 ++
 .../LICENSE-azure-resourcemanager-resources.txt    |  14 ++
 .../LICENSE-azure-resourcemanager-search.txt       |  14 ++
 .../LICENSE-azure-resourcemanager-servicebus.txt   |  14 ++
 .../licenses/LICENSE-azure-resourcemanager-sql.txt |  14 ++
 .../LICENSE-azure-resourcemanager-storage.txt      |  14 ++
 ...ICENSE-azure-resourcemanager-trafficmanager.txt |  14 ++
 .../licenses/LICENSE-azure-resourcemanager.txt     |  14 ++
 .../LICENSE-azure-security-keyvault-keys.txt       |  14 ++
 .../LICENSE-azure-security-keyvault-secrets.txt    |  14 ++
 .../licenses/LICENSE-azure-storage-common.txt      |  14 ++
 .../licenses/LICENSE-azure-storage-file-share.txt  |  14 ++
 .../resources/docker/file-manage/common.properties |  11 ++
 .../dolphinscheduler-task-all/pom.xml              |   5 +
 .../plugin/task/api/TaskConstants.java             |   9 ++
 .../dolphinscheduler-task-datafactory/pom.xml      |  57 ++++++++
 .../plugin/task/datafactory/DatafactoryHook.java   | 148 ++++++++++++++++++++
 .../task/datafactory/DatafactoryParameters.java    |  45 ++++++
 .../plugin/task/datafactory/DatafactoryStatus.java |  38 ++++++
 .../plugin/task/datafactory/DatafactoryTask.java   | 118 ++++++++++++++++
 .../task/datafactory/DatafactoryTaskChannel.java   |  47 +++++++
 .../datafactory/DatafactoryTaskChannelFactory.java |  46 +++++++
 .../task/datafactory/DatafactoryTaskTest.java      | 120 ++++++++++++++++
 dolphinscheduler-task-plugin/pom.xml               |   1 +
 .../public/images/task-icons/data_factory.png      | Bin 0 -> 4950 bytes
 .../images/task-icons/data_factory_hover.png       | Bin 0 -> 3707 bytes
 dolphinscheduler-ui/src/locales/en_US/project.ts   |  21 ++-
 dolphinscheduler-ui/src/locales/zh_CN/project.ts   |   8 +-
 .../src/service/modules/azure/index.ts             |  41 ++++++
 .../src/service/modules/azure/types.ts             |  23 ++++
 dolphinscheduler-ui/src/store/project/task-type.ts |   4 +
 dolphinscheduler-ui/src/store/project/types.ts     |   1 +
 .../projects/task/components/node/fields/index.ts  |   1 +
 .../components/node/fields/use-data-factory.ts     | 152 +++++++++++++++++++++
 .../projects/task/components/node/format-data.ts   |   8 +-
 .../projects/task/components/node/tasks/index.ts   |   4 +-
 .../task/components/node/tasks/use-data-factory.ts |  72 ++++++++++
 .../views/projects/task/components/node/types.ts   |   3 +
 .../src/views/projects/task/constants/task-type.ts |   5 +
 .../workflow/components/dag/dag.module.scss        |   6 +
 tools/dependencies/known-dependencies.txt          |  32 +++++
 74 files changed, 1874 insertions(+), 16 deletions(-)

diff --git a/docs/docs/en/guide/task/datafactory.md 
b/docs/docs/en/guide/task/datafactory.md
new file mode 100644
index 0000000000..1936db81f1
--- /dev/null
+++ b/docs/docs/en/guide/task/datafactory.md
@@ -0,0 +1,70 @@
+# Azure DataFactory Node
+
+## Overview
+
+In the world of big data, raw, unorganized data is often stored in relational, 
non-relational, and other storage systems.[Azure 
DataFactory](https://learn.microsoft.com/en-us/azure/data-factory/introduction) 
is a managed cloud service that's built for these complex hybrid 
extract-transform-load (ETL), extract-load-transform (ELT), and data 
integration projects.
+
+DolphinScheduler DataFactory functions:
+
+- Create Azure DataFactory task enable DolphinScheduler to schedule 
DataFactory pipelines, keep query pipeline execution status until finish the 
execution.
+
+## Prerequisite
+
+- **ResourceGroup**: Azure owns a resource group
+- **DataFactory**: Azure owns a data factory under the resource group
+- **Pipeline**: Azure owns pipelines under the assigned resource group and 
data factory
+- **Application**: Azure owns an application has permission to visit data 
factory, enables using SDK to call data factory functions
+- **ApplicationClientSecret**: To apply for client secret under Application 
`Certificates & secrets`
+- **AZURE-CLI**: Install Azure auth application AZURE-CLI on machine, please 
refer to [Install the Azure CLI on 
Linux](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux)
+
+### Application Permission Setting
+
+First, visit the `Subcription` page and choose `Access control (IAM)`, then 
click `Add role assignment` to the authorization page.
+![Subcription-IAM](../../../../img/tasks/demo/datafactory_auth1.png)
+After that, select `Contributor` role which satisfy functions calls in data 
factory. Then click `Members` page, and click `Select members`.
+Search application name or application `Object ID` to assign `Contributor` 
role to application.
+![Subcription-Role](../../../../img/tasks/demo/datafactory_auth2.png)
+
+## Configurations
+
+Config Azure configurations, modify `azure` related configurations in 
`common.properties`
+- **resource.azure.client.id**: Azure Application Application (client) ID
+- **resource.azure.client.secret**: Azure Application client secret under 
`Certificates & secrets`
+- **resource.azure.subId**: Data factory subscription ID
+- **resource.azure.tenant.id**: Azure Active Directory tenant ID
+
+```yaml
+# The Azure client ID (Azure Application (client) ID)
+resource.azure.client.id=minioadmin
+# The Azure client secret in the Azure application
+resource.azure.client.secret=minioadmin
+# The Azure data factory subscription ID
+resource.azure.subId=minioadmin
+# The Azure tenant ID in the Azure Active Directory
+resource.azure.tenant.id=minioadmin
+
+```
+
+## Create Task
+
+- Click `Project -> Management-Project -> Name-Workflow Definition`, and click 
the "Create Workflow" button to enter the
+  DAG editing page.
+- Drag from the toolbar <img src="../../../../img/tasks/icons/datafactory.png" 
width="15"/> task node to canvas.
+
+## Task Example
+
+[//]: # (TODO: use the commented anchor below once our website template 
supports this syntax)
+[//]: # (- Please refer to [DolphinScheduler Task Parameters 
Appendix]&#40;appendix.md#default-task-parameters&#41; `Default Task 
Parameters` section for default parameters.)
+
+- Please refer to [DolphinScheduler Task Parameters Appendix](appendix.md) 
`Default Task Parameters` section for default parameters.
+
+Here are some specific parameters for the DataFactory plugin:
+
+- **factoryName**: data factory name
+- **resourceGroupName**: resource group name of the data factory
+- **pipelineName**: pipeline name under the resource group and data factory
+
+The following shows the task plugin example:
+
+![data-factory](../../../../img/tasks/demo/datafactory.png)
+
diff --git a/docs/docs/zh/guide/task/datafactory.md 
b/docs/docs/zh/guide/task/datafactory.md
new file mode 100644
index 0000000000..0fa3375bc1
--- /dev/null
+++ b/docs/docs/zh/guide/task/datafactory.md
@@ -0,0 +1,68 @@
+# Azure DataFactory 节点
+
+## 综述
+
+在大数据环境中,原始、散乱的数据通常存储在关系、非关系和其他存储系统中。[Azure 
DataFactory](https://learn.microsoft.com/en-us/azure/data-factory/introduction) 
是为这些复杂的混合提取-转换-加载 (ETL)、提取-加载-转换 (ELT) 和数据集成项目而构建的托管云服务。
+
+DolphinScheduler DataFactory 组件的功能:
+
+- 创建 Azure DataFactory 任务可以调度DataFactory中的pipeline,持续获取执行状态,直至任务执行完成。
+
+## 前置条件
+
+- **资源组**: 拥有一个资源组
+- **数据工厂**: 拥有一个资源组下的数据工厂
+- **Pipeline**: 拥有前两者对应的pipeline
+- **应用**: 拥有一个有数据工厂访问权限的应用,才能赋予SDK调用数据工厂
+- **应用客户端密钥**: 在应用的`Certificates & secrets`申请客户端密钥
+- **AZURE-CLI**: 
在机器上安装了AZURE的鉴权应用AZURE-CLI,请参考[在LINUX上安装AZURE-CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux)
+
+### 应用权限设置
+
+首先打开当前`Subcription`页面,点击`Access control (IAM)`,再点击`Add role assignment`进入授权页面。
+![Subcription-IAM](../../../../img/tasks/demo/datafactory_auth1.png)
+首先选择`Contributor`角色足够满足调用数据工厂。然后选择`Members`页面,再选择`Select 
members`,检索APP名称或APP的`Object ID`并添加,从给指定APP添加权限.
+![Subcription-Role](../../../../img/tasks/demo/datafactory_auth2.png)
+
+## 环境配置
+
+需要进行Azure的一些配置,修改`common.properties`中的`azure`相关配置信息
+- **resource.azure.client.id**: Azure Application应用的Application (client) ID
+- **resource.azure.client.secret**: Azure Application应用的`Certificates & 
secrets`下的客户端密钥
+- **resource.azure.subId**: 数据工厂的subscription ID
+- **resource.azure.tenant.id**: Azure Active Directory下的tenant ID
+
+```yaml
+# The Azure client ID (Azure Application (client) ID)
+resource.azure.client.id=minioadmin
+# The Azure client secret in the Azure application
+resource.azure.client.secret=minioadmin
+# The Azure data factory subscription ID
+resource.azure.subId=minioadmin
+# The Azure tenant ID in the Azure Active Directory
+resource.azure.tenant.id=minioadmin
+
+```
+
+## 创建任务
+
+- 点击项目管理-项目名称-工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面;
+- 拖动工具栏的 <img src="../../../../img/tasks/icons/datafactory.png" width="15"/> 
任务节点到画板中。
+
+## 任务样例
+
+[//]: # (TODO: use the commented anchor below once our website template 
supports this syntax)
+[//]: # (- 
默认参数说明请参考[DolphinScheduler任务参数附录]&#40;appendix.md#默认任务参数&#41;`默认任务参数`一栏。)
+
+- 默认参数说明请参考[DolphinScheduler任务参数附录](appendix.md)`默认任务参数`一栏。
+
+### 独有参数
+
+- **factoryName**: 数据工厂名称
+- **resourceGroupName**: 与数据工厂相关的资源组名称
+- **pipelineName**: 选取数据工厂以及资源组下的对应pipeline名称
+
+组件图示如下:
+
+![data-factory](../../../../img/tasks/demo/datafactory.png)
+
diff --git a/docs/img/tasks/demo/datafactory.png 
b/docs/img/tasks/demo/datafactory.png
new file mode 100644
index 0000000000..711f8982ae
Binary files /dev/null and b/docs/img/tasks/demo/datafactory.png differ
diff --git a/docs/img/tasks/demo/datafactory_auth1.png 
b/docs/img/tasks/demo/datafactory_auth1.png
new file mode 100644
index 0000000000..5e4bd71500
Binary files /dev/null and b/docs/img/tasks/demo/datafactory_auth1.png differ
diff --git a/docs/img/tasks/demo/datafactory_auth2.png 
b/docs/img/tasks/demo/datafactory_auth2.png
new file mode 100644
index 0000000000..1a135191ce
Binary files /dev/null and b/docs/img/tasks/demo/datafactory_auth2.png differ
diff --git a/docs/img/tasks/icons/datafactory.png 
b/docs/img/tasks/icons/datafactory.png
new file mode 100644
index 0000000000..9cebaceee4
Binary files /dev/null and b/docs/img/tasks/icons/datafactory.png differ
diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index 8badbf4e74..9696ee7e2f 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -198,6 +198,14 @@
             <groupId>org.springdoc</groupId>
             <artifactId>springdoc-openapi-ui</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.azure.resourcemanager</groupId>
+            <artifactId>azure-resourcemanager</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.azure.resourcemanager</groupId>
+            <artifactId>azure-resourcemanager-datafactory</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <testResources>
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/CloudController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/CloudController.java
new file mode 100644
index 0000000000..a5d73748cb
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/CloudController.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.controller;
+
+import static 
org.apache.dolphinscheduler.api.enums.Status.LIST_AZURE_DATA_FACTORY_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.LIST_AZURE_DATA_FACTORY_PIPELINE_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.LIST_AZURE_RESOURCE_GROUP_ERROR;
+
+import org.apache.dolphinscheduler.api.aspect.AccessLogAnnotation;
+import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ApiException;
+import org.apache.dolphinscheduler.api.service.CloudService;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+/**
+ * cloud controller
+ */
+@Tag(name = "CLOUD_TAG")
+@RestController
+@RequestMapping("/cloud")
+public class CloudController extends BaseController {
+
+    @Resource
+    private CloudService cloudService;
+
+    /**
+     * get datafactory list
+     *
+     * @param loginUser login user
+     * @return datafactory name list
+     */
+    @Operation(summary = "listDataFactory", description = "LIST_DATA_FACTORY")
+    @GetMapping(value = "/azure/datafactory/factories")
+    @ResponseStatus(HttpStatus.OK)
+    @ApiException(LIST_AZURE_DATA_FACTORY_ERROR)
+    @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+    public Result listDataFactory(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
+        List<String> factoryNames = cloudService.listDataFactory(loginUser);
+        return success(Status.SUCCESS.getMsg(), factoryNames);
+    }
+
+    /**
+     * get resourceGroup list
+     *
+     * @param loginUser login user
+     * @return resourceGroup list
+     */
+    @Operation(summary = "listResourceGroup", description = 
"LIST_RESOURCE_GROUP")
+    @GetMapping(value = "/azure/datafactory/resourceGroups")
+    @ResponseStatus(HttpStatus.OK)
+    @ApiException(LIST_AZURE_RESOURCE_GROUP_ERROR)
+    @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+    public Result listResourceGroup(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
+        List<String> resourceGroupNames = 
cloudService.listResourceGroup(loginUser);
+        return success(Status.SUCCESS.getMsg(), resourceGroupNames);
+    }
+
+    /**
+     * get resourceGroup list
+     *
+     * @param loginUser login user
+     * @return resourceGroup list
+     */
+    @Operation(summary = "listPipeline", description = "LIST_PIPELINE")
+    @GetMapping(value = "/azure/datafactory/pipelines")
+    @ResponseStatus(HttpStatus.OK)
+    @ApiException(LIST_AZURE_DATA_FACTORY_PIPELINE_ERROR)
+    @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+    public Result listPipeline(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                               @RequestParam("factoryName") String factoryName,
+                               @RequestParam("resourceGroupName") String 
resourceGroupName) {
+        List<String> pipelineNames = cloudService.listPipeline(loginUser, 
factoryName, resourceGroupName);
+        return success(Status.SUCCESS.getMsg(), pipelineNames);
+    }
+}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index d60a867d77..97db8eb78f 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -265,6 +265,9 @@ public enum Status {
             "请先保存后再执行"),
     START_NODE_NOT_EXIST_IN_LAST_PROCESS(10207, "this node {0} does not exist 
in the latest process definition",
             "该节点 {0} 不存在于最新的流程定义中"),
+    LIST_AZURE_DATA_FACTORY_ERROR(10208, "list azure data factory error", 
"查询AZURE数据工厂列表错误"),
+    LIST_AZURE_RESOURCE_GROUP_ERROR(10209, "list azure resource group error", 
"查询AZURE资源组列表错误"),
+    LIST_AZURE_DATA_FACTORY_PIPELINE_ERROR(10210, "list azure data factory 
pipeline error", "查询AZURE数据工厂pipeline列表错误"),
 
     UDF_FUNCTION_NOT_EXIST(20001, "UDF function not found", "UDF函数不存在"),
     UDF_FUNCTION_EXISTS(20002, "UDF function already exists", "UDF函数已存在"),
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/CloudService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/CloudService.java
new file mode 100644
index 0000000000..057974bf11
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/CloudService.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.service;
+
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import java.util.List;
+
+public interface CloudService {
+
+    List<String> listDataFactory(User loginUser);
+
+    List<String> listResourceGroup(User loginUser);
+
+    List<String> listPipeline(User loginUser, String factoryName, String 
resourceGroupName);
+}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/CloudServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/CloudServiceImpl.java
new file mode 100644
index 0000000000..38f7351ce8
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/CloudServiceImpl.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.service.impl;
+
+import org.apache.dolphinscheduler.api.service.CloudService;
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.azure.core.http.rest.PagedIterable;
+import com.azure.core.management.AzureEnvironment;
+import com.azure.core.management.profile.AzureProfile;
+import com.azure.identity.ClientSecretCredential;
+import com.azure.identity.ClientSecretCredentialBuilder;
+import com.azure.resourcemanager.AzureResourceManager;
+import com.azure.resourcemanager.datafactory.DataFactoryManager;
+import com.azure.resourcemanager.datafactory.models.Factories;
+import com.azure.resourcemanager.datafactory.models.PipelineResource;
+import com.azure.resourcemanager.resources.models.ResourceGroups;
+
+@Service
+public class CloudServiceImpl extends BaseServiceImpl implements CloudService {
+
+    private static final String AZURE_CLIENT_ID = 
PropertyUtils.getString(TaskConstants.AZURE_CLIENT_ID);
+    private static final String AZURE_CLIENT_SECRET = 
PropertyUtils.getString(TaskConstants.AZURE_CLIENT_SECRET);
+    private static final String AZURE_ACCESS_SUB_ID = 
PropertyUtils.getString(TaskConstants.AZURE_ACCESS_SUB_ID);
+    private static final String AZURE_SECRET_TENANT_ID = 
PropertyUtils.getString(TaskConstants.AZURE_SECRET_TENANT_ID);
+    private static final AzureProfile profile =
+            new AzureProfile(AZURE_SECRET_TENANT_ID, AZURE_ACCESS_SUB_ID, 
AzureEnvironment.AZURE);
+    private static final ClientSecretCredential clientSecretCredential = new 
ClientSecretCredentialBuilder()
+            .clientId(AZURE_CLIENT_ID)
+            .clientSecret(AZURE_CLIENT_SECRET)
+            .tenantId(AZURE_SECRET_TENANT_ID)
+            
.authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
+            .build();
+    private static final DataFactoryManager manager;
+    private static final AzureResourceManager azure;
+
+    static {
+        manager = DataFactoryManager.authenticate(clientSecretCredential, 
profile);
+        azure = AzureResourceManager.authenticate(clientSecretCredential, 
profile).withDefaultSubscription();
+    }
+
+    @Override
+    public List<String> listDataFactory(User loginUser) {
+        Factories factories = manager.factories();
+        List<String> names = new ArrayList<>();
+        factories.list().stream().forEach(e -> names.add(e.name()));
+        return names;
+    }
+
+    @Override
+    public List<String> listResourceGroup(User loginUser) {
+        ResourceGroups resourceGroups = azure.resourceGroups();
+        List<String> names = new ArrayList<>();
+        resourceGroups.list().stream().forEach(e -> names.add(e.name()));
+        return names;
+    }
+
+    @Override
+    public List<String> listPipeline(User loginUser, String factoryName, 
String resourceGroupName) {
+        PagedIterable<PipelineResource> pipelineResources =
+                manager.pipelines().listByFactory(resourceGroupName, 
factoryName);
+        List<String> names = new ArrayList<>();
+        pipelineResources.stream().forEach(e -> names.add(e.name()));
+        return names;
+    }
+}
diff --git a/dolphinscheduler-api/src/main/resources/task-type-config.yaml 
b/dolphinscheduler-api/src/main/resources/task-type-config.yaml
index c4f3c148dd..688f02930d 100644
--- a/dolphinscheduler-api/src/main/resources/task-type-config.yaml
+++ b/dolphinscheduler-api/src/main/resources/task-type-config.yaml
@@ -33,6 +33,7 @@ task:
     - 'EMR'
     - 'K8S'
     - 'DMS'
+    - 'DATA_FACTORY'
   logic:
     - 'SUB_PROCESS'
     - 'DEPENDENT'
diff --git a/dolphinscheduler-bom/pom.xml b/dolphinscheduler-bom/pom.xml
index a691d3f2cc..5ff6d57743 100644
--- a/dolphinscheduler-bom/pom.xml
+++ b/dolphinscheduler-bom/pom.xml
@@ -103,6 +103,8 @@
         <azure-identity.version>1.7.1</azure-identity.version>
         <redshift-jdbc42.version>2.1.0.9</redshift-jdbc42.version>
         <aws-java-sdk-redshift.version>1.12.300</aws-java-sdk-redshift.version>
+        <azure-resourcemanager.version>2.21.0</azure-resourcemanager.version>
+        
<azure-resourcemanager-datafactory.version>1.0.0-beta.19</azure-resourcemanager-datafactory.version>
     </properties>
 
     <dependencyManagement>
@@ -798,6 +800,16 @@
                 <artifactId>azure-identity</artifactId>
                 <version>${azure-identity.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.azure.resourcemanager</groupId>
+                <artifactId>azure-resourcemanager</artifactId>
+                <version>${azure-resourcemanager.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.azure.resourcemanager</groupId>
+                <artifactId>azure-resourcemanager-datafactory</artifactId>
+                <version>${azure-resourcemanager-datafactory.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.amazon.redshift</groupId>
                 <artifactId>redshift-jdbc42</artifactId>
diff --git a/dolphinscheduler-common/src/main/resources/common.properties 
b/dolphinscheduler-common/src/main/resources/common.properties
index 0ea630f412..b0a45b9cdd 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -26,6 +26,17 @@ resource.storage.type=NONE
 # resource store on HDFS/S3 path, resource file will store to this base path, 
self configuration, please make sure the directory exists on hdfs and have read 
write permissions. "/dolphinscheduler" is recommended
 resource.storage.upload.base.path=/dolphinscheduler
 
+# The Azure client ID (Azure Application (client) ID)
+resource.azure.client.id=minioadmin
+# The Azure client secret in the Azure application
+resource.azure.client.secret=minioadmin
+# The Azure data factory subscription ID
+resource.azure.subId=minioadmin
+# The Azure tenant id in the Azure Active Directory
+resource.azure.tenant.id=minioadmin
+# The query interval
+resource.query.interval=10000
+
 # The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
 resource.aws.access.key.id=minioadmin
 # The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
diff --git a/dolphinscheduler-dist/release-docs/LICENSE 
b/dolphinscheduler-dist/release-docs/LICENSE
index 2eb79349d3..8dc6103409 100644
--- a/dolphinscheduler-dist/release-docs/LICENSE
+++ b/dolphinscheduler-dist/release-docs/LICENSE
@@ -517,6 +517,8 @@ The text of each license is also included at 
licenses/LICENSE-[project].txt.
     reactor-netty-core 1.0.22: 
https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty-core/1.0.22,
 Apache 2.0
     reactor-netty-http 1.0.22: 
https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty-http/1.0.22,
 Apache 2.0
     DmJdbcDriver18 8.1.2.79: 
https://mvnrepository.com/artifact/com.dameng/DmJdbcDriver18/8.1.2.79, Apache 
2.0
+    nimbus-jose-jwt 9.22: 
https://mvnrepository.com/artifact/com.nimbusds/nimbus-jose-jwt/9.22, Apache 2.0
+    woodstox-core 6.4.0: 
https://mvnrepository.com/artifact/com.fasterxml.woodstox/woodstox-core/6.4.0, 
Apache 2.0
 
 jna-platform
 
@@ -605,12 +607,42 @@ The text of each license is also included at 
licenses/LICENSE-[project].txt.
     bcpkix-jdk15on 1.68: 
https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on, MIT
     bcprov-jdk15on 1.68: 
https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on, MIT
     reactive-streams 1.0.4: 
https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.4, 
MIT
-    webjars-locator-core 0.50 
https://mvnrepository.com/artifact/org.webjars/webjars-locator-core/0.50, MIT
-    azure-core 1.34.0 
https://mvnrepository.com/artifact/com.azure/azure-core/1.34.0, MIT
-    azure-core-http-netty 1.12.7 
https://mvnrepository.com/artifact/com.azure/azure-core-http-netty/1.12.7, MIT
-    azure-identity 1.7.1 
https://mvnrepository.com/artifact/com.azure/azure-identity/1.7.1, MIT
-    msal4j 1.13.3 
https://mvnrepository.com/artifact/com.microsoft.azure/msal4j/1.13.3, MIT
-    msal4j-persistence-extension 1.1.0 
https://mvnrepository.com/artifact/com.microsoft.azure/msal4j-persistence-extension/1.1.0,
 MIT
+    webjars-locator-core 0.50: 
https://mvnrepository.com/artifact/org.webjars/webjars-locator-core/0.50, MIT
+    azure-core 1.34.0: 
https://mvnrepository.com/artifact/com.azure/azure-core/1.34.0, MIT
+    azure-core-http-netty 1.12.7: 
https://mvnrepository.com/artifact/com.azure/azure-core-http-netty/1.12.7, MIT
+    azure-identity 1.7.1: 
https://mvnrepository.com/artifact/com.azure/azure-identity/1.7.1, MIT
+    msal4j 1.13.3: 
https://mvnrepository.com/artifact/com.microsoft.azure/msal4j/1.13.3, MIT
+    msal4j-persistence-extension 1.1.0: 
https://mvnrepository.com/artifact/com.microsoft.azure/msal4j-persistence-extension/1.1.0,
 MIT
+    azure-resourcemanager 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager/2.21.0,
 MIT
+    azure-resourcemanager-appplatform 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-appplatform/2.21.0,
 MIT
+    azure-resourcemanager-appservice 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-appservice/2.21.0,
 MIT
+    azure-resourcemanager-authorization 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-authorization/2.21.0,
 MIT
+    azure-resourcemanager-cdn 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-cdn/2.21.0,
 MIT
+    azure-resourcemanager-compute 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-compute/2.21.0,
 MIT
+    azure-resourcemanager-containerinstance 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-containerinstance/2.21.0,
 MIT
+    azure-resourcemanager-containerregistry 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-containerregistry/2.21.0,
 MIT
+    azure-resourcemanager-containerservice 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-containerservice/2.21.0,
 MIT
+    azure-resourcemanager-cosmos 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-cosmos/2.21.0,
 MIT
+    azure-resourcemanager-datafactory 1.0.0-beta.19 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-datafactory/1.0.0-beta.19,
 MIT
+    azure-resourcemanager-dns 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-dns/2.21.0,
 MIT
+    azure-resourcemanager-eventhubs 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-eventhubs/2.21.0,
 MIT
+    azure-resourcemanager-keyvault 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-keyvault/2.21.0,
 MIT
+    azure-resourcemanager-monitor 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-monitor/2.21.0,
 MIT
+    azure-resourcemanager-msi 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-msi/2.21.0,
 MIT
+    azure-resourcemanager-network 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-network/2.21.0,
 MIT
+    azure-resourcemanager-privatedns 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-privatedns/2.21.0,
 MIT
+    azure-resourcemanager-redis 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-redis/2.21.0,
 MIT
+    azure-resourcemanager-resources 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-resources/2.21.0,
 MIT
+    azure-resourcemanager-search 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-search/2.21.0,
 MIT
+    azure-resourcemanager-servicebus 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-servicebus/2.21.0,
 MIT
+    azure-resourcemanager-sql 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-sql/2.21.0,
 MIT
+    azure-resourcemanager-storage 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-storage/2.21.0,
 MIT
+    azure-resourcemanager-trafficmanager 2.21.0: 
https://mvnrepository.com/artifact/com.azure.resourcemanager/azure-resourcemanager-trafficmanager/2.21.0,
 MIT
+    azure-security-keyvault-keys 4.5.2: 
https://mvnrepository.com/artifact/com.azure/azure-security-keyvault-keys/4.5.2,
 MIT
+    azure-security-keyvault-secrets 4.5.2: 
https://mvnrepository.com/artifact/com.azure/azure-security-keyvault-secrets/4.5.2,
 MIT
+    azure-storage-common 12.19.1: 
https://mvnrepository.com/artifact/com.azure/azure-storage-common/12.19.1, MIT
+    azure-storage-file-share 12.16.1: 
https://mvnrepository.com/artifact/com.azure/azure-storage-file-share/12.16.1, 
MIT
+    azure-core-management 1.9.0: 
https://mvnrepository.com/artifact/com.azure/azure-core-management/1.9.0, MIT
 
 ========================================================================
 MPL 1.1 licenses
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-core-management.txt 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-core-management.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-core-management.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appplatform.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appplatform.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appplatform.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appservice.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appservice.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-appservice.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-authorization.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-authorization.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-authorization.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cdn.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cdn.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cdn.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-compute.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-compute.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-compute.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerinstance.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerinstance.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerinstance.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerregistry.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerregistry.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerregistry.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerservice.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerservice.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-containerservice.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cosmos.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cosmos.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-cosmos.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-datafactory.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-datafactory.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-datafactory.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-dns.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-dns.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-dns.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-eventhubs.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-eventhubs.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-eventhubs.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-keyvault.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-keyvault.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-keyvault.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-monitor.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-monitor.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-monitor.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-msi.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-msi.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-msi.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-network.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-network.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-network.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-privatedns.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-privatedns.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-privatedns.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-redis.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-redis.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-redis.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-resources.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-resources.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-resources.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-search.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-search.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-search.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-servicebus.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-servicebus.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-servicebus.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-sql.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-sql.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-sql.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-storage.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-storage.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-storage.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-trafficmanager.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-trafficmanager.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager-trafficmanager.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager.txt 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-resourcemanager.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-keys.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-keys.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-keys.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-secrets.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-secrets.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-security-keyvault-secrets.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-common.txt 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-common.txt
new file mode 100644
index 0000000000..b5747801a6
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-common.txt
@@ -0,0 +1,14 @@
+LICENSE-msal4j.txtCopyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-file-share.txt
 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-file-share.txt
new file mode 100644
index 0000000000..d332c60cd0
--- /dev/null
+++ 
b/dolphinscheduler-dist/release-docs/licenses/LICENSE-azure-storage-file-share.txt
@@ -0,0 +1,14 @@
+Copyright(c) 2016 Microsoft Corporation
+All rights reserved.
+
+MIT License
+Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files(the "Software"), 
+to deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and / or sell copies of the Software, and to permit persons to whom the 
Software is furnished to do so, subject to the following conditions :
+
+The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
+IN THE SOFTWARE.
\ No newline at end of file
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
index f4bba5438d..644b8825a9 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
@@ -26,6 +26,17 @@ resource.storage.type=S3
 # resource store on HDFS/S3 path, resource file will store to this base path, 
self configuration, please make sure the directory exists on hdfs and have read 
write permissions. "/dolphinscheduler" is recommended
 resource.storage.upload.base.path=/dolphinscheduler
 
+# The Azure client ID (Azure Application (client) ID)
+resource.azure.client.id=minioadmin
+# The Azure client secret in the Azure application
+resource.azure.client.secret=minioadmin
+# The Azure data factory subscription ID
+resource.azure.subId=minioadmin
+# The Azure tenant id in the Azure Active Directory
+resource.azure.tenant.id=minioadmin
+# The query interval
+resource.query.interval=10000
+
 # The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
 resource.aws.access.key.id=accessKey123
 # The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml
index cd8a33b8a0..9d11d6fe58 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml
@@ -212,6 +212,11 @@
             <artifactId>dolphinscheduler-task-linkis</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-task-datafactory</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
 </project>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
index d2514e349e..8337dc6f31 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/TaskConstants.java
@@ -443,6 +443,15 @@ public class TaskConstants {
 
     public static final String TASK_TYPE_STREAM = "STREAM";
 
+    /**
+     * azure config
+     */
+    public static final String AZURE_CLIENT_ID = "resource.azure.client.id";
+    public static final String AZURE_CLIENT_SECRET = 
"resource.azure.client.secret";
+    public static final String AZURE_ACCESS_SUB_ID = "resource.azure.subId";
+    public static final String AZURE_SECRET_TENANT_ID = 
"resource.azure.tenant.id";
+    public static final String QUERY_INTERVAL = "resource.query.interval";
+
     /**
      * aws config
      */
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/pom.xml
new file mode 100644
index 0000000000..bbc1e59a1f
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<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";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.dolphinscheduler</groupId>
+        <artifactId>dolphinscheduler-task-plugin</artifactId>
+        <version>dev-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>dolphinscheduler-task-datafactory</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-spi</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-task-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-common</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.azure.resourcemanager</groupId>
+            <artifactId>azure-resourcemanager-datafactory</artifactId>
+            <version>1.0.0-beta.19</version>
+        </dependency>
+        <dependency>
+            <groupId>com.azure</groupId>
+            <artifactId>azure-identity</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryHook.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryHook.java
new file mode 100644
index 0000000000..763024169d
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryHook.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+
+import lombok.Data;
+import lombok.SneakyThrows;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.azure.core.management.AzureEnvironment;
+import com.azure.core.management.profile.AzureProfile;
+import com.azure.identity.ClientSecretCredential;
+import com.azure.identity.ClientSecretCredentialBuilder;
+import com.azure.resourcemanager.datafactory.DataFactoryManager;
+import com.azure.resourcemanager.datafactory.models.CreateRunResponse;
+import com.azure.resourcemanager.datafactory.models.PipelineResource;
+import com.azure.resourcemanager.datafactory.models.PipelineRun;
+import com.azure.resourcemanager.datafactory.models.PipelineRuns;
+
+@Data
+public class DatafactoryHook {
+
+    public static DatafactoryStatus[] taskFinishFlags =
+            {DatafactoryStatus.Failed, DatafactoryStatus.Succeeded, 
DatafactoryStatus.Cancelled};
+    protected final Logger logger =
+            
LoggerFactory.getLogger(String.format(TaskConstants.TASK_LOG_LOGGER_NAME_FORMAT,
 getClass()));
+    private final int QUERY_INTERVAL = 
PropertyUtils.getInt(TaskConstants.QUERY_INTERVAL, 10000);
+    private DataFactoryManager client;
+    private static AzureProfile profile;
+    private static ClientSecretCredential credential;
+    private String runId;
+
+    public DatafactoryHook() {
+        logger.info("initDatafactoryClient ......");
+        client = createClient();
+    }
+
+    protected static DataFactoryManager createClient() {
+        final String AZURE_ACCESS_SUB_ID = 
PropertyUtils.getString(TaskConstants.AZURE_ACCESS_SUB_ID);
+        final String AZURE_SECRET_TENANT_ID = 
PropertyUtils.getString(TaskConstants.AZURE_SECRET_TENANT_ID);
+        final String AZURE_CLIENT_ID = 
PropertyUtils.getString(TaskConstants.AZURE_CLIENT_ID);
+        final String AZURE_CLIENT_SECRET = 
PropertyUtils.getString(TaskConstants.AZURE_CLIENT_SECRET);
+        profile =
+                new AzureProfile(AZURE_SECRET_TENANT_ID, AZURE_ACCESS_SUB_ID, 
AzureEnvironment.AZURE);
+        credential = new ClientSecretCredentialBuilder()
+                .clientId(AZURE_CLIENT_ID)
+                .clientSecret(AZURE_CLIENT_SECRET)
+                .tenantId(AZURE_SECRET_TENANT_ID)
+                
.authorityHost(profile.getEnvironment().getActiveDirectoryEndpoint())
+                .build();
+        return DataFactoryManager.authenticate(credential, profile);
+    }
+
+    public Boolean startDatafactoryTask(DatafactoryParameters parameters) {
+        logger.info("initDatafactoryTask ......");
+        PipelineResource pipelineResource = getPipelineResource(parameters);
+        if (pipelineResource == null) {
+            return false;
+        }
+        logger.info("startDatafactoryTask ......");
+        CreateRunResponse run = pipelineResource.createRun();
+        if (StringUtils.isEmpty(run.runId())) {
+            return false;
+        }
+        runId = run.runId();
+        parameters.setRunId(runId);
+        return true;
+    }
+
+    public Boolean cancelDatafactoryTask(DatafactoryParameters parameters) {
+        logger.info("cancelTask ......");
+        PipelineRuns pipelineRuns = client.pipelineRuns();
+        try {
+            pipelineRuns.cancel(parameters.getResourceGroupName(), 
parameters.getFactoryName(), runId);
+        } catch (RuntimeException e) {
+            logger.error("failed to cancel datafactory task: " + 
e.getMessage());
+            return false;
+        }
+        return true;
+    }
+
+    public DatafactoryStatus queryDatafactoryTaskStatus(DatafactoryParameters 
parameters) {
+        logger.info("queryDatafactoryTaskStatus ......");
+
+        PipelineRuns pipelineRuns = client.pipelineRuns();
+        PipelineRun pipelineRun =
+                pipelineRuns.get(parameters.getResourceGroupName(), 
parameters.getFactoryName(), runId);
+
+        if (pipelineRun != null) {
+            logger.info("queryDatafactoryTaskStatus ......{}", 
pipelineRun.status());
+            return DatafactoryStatus.valueOf(pipelineRun.status());
+        }
+        return null;
+    }
+
+    private PipelineResource getPipelineResource(DatafactoryParameters 
parameters) {
+        return client.pipelines().get(parameters.getResourceGroupName(), 
parameters.getFactoryName(),
+                parameters.getPipelineName());
+    }
+
+    @SneakyThrows
+    public Boolean queryStatus(DatafactoryParameters parameters) {
+        List<DatafactoryStatus> stopStatusSet = Arrays.asList(taskFinishFlags);
+        int maxRetry = 5;
+        while (maxRetry > 0) {
+            DatafactoryStatus status = queryDatafactoryTaskStatus(parameters);
+
+            if (status == null) {
+                maxRetry--;
+                continue;
+            }
+
+            if (stopStatusSet.contains(status)) {
+                if (status.equals(DatafactoryStatus.Succeeded)) {
+                    return true;
+                }
+                return false;
+            }
+            logger.debug("wait {}ms to recheck finish status....", 
QUERY_INTERVAL);
+            Thread.sleep(QUERY_INTERVAL);
+        }
+        return false;
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryParameters.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryParameters.java
new file mode 100644
index 0000000000..b0bbb75e8d
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryParameters.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import 
org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@ToString
+public class DatafactoryParameters extends AbstractParameters {
+
+    private String factoryName;
+    private String resourceGroupName;
+    private String pipelineName;
+    private String runId;
+
+    @Override
+    public boolean checkParameters() {
+        return StringUtils.isNotEmpty(factoryName) && 
StringUtils.isNotEmpty(resourceGroupName)
+                && StringUtils.isNotEmpty(pipelineName);
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryStatus.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryStatus.java
new file mode 100644
index 0000000000..7f2af88877
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryStatus.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+public enum DatafactoryStatus {
+
+    Queued,
+    InProgress,
+    Succeeded,
+    Failed,
+    Canceling,
+    Cancelled,
+    ;
+
+    /**
+     * Gets the status property: The status of a pipeline run. Possible 
values: Queued, InProgress, Succeeded, Failed,
+     * Canceling, Cancelled.
+     *
+     * @return the status value.
+     */
+    DatafactoryStatus() {
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTask.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTask.java
new file mode 100644
index 0000000000..b8a5db4371
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTask.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.plugin.task.api.AbstractRemoteTask;
+import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
+import org.apache.dolphinscheduler.plugin.task.api.TaskException;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Collections;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class DatafactoryTask extends AbstractRemoteTask {
+
+    private final TaskExecutionContext taskExecutionContext;
+    private DatafactoryParameters parameters;
+    private DatafactoryHook hook;
+
+    public DatafactoryTask(TaskExecutionContext taskExecutionContext) {
+        super(taskExecutionContext);
+        this.taskExecutionContext = taskExecutionContext;
+    }
+
+    @Override
+    public List<String> getApplicationIds() throws TaskException {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public void init() {
+        parameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
DatafactoryParameters.class);
+        logger.info("Initialize Datafactory task params {}", 
JSONUtils.toPrettyJsonString(parameters));
+        hook = new DatafactoryHook();
+    }
+
+    @Override
+    public void submitApplication() throws TaskException {
+        try {
+            // start task
+            exitStatusCode = startDatafactoryTask();
+            setExitStatusCode(exitStatusCode);
+        } catch (Exception e) {
+            setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE);
+            throw new TaskException("data factory start task error", e);
+        }
+        // set runId to the appIds if start success
+        setAppIds(parameters.getRunId());
+    }
+
+    @Override
+    public void cancelApplication() throws TaskException {
+        checkApplicationId();
+        hook.cancelDatafactoryTask(parameters);
+        exitStatusCode = TaskConstants.EXIT_CODE_KILL;
+    }
+
+    @Override
+    public void trackApplicationStatus() throws TaskException {
+        checkApplicationId();
+        Boolean isFinishedSuccessfully;
+        isFinishedSuccessfully = hook.queryStatus(parameters);
+        if (!isFinishedSuccessfully) {
+            exitStatusCode = TaskConstants.EXIT_CODE_FAILURE;
+        } else {
+            exitStatusCode = TaskConstants.EXIT_CODE_SUCCESS;
+        }
+    }
+
+    /**
+     * check datafactory applicationId or get it from appId
+     */
+    private void checkApplicationId() {
+        String taskExecArn = hook.getRunId();
+        if (StringUtils.isEmpty(taskExecArn)) {
+            if (StringUtils.isEmpty(getAppIds())) {
+                throw new TaskException("datafactory runId is null, not 
created yet");
+            }
+            hook.setRunId(getAppIds());
+        }
+    }
+
+    public int startDatafactoryTask() {
+        Boolean isStartSuccessfully = hook.startDatafactoryTask(parameters);
+        if (!isStartSuccessfully) {
+            return TaskConstants.EXIT_CODE_FAILURE;
+        }
+        return TaskConstants.EXIT_CODE_SUCCESS;
+    }
+
+    @Override
+    public DatafactoryParameters getParameters() {
+        return parameters;
+    }
+
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannel.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannel.java
new file mode 100644
index 0000000000..d8c099bb09
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannel.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannel;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+import 
org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode;
+import 
org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper;
+
+public class DatafactoryTaskChannel implements TaskChannel {
+
+    @Override
+    public void cancelApplication(boolean status) {
+    }
+
+    @Override
+    public DatafactoryTask createTask(TaskExecutionContext taskRequest) {
+        return new DatafactoryTask(taskRequest);
+    }
+
+    @Override
+    public AbstractParameters parseParameters(ParametersNode parametersNode) {
+        return JSONUtils.parseObject(parametersNode.getTaskParams(), 
DatafactoryParameters.class);
+    }
+
+    @Override
+    public ResourceParametersHelper getResources(String parameters) {
+        return null;
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannelFactory.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannelFactory.java
new file mode 100644
index 0000000000..e9dce1ac96
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/main/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskChannelFactory.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannel;
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory;
+import org.apache.dolphinscheduler.spi.params.base.PluginParams;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.auto.service.AutoService;
+
+@AutoService(TaskChannelFactory.class)
+public class DatafactoryTaskChannelFactory implements TaskChannelFactory {
+
+    @Override
+    public TaskChannel create() {
+        return new DatafactoryTaskChannel();
+    }
+
+    @Override
+    public String getName() {
+        return "DATA_FACTORY";
+    }
+
+    @Override
+    public List<PluginParams> getParams() {
+        return Collections.emptyList();
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/test/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskTest.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/test/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskTest.java
new file mode 100644
index 0000000000..cf2c5a55ea
--- /dev/null
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datafactory/src/test/java/org/apache/dolphinscheduler/plugin/task/datafactory/DatafactoryTaskTest.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.datafactory;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.when;
+
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import com.azure.resourcemanager.datafactory.DataFactoryManager;
+import com.azure.resourcemanager.datafactory.models.CreateRunResponse;
+import com.azure.resourcemanager.datafactory.models.PipelineResource;
+import com.azure.resourcemanager.datafactory.models.Pipelines;
+
+@ExtendWith(MockitoExtension.class)
+public class DatafactoryTaskTest {
+
+    private static final String mockRunId =
+            "3c7182f4-d107-43c7-af2a-8c7b3ed1d614";
+
+    DatafactoryTask datafactoryTask;
+
+    @Mock
+    DataFactoryManager client;
+    MockedStatic<DatafactoryHook> datafactoryHookMockedStatic;
+
+    @BeforeEach
+    public void before() throws IllegalAccessException {
+        client = mock(DataFactoryManager.class);
+        datafactoryHookMockedStatic = mockStatic(DatafactoryHook.class);
+        when(DatafactoryHook.createClient()).thenReturn(client);
+
+        DatafactoryParameters datafactoryParameters = new 
DatafactoryParameters();
+        datafactoryTask = initTask(datafactoryParameters);
+    }
+
+    @Test
+    public void testConvertParam() {
+        DatafactoryParameters parameters = castParam();
+        Assertions.assertEquals("whale1", parameters.getFactoryName());
+        Assertions.assertEquals("factory1", parameters.getResourceGroupName());
+        Assertions.assertEquals("CopyPipeline_ps8", 
parameters.getPipelineName());
+        datafactoryHookMockedStatic.close();
+    }
+
+    @Test
+    public void testCheckCreateTask() {
+        DatafactoryHook hook = new DatafactoryHook();
+        DataFactoryManager client1 = DatafactoryHook.createClient();
+        hook.setClient(client1);
+
+        PipelineResource pipelineResource = mock(PipelineResource.class);
+        Pipelines pipelines = mock(Pipelines.class);
+        when(client1.pipelines()).thenReturn(pipelines);
+        when(pipelines.get(any(), any(), any())).thenReturn(pipelineResource);
+
+        CreateRunResponse response = mock(CreateRunResponse.class);
+        when(pipelineResource.createRun()).thenReturn(response);
+        when(response.runId()).thenReturn(mockRunId);
+        hook.startDatafactoryTask(castParam());
+        Assertions.assertEquals(mockRunId, hook.getRunId());
+        datafactoryHookMockedStatic.close();
+    }
+
+    @Test
+    public void testCancelTask() {
+        datafactoryTask.cancelApplication();
+        Assertions.assertEquals(datafactoryTask.getExitStatusCode(), 
TaskConstants.EXIT_CODE_KILL);
+        datafactoryHookMockedStatic.close();
+    }
+
+    private DatafactoryParameters castParam() {
+        String input =
+                
"{\"localParams\":[],\"resourceList\":[],\"factoryName\":\"whale1\",\"resourceGroupName\":\"factory1\",\"pipelineName\":\"CopyPipeline_ps8\"}";
+        return JSONUtils.parseObject(input, DatafactoryParameters.class);
+    }
+
+    private DatafactoryTask initTask(DatafactoryParameters DatasyncParameters) 
{
+        TaskExecutionContext taskExecutionContext = 
createContext(DatasyncParameters);
+        DatafactoryTask task = new DatafactoryTask(taskExecutionContext);
+        task.init();
+        task.getHook().setRunId(mockRunId);
+        return task;
+    }
+
+    public TaskExecutionContext createContext(DatafactoryParameters 
datafactoryParameters) {
+        String parameters = JSONUtils.toJsonString(datafactoryParameters);
+        TaskExecutionContext taskExecutionContext = 
Mockito.mock(TaskExecutionContext.class);
+        
Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(parameters);
+        return taskExecutionContext;
+    }
+}
diff --git a/dolphinscheduler-task-plugin/pom.xml 
b/dolphinscheduler-task-plugin/pom.xml
index 6cd6c8a76a..27b741f06b 100644
--- a/dolphinscheduler-task-plugin/pom.xml
+++ b/dolphinscheduler-task-plugin/pom.xml
@@ -61,6 +61,7 @@
         <module>dolphinscheduler-task-datasync</module>
         <module>dolphinscheduler-task-kubeflow</module>
         <module>dolphinscheduler-task-linkis</module>
+        <module>dolphinscheduler-task-datafactory</module>
     </modules>
 
     <dependencyManagement>
diff --git a/dolphinscheduler-ui/public/images/task-icons/data_factory.png 
b/dolphinscheduler-ui/public/images/task-icons/data_factory.png
new file mode 100644
index 0000000000..fb3bbd33d5
Binary files /dev/null and 
b/dolphinscheduler-ui/public/images/task-icons/data_factory.png differ
diff --git 
a/dolphinscheduler-ui/public/images/task-icons/data_factory_hover.png 
b/dolphinscheduler-ui/public/images/task-icons/data_factory_hover.png
new file mode 100644
index 0000000000..9cebaceee4
Binary files /dev/null and 
b/dolphinscheduler-ui/public/images/task-icons/data_factory_hover.png differ
diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts 
b/dolphinscheduler-ui/src/locales/en_US/project.ts
index 5a42e12f53..3ee2cef106 100644
--- a/dolphinscheduler-ui/src/locales/en_US/project.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/project.ts
@@ -37,10 +37,10 @@ export default {
     confirm: 'Confirm',
     cancel: 'Cancel',
     delete_confirm: 'Delete?',
-    authorize_level:'Authorize Level',
+    authorize_level: 'Authorize Level',
     no_permission: 'No Permission',
     read_permission: 'Read Permission',
-    all_permission: 'All Permission',
+    all_permission: 'All Permission'
   },
   workflow: {
     on_line: 'Online',
@@ -215,7 +215,7 @@ export default {
     workflow_relation_no_data_result_desc:
       'There is not any workflows. Please create a workflow, and then visit 
this page again.',
     ready_to_block: 'Ready to block',
-    block: 'Block',
+    block: 'Block'
   },
   task: {
     on_line: 'Online',
@@ -329,7 +329,7 @@ export default {
     online: 'Online'
   },
   node: {
-    is_cache: "Cache Execution",
+    is_cache: 'Cache Execution',
     jvm_args: 'Java VM Parameters',
     jvm_args_tips: 'Please enter virtual machine parameters',
     run_type: 'Run Type',
@@ -377,7 +377,8 @@ export default {
     image: 'Image',
     image_tips: 'Please enter image',
     command: 'Command',
-    command_tips: 'Please enter the container execution command, for example: 
/bin/echo hello world',
+    command_tips:
+      'Please enter the container execution command, for example: /bin/echo 
hello world',
     min_memory_tips: 'Please enter min memory',
     state: 'State',
     branch_flow: 'Branch flow',
@@ -798,7 +799,13 @@ export default {
     pytorch_requirements: 'Requirement File',
     pytorch_conda_python_version: 'Python Version',
     pytorch_conda_python_version_tips:
-      'Please enter the version number, such as 3.6, 3.7, 3.x'
+      'Please enter the version number, such as 3.6, 3.7, 3.x',
+    factory_name: 'Factory Name',
+    resource_group_name: 'Resource Group Name',
+    pipeline_name: 'Pipeline Name',
+    factory_tips: 'Please select factory',
+    resource_group_tips: 'Please select resource group',
+    pipeline_tips: 'Please select pipeline'
   },
   menu: {
     fav: 'Favorites',
@@ -808,6 +815,6 @@ export default {
     di: 'Data Integration',
     dq: 'Data Quality',
     ml: 'Machine Learning',
-    other: 'Other',
+    other: 'Other'
   }
 }
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts 
b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
index 54c77d4633..1d5224022b 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
@@ -777,7 +777,13 @@ export default {
     pytorch_python_env_tool: 'python环境管理工具',
     pytorch_requirements: '依赖文件',
     pytorch_conda_python_version: 'python版本',
-    pytorch_conda_python_version_tips: '请输入版本号,如 3.6, 3.7, 3.x等'
+    pytorch_conda_python_version_tips: '请输入版本号,如 3.6, 3.7, 3.x等',
+    factory_name: '工厂名称',
+    resource_group_name: '资源组名称',
+    pipeline_name: 'pipeline名称',
+    factory_tips: '请选择工厂',
+    resource_group_tips: '请选择资源组',
+    pipeline_tips: '请选择pipeline'
   },
   menu: {
     fav: '收藏组件',
diff --git a/dolphinscheduler-ui/src/service/modules/azure/index.ts 
b/dolphinscheduler-ui/src/service/modules/azure/index.ts
new file mode 100644
index 0000000000..28f83db45c
--- /dev/null
+++ b/dolphinscheduler-ui/src/service/modules/azure/index.ts
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { axios } from '@/service/service'
+import { DataFactoryReq } from './types'
+
+export function queryDataFactoryFactories(): any {
+  return axios({
+    url: '/cloud/azure/datafactory/factories',
+    method: 'get'
+  })
+}
+
+export function queryDataFactoryResourceGroups(): any {
+  return axios({
+    url: '/cloud/azure/datafactory/resourceGroups',
+    method: 'get'
+  })
+}
+
+export function queryDataFactoryPipelines(params: DataFactoryReq): any {
+  return axios({
+    url: '/cloud/azure/datafactory/pipelines',
+    method: 'get',
+    params
+  })
+}
diff --git a/dolphinscheduler-ui/src/service/modules/azure/types.ts 
b/dolphinscheduler-ui/src/service/modules/azure/types.ts
new file mode 100644
index 0000000000..5f59d70bde
--- /dev/null
+++ b/dolphinscheduler-ui/src/service/modules/azure/types.ts
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+interface DataFactoryReq {
+  factoryName: string
+  resourceGroupName: string
+}
+
+export { DataFactoryReq }
diff --git a/dolphinscheduler-ui/src/store/project/task-type.ts 
b/dolphinscheduler-ui/src/store/project/task-type.ts
index b1f426bef8..24bc05614d 100644
--- a/dolphinscheduler-ui/src/store/project/task-type.ts
+++ b/dolphinscheduler-ui/src/store/project/task-type.ts
@@ -149,6 +149,10 @@ export const TASK_TYPES_MAP = {
   LINKIS: {
     alias: 'LINKIS',
     helperLinkDisable: true
+  },
+  DATA_FACTORY: {
+    alias: 'DATA_FACTORY',
+    helperLinkDisable: true
   }
 } as {
   [key in TaskType]: {
diff --git a/dolphinscheduler-ui/src/store/project/types.ts 
b/dolphinscheduler-ui/src/store/project/types.ts
index e801f4a1eb..0df130e77b 100644
--- a/dolphinscheduler-ui/src/store/project/types.ts
+++ b/dolphinscheduler-ui/src/store/project/types.ts
@@ -56,6 +56,7 @@ type TaskType =
   | 'DATASYNC'
   | 'KUBEFLOW'
   | 'LINKIS'
+  | 'DATA_FACTORY'
 
 type ProgramType = 'JAVA' | 'SCALA' | 'PYTHON'
 
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
index e7b4ab06f8..4510f47183 100644
--- 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
@@ -85,3 +85,4 @@ export { useDms } from './use-dms'
 export { useDatasync } from './use-datasync'
 export { useKubeflow } from './use-kubeflow'
 export { useLinkis } from './use-linkis'
+export { useDataFactory } from './use-data-factory'
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-data-factory.ts
 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-data-factory.ts
new file mode 100644
index 0000000000..8dc6f5213c
--- /dev/null
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-data-factory.ts
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {
+  queryDataFactoryFactories,
+  queryDataFactoryPipelines,
+  queryDataFactoryResourceGroups
+} from '@/service/modules/azure'
+import { onMounted, ref, watch } from 'vue'
+import { useI18n } from 'vue-i18n'
+import { useCustomParams } from '.'
+import type { IJsonItem } from '../types'
+
+export function useDataFactory(model: { [field: string]: any }): IJsonItem[] {
+  const { t } = useI18n()
+
+  const factoryLoading = ref(false)
+  const resourceGroupLoading = ref(false)
+  const pipelineLoading = ref(false)
+
+  const factoryOptions = ref([] as { label: string; value: number }[])
+  const resourceGroupOptions = ref([] as { label: string; value: number }[])
+  const pipelineOptions = ref([] as { label: string; value: number }[])
+
+  const getFactoryOptions = async () => {
+    if (factoryLoading.value) return
+    factoryLoading.value = true
+    const factories = await queryDataFactoryFactories()
+    factoryOptions.value = factories.map((factory: string) => ({
+      label: factory,
+      value: factory
+    }))
+    factoryLoading.value = false
+  }
+
+  const getResourceGroupName = async () => {
+    if (resourceGroupLoading.value) return
+    resourceGroupLoading.value = true
+    const groupNames = await queryDataFactoryResourceGroups()
+    resourceGroupOptions.value = groupNames.map((groupName: string) => ({
+      label: groupName,
+      value: groupName
+    }))
+    resourceGroupLoading.value = false
+  }
+
+  const getPipelineName = async (
+    factoryName: string,
+    resourceGroupName: string
+  ) => {
+    if (pipelineLoading.value) return
+    pipelineLoading.value = true
+    const pipelineNames = await queryDataFactoryPipelines({
+      factoryName,
+      resourceGroupName
+    })
+    pipelineOptions.value = pipelineNames.map((pipelineName: string) => ({
+      label: pipelineName,
+      value: pipelineName
+    }))
+    pipelineLoading.value = false
+  }
+
+  const onChange = () => {
+    model['pipelineName'] = ''
+    if (model['factoryName'] && model['resourceGroupName']) {
+      getPipelineName(model['factoryName'], model['resourceGroupName'])
+    }
+  }
+
+  watch(
+    () => model['pipelineName'],
+    () => {
+      if (model['pipelineName'] && pipelineOptions.value.length === 0) {
+        getPipelineName(model['factoryName'], model['resourceGroupName'])
+      }
+    }
+  )
+
+  onMounted(() => {
+    getFactoryOptions()
+    getResourceGroupName()
+  })
+
+  return [
+    {
+      type: 'select',
+      field: 'factoryName',
+      span: 24,
+      name: t('project.node.factory_name'),
+      options: factoryOptions,
+      props: {
+        'on-update:value': onChange,
+        loading: factoryLoading
+      },
+      validate: {
+        trigger: ['input', 'trigger'],
+        required: true,
+        message: t('project.node.factory_tips')
+      }
+    },
+    {
+      type: 'select',
+      field: 'resourceGroupName',
+      span: 24,
+      name: t('project.node.resource_group_name'),
+      options: resourceGroupOptions,
+      props: {
+        'on-update:value': onChange,
+        loading: resourceGroupLoading
+      },
+      validate: {
+        trigger: ['input', 'trigger'],
+        required: true,
+        message: t('project.node.resource_group_tips')
+      }
+    },
+    {
+      type: 'select',
+      field: 'pipelineName',
+      span: 24,
+      name: t('project.node.pipeline_name'),
+      options: pipelineOptions,
+      props: {
+        loading: pipelineLoading
+      },
+      validate: {
+        trigger: ['input', 'trigger'],
+        required: true,
+        message: t('project.node.pipeline_tips')
+      }
+    },
+    ...useCustomParams({
+      model,
+      field: 'localParams',
+      isSimple: true
+    })
+  ]
+}
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
index ea804dc1d7..7d227db0e7 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
@@ -449,13 +449,19 @@ export function formatParams(data: INodeData): {
     taskParams.yamlContent = data.yamlContent
     taskParams.namespace = data.namespace
   }
-  
+
   if (data.taskType === 'LINKIS') {
     taskParams.useCustom = data.useCustom
     taskParams.paramScript = data.paramScript
     taskParams.rawScript = data.rawScript
   }
 
+  if (data.taskType === 'DATA_FACTORY') {
+    taskParams.factoryName = data.factoryName
+    taskParams.resourceGroupName = data.resourceGroupName
+    taskParams.pipelineName = data.pipelineName
+  }
+
   let timeoutNotifyStrategy = ''
   if (data.timeoutNotifyStrategy) {
     if (data.timeoutNotifyStrategy.length === 1) {
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
index 1b6f998b4e..04a3518242 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
@@ -50,6 +50,7 @@ import { useDms } from './use-dms'
 import { useDatasync } from './use-datasync'
 import { useKubeflow } from './use-kubeflow'
 import { useLinkis } from './use-linkis'
+import { useDataFactory } from './use-data-factory'
 
 export default {
   SHELL: useShell,
@@ -86,5 +87,6 @@ export default {
   DMS: useDms,
   DATASYNC: useDatasync,
   KUBEFLOW: useKubeflow,
-  LINKIS: useLinkis
+  LINKIS: useLinkis,
+  DATA_FACTORY: useDataFactory
 }
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-data-factory.ts
 
b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-data-factory.ts
new file mode 100644
index 0000000000..c845fd0246
--- /dev/null
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-data-factory.ts
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { reactive } from 'vue'
+import * as Fields from '../fields/index'
+import type { IJsonItem, INodeData } from '../types'
+import { ITaskData } from '../types'
+
+export function useDataFactory({
+  projectCode,
+  from = 0,
+  readonly,
+  data
+}: {
+  projectCode: number
+  from?: number
+  readonly?: boolean
+  data?: ITaskData
+}) {
+  const model = reactive({
+    name: '',
+    taskType: 'DATA_FACTORY',
+    flag: 'YES',
+    description: '',
+    timeoutFlag: false,
+    localParams: [],
+    environmentCode: null,
+    failRetryInterval: 1,
+    failRetryTimes: 0,
+    workerGroup: 'default',
+    delayTime: 0,
+    timeout: 30,
+    timeoutNotifyStrategy: ['WARN'],
+    factoryName: '',
+    resourceGroupName: '',
+    pipelineName: ''
+  } as INodeData)
+
+  return {
+    json: [
+      Fields.useName(from),
+      ...Fields.useTaskDefinition({ projectCode, from, readonly, data, model 
}),
+      Fields.useRunFlag(),
+      Fields.useCache(),
+      Fields.useDescription(),
+      Fields.useTaskPriority(),
+      Fields.useWorkerGroup(),
+      Fields.useEnvironmentName(model, !data?.id),
+      ...Fields.useTaskGroup(model, projectCode),
+      ...Fields.useFailed(),
+      Fields.useDelayTime(model),
+      ...Fields.useTimeoutAlarm(model),
+      ...Fields.useDataFactory(model),
+      Fields.usePreTasks()
+    ] as IJsonItem[],
+    model
+  }
+}
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts 
b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
index 282948345b..490503aafd 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
@@ -405,6 +405,9 @@ interface ITaskParams {
   cloudWatchLogGroupArn?: string
   yamlContent?: string
   paramScript?: ILocalParam[]
+  factoryName?: string
+  resourceGroupName?: string
+  pipelineName?: string
 }
 
 interface INodeData
diff --git a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts 
b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
index 2606bea240..738892f68b 100644
--- a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
@@ -50,6 +50,7 @@ export type TaskType =
   | 'DATASYNC'
   | 'KUBEFLOW'
   | 'LINKIS'
+  | 'DATA_FACTORY'
 
 export type TaskExecuteType = 'STREAM' | 'BATCH'
 
@@ -180,6 +181,10 @@ export const TASK_TYPES_MAP = {
   LINKIS: {
     alias: 'LINKIS',
     helperLinkDisable: true
+  },
+  DATA_FACTORY: {
+    alias: 'DATA_FACTORY',
+    helperLinkDisable: true
   }
 } as {
   [key in TaskType]: {
diff --git 
a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
 
b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
index 7aa0c9c709..65b7aa0067 100644
--- 
a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
+++ 
b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
@@ -204,6 +204,9 @@ $bgLight: #ffffff;
     &.icon-kubeflow {
       background-image: url('/images/task-icons/kubeflow.png');
     }
+    &.icon-data_factory {
+      background-image: url('/images/task-icons/data_factory.png');
+    }
   }
 
   &:hover {
@@ -311,6 +314,9 @@ $bgLight: #ffffff;
       &.icon-kubeflow {
         background-image: url('/images/task-icons/kubeflow_hover.png');
       }
+      &.icon-data_factory {
+        background-image: url('/images/task-icons/data_factory_hover.png');
+      }
     }
   }
 
diff --git a/tools/dependencies/known-dependencies.txt 
b/tools/dependencies/known-dependencies.txt
index 5e7b64c525..eeb308e7bf 100644
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -399,3 +399,35 @@ reactor-core-3.4.22.jar
 reactor-netty-core-1.0.22.jar
 reactor-netty-http-1.0.22.jar
 DmJdbcDriver18-8.1.2.79.jar
+azure-resourcemanager-2.21.0.jar
+azure-resourcemanager-appplatform-2.21.0.jar
+azure-resourcemanager-appservice-2.21.0.jar
+azure-resourcemanager-authorization-2.21.0.jar
+azure-resourcemanager-cdn-2.21.0.jar
+azure-resourcemanager-compute-2.21.0.jar
+azure-resourcemanager-containerinstance-2.21.0.jar
+azure-resourcemanager-containerregistry-2.21.0.jar
+azure-resourcemanager-containerservice-2.21.0.jar
+azure-resourcemanager-cosmos-2.21.0.jar
+azure-resourcemanager-datafactory-1.0.0-beta.19.jar
+azure-resourcemanager-dns-2.21.0.jar
+azure-resourcemanager-eventhubs-2.21.0.jar
+azure-resourcemanager-keyvault-2.21.0.jar
+azure-resourcemanager-monitor-2.21.0.jar
+azure-resourcemanager-msi-2.21.0.jar
+azure-resourcemanager-network-2.21.0.jar
+azure-resourcemanager-privatedns-2.21.0.jar
+azure-resourcemanager-redis-2.21.0.jar
+azure-resourcemanager-resources-2.21.0.jar
+azure-resourcemanager-search-2.21.0.jar
+azure-resourcemanager-servicebus-2.21.0.jar
+azure-resourcemanager-sql-2.21.0.jar
+azure-resourcemanager-storage-2.21.0.jar
+azure-resourcemanager-trafficmanager-2.21.0.jar
+azure-security-keyvault-keys-4.5.2.jar
+azure-security-keyvault-secrets-4.5.2.jar
+azure-storage-common-12.19.1.jar
+azure-storage-file-share-12.16.1.jar
+nimbus-jose-jwt-9.22.jar
+woodstox-core-6.4.0.jar
+azure-core-management-1.9.0.jar
\ No newline at end of file

Reply via email to