DataWorks提供任务搬站功能,支持将Oozie、Azkaban、Airflow、DolphinScheduler等开源调度引擎的任务快速迁移至DataWorks。本文为您介绍导出任务的文件要求等相关信息。
背景信息
您需要先导出开源调度引擎的任务至本地或OSS,再导入至DataWorks。导入的详情请参见导入开源引擎任务。
使用限制
导出Airflow任务仅支持Airflow 1.10.x,且依赖Python 3.6及以上版本。
导出Oozie任务
导出要求
导出的文件需包含XML和配置项等信息,导出后即为一个Zip格式文件。
导出结构
Oozie的任务描述在HDFS的某个Path下。以Oozie官方的Examples为例,Examples包中的apps目录下,每个子目录都是一个Oozie的Workflow Job。该子目录包含Workflow的定义XML和配置项等信息。导出文件的结构如下。
导出Azkaban任务
下载工作流
Azkaban拥有自己的Web控制台,支持在界面下载某个工作流(Flow)。
登录Azkaban控制台的Projects页面。
进入相应的Project页面,单击Flows,为您展示该Project下所有的工作流。
单击页面右上方的Download,下载Project的导出文件。
Azkaban导出包的格式无特别限制,是原生Azkaban即可。导出的Zip文件包含Azkaban的某个Project下所有任务(Job)及其关系的信息。Azkaban页面导出的Zip文件可直接在调度引擎作业导入页面上传导入。
转换逻辑
Azkaban与DataWorks转换项的对应关系及逻辑说明如下。
Azkaban转换项 | DataWorks转换项 | 说明 |
Flow | 数据开发(DataStudio)的业务流程 | Flow里的Job作为节点会放至Flow对应的业务流程目录下。 嵌套Flow的内部Flow也会单独转换为一个业务流程,通过Flow转换后的业务流程会自动建立节点间的依赖关系。 |
Command类型的Job | Shell节点 | 若使用DataWorks on EMR模式,则转换为EMR SHELL节点。可在导入任务的高级设置进行配置。 若Command命令行调用其他脚本,会自动分析具体是哪个脚本文件。分析到的脚本文件会注册为DataWorks的资源文件,转换后的Shell代码里会引用该资源文件。 |
Hive类型的Job | EMR_HIVE节点 | 若使用DataWorks on MaxCompute模式,则转换为ODPS SQL节点。可在导入任务的高级设置进行配置。 |
其他DataWorks不支持的节点 | 虚拟节点或Shell节点 | 可在导入任务的高级设置进行配置。 |
导出Airflow任务
操作步骤
进入Airflow的执行环境。
使用Airflow的Python库,加载在Airflow上调度的Dag Folder。Dag Folder为您的Dag Python文件所在的目录。
使用导出工具,在内存中通过Airflow的Python库读取Dag Python文件的内部任务信息及其依赖关系,将生成的Dag信息写入JSON文件进行导出。
您可进入DataWorks的进入引擎作业导出。
页面,下载导出工具。进入调度引擎作业导出的步骤请参考
工具操作说明
导出工具操作说明如下:
使用如下语句解压airflow-exporter.tgz。
tar zxvf airflow-exporter.tgz
设置PYTHONPATH为Airflow的Python lib目录。示例语句如下。
export PYTHONPATH=/usr/local/lib/python3.6/site-packages
导出Airflow任务。示例语句如下。
cd airflow-exporter python3.6 ./parser -d /path/to/airflow/dag/floder/ -o output.json
使用如下语句,将导出的output.json文件生成Zip文件。
zip out.zip output.json
Zip文件生成后,您可进入DataWorks导入开源引擎任务。
页面导入任务,详情请参见导出DolphinScheduler任务
原理介绍
DataWorks导出工具通过调用DolphinScheduler的批量导出工作流来定义API信息,获取DolphinScheduler工作流定义的JSON配置,生成一个Zip格式的文件。后续可在调度引擎作业导入页面,新建DolphinScheduler类型的导入任务,导入Zip文件并进行解析和转换,将DolphinScheduler工作流任务的代码、依赖关系转换为合适的DataWorks任务文件配置。
的使用限制
版本限制:支持使用1.3.x、2.x、3.x版本的DolphinScheduler导出DolphinScheduler任务。
转换限制:
SQL任务:仅支持转换部分引擎的SQL节点,具体请以实际使用为准。并且转换过程中SQL代码不做语法转换、不进行修改。
Cron表达式:部分场景存在表达式剪裁或表达式功能不支持等情况,您需自行检查调度配置的定时时间是否满足要求。调度时间介绍,详情请参见时间属性配置说明。
Python节点:DataWorks没有单独的Python节点,Python节点目前是转换为Python文件资源和一个调用该Python资源的Shell节点,调度参数传递可能存在问题,您需自行调试检查。调度参数介绍,详情请参见调度参数配置。
Depend节点:暂不支持转换跨周期依赖。定义的依赖属性转换为DataWorks同周期调度依赖的本节点输入、本节点输出。同周期依赖配置,详情请参见配置同周期调度依赖。
转换逻辑说明
DolphinScheduler与DataWorks转换项的对应关系及逻辑说明如下。
DolphinScheduler转换项 | DataWorks转换项 | 说明 |
工作流定义(Process) | 工作流内部的节点转换为DataWorks业务流程中的节点。同时,转换为业务流程后,会自动添加Start和End虚拟节点,作为业务流程内子节点的起始和结束节点。 | |
SubProcess节点 |
| |
Conditions节点 | Conditions节点的依赖配置中,每一个依赖项和条件关系会转换为DataWorks的一个归并节点(Join)及相关逻辑。Conditions节点依赖配置的最外层逻辑关系会使用两个归并节点(Join)来判断是采用Success还是Failure路径处理。 说明 Conditions依赖配置的跨周期依赖暂不支持转换。若存在跨周期依赖,则会将其转换为DataWorks的同周期依赖关系。 | |
Depend节点 | Depend节点的依赖关系会转换为虚拟节点调度配置中的本节点输入。本节点输入的拼接规则如下:
| |
SQL Task | 目前支持映射为如下引擎的SQL类型节点:
| 具体映射为哪种引擎节点,可在导入任务的高级设置进行配置。 说明 SQL代码不做语法转换、不进行修改。 |
Python节点 | Python文件资源与调用该资源的Shell节点。 | 该过程调度参数传递可能会存在问题,您需自行调试检查。调度参数介绍,详情请参见调度参数配置。 |
MR | 具体映射为哪种引擎节点,可在导入任务的高级设置进行配置。 | |
Spark |
| 具体映射为哪种引擎节点,可在导入任务的高级设置进行配置。 |
Sqoop | 脚本模式的数据集成离线同步任务。 | 同步任务的来源和去向数据源,请以实际使用为准。脚本模式同步任务配置详情,请参见通过脚本模式配置离线同步任务。 |
其他DataWorks不支持的节点 | 虚拟节点 | 无 |
环境准备
依赖设置:您需使用1.8及以上JDK版本;2.7及以上Python版本。
导出操作
解压导出工具。
使用如下语句解压导出工具。
$ tar xzvf migrationx-reader.zip $ cd migrationx-reader/
创建DolphinScheduler生产API的调用令牌。
创建详情,请参见DolphinScheduler帮助文档。
导出文件。
执行如下命令导出所需文件。
$ python ./bin/reader.py -a dolphinscheduler -e http://dolphinschedulerhost:port -t token -v 1.3.9 -p project_name -f ds_dump.zip
Zip文件导出后,您可在调度引擎作业导入页面,新建DolphinScheduler类型的导入任务,导入Zip文件并进行解析和转换,将DolphinScheduler工作流任务的代码、依赖关系转换为合适的DataWorks任务文件配置,完成任务上云。
的导出其它开源引擎任务
DataWorks为您提供标准模板便于导出除Oozie、Azkaban、Airflow、DolphinScheduler外的开源引擎任务。导出任务前,您需要下载标准格式模板并参考模板的文件结构修改内容。下载模板及目录结构的介绍请进入开源引擎导出页面进行查询:
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
单击左上方的图标,选择 。
在左侧导航栏,单击 ,进入调度引擎导出方案选择页面。
单击标准模板。
在标准模板页签下,单击标准格式模板进行下载。
根据模板中的格式修改内容后,即可生成导出包。