
# 跨空间进行作业调度
#### 适用场景
当您已按照工作空间划分权限，不同空间用户只能操作本空间的作业。但是不同的工作空间之间的作业如果存在依赖关系，可参见本教程操作实现跨空间作业调度。
#### 方案说明
DataArts Studio数据开发模块支持以事件触发的方式运行作业，因此通过DIS或者MRS Kafka作为作业依赖纽带，可以跨空间实现作业调度。
如下图，工作空间A中的job1运行完成后，可以使用DIS Client或Kafka Client发送消息触发中继作业job_agent；job_agent配置事件触发调度，根据DIS Client或Kafka Client发送的消息触发运行后，判断消息是否符合预期，符合则触发job2作业运行，否则不再触发job2运行。
图1调度方案   
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001475191108.png "点击放大")
#### 前提条件
以下条件满足其一即可：
- 已具备DIS通道。
- 已具备MRS服务Kafka组件，并已分别在工作空间A和B的管理中心组件内，创建MRS Kafka连接。
 
#### 配置方法（DIS Client）
1. 登录DataArts Studio控制台，找到所需要的DataArts Studio实例，单击实例卡片上的"进入控制台"，进入概览页面。
2. 单击第一个工作空间A的"数据开发"，系统跳转至数据开发页面，新建数据开发作业job1。分别选择Dummy节点和DIS Client节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001525815833.png)并拖动，编排如[图2]所示的作业。
   
   - Dummy节点不执行任何操作，本例选择Dummy节点仅为演示操作，实际使用中您可以用其他作业节点替代。
   
   - DIS Client节点用于发送消息。您需要选择DIS所属Region和通道，并将发送数据配置为EL表达式**job1,#{DateUtil.getDay(Job.startTime)}** 。则当本作业执行完成后，将使用DIS Client发送一条字符串消息：job1,***作业执行日期*** 。例如2月15日作业job1执行，实际的消息则为：**job1,15**。
   
   - 作业调度等其他作业参数无需配置，保持默认即可。
   
   
   图2job1作业DIS Client节点配置   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001525752241.png "点击放大")
   
   
   
3. 在另一个工作空间B，新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001475215570.png)并拖动，编排[图3]所示的作业。
   
   图3job_agent作业调度配置   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001474833702.png "点击放大")
   - Dummy节点不执行任何操作，本例选择Dummy节点用于设置Dummy节点到Subjob节点之间连线的IF条件。
   
   - Subjob节点用于将需要后续执行的作业job2作为子作业引用执行。实际使用中您可以引用已有作业，也可以使用其他作业节点替代Subjob节点。
    
   - 作业的调度方式设置为"事件驱动调度"，DIS通道名称选择为工作空间A中job1作业中DIS Client节点所选择的通道，用于通过DIS消息触发作业运行。
   
   - IF判断条件设置，用于校验DIS Client节点发送的消息是否符合预期，符合才会继续执行Subjob节点，否则跳过。
     右键单击连线，选择"设置条件"，在弹出的"编辑参数表达式"文本框中输入IF判断条件，失败策略保持默认即可。IF判断条件为通过EL表达式语法填写三元表达式，当三元表达式结果为true的时候，才会执行连线后面的节点，否则后续节点将被跳过。
     ```
     #{StringUtil.equals(StringUtil.split(Job.eventData,',')[1],'21')}
     ```
     该IF判断条件表示，仅当从DIS通道获取的消息逗号后的部分为"21"时，即每月21日时，才执行后续的作业节点。
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     如果您需要匹配多条消息记录，可以添加多个Dummy节点并分别添加到Subjob节点的IF条件，然后将数据开发组件配置项中的"多IF策略"设置为"逻辑或"即可。
     图4编辑参数表达式   
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001474875808.png "点击放大")
     
     
   
   
   
   
4. 测试运行作业job_agent，在工作空间A的作业job1未运行的情况下，前往实例监控中查看执行结果是否符合预期。 
   由于作业job1未运行即未发送消息，则job_agent作业中的Subjob节点被跳过，证明IF条件判断生效。
   图5Subjob节点被跳过   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001476868388.png "点击放大")
   
   
   
5. 启动调度job_agent。然后测试运行工作空间A作业job1，待job1实例运行成功后，前往工作空间B实例监控中查看作业运行结果是否符合预期。 
   - job_agent被触发运行。
   
   - 如果当天日期和IF条件中的日期匹配，则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。
     图6Subjob节点成功运行   
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001477188020.png "点击放大")
     
     
   
   
   
   
 
#### 配置方法（Kafka Client）
1. 登录DataArts Studio控制台，找到所需要的DataArts Studio实例，单击实例卡片上的"进入控制台"，进入概览页面。
2. 单击第一个工作空间A的"数据开发"，系统跳转至数据开发页面，新建数据开发作业job1。分别选择Dummy节点和Kafka Client节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001475833852.png)并拖动，编排如[图7]所示的作业。
   
   - Dummy节点不执行任何操作，本例选择Dummy节点仅为演示操作，实际使用中您可以用其他作业节点替代。
   
   - Kafka Client节点用于发送消息。您需要选择Kafka连接和Topic名称，并将发送数据配置为EL表达式**job1,#{DateUtil.getDay(Job.startTime)}** 。则当本作业执行完成后，将使用Kafka Client发送一条字符串消息：job1,***作业执行日期*** 。例如2月15日作业job1执行，实际的消息则为：**job1,15**。
   
   - 作业调度等其他作业参数无需配置，保持默认即可。
   
   
   图7job1作业Kafka Client节点配置   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001525971137.png "点击放大")
   
   
   
3. 在另一个工作空间B，新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点，选中连线图标![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001475375374.png)并拖动，编排[图8]所示的作业。
   
   图8job_agent作业调度配置   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001526131837.png "点击放大")
   - Dummy节点不执行任何操作，本例选择Dummy节点用于设置Dummy节点到Subjob节点之间连线的IF条件。
   
   - Subjob节点用于将需要后续执行的作业job2作为子作业引用执行。实际使用中您可以引用已有作业，也可以使用其他作业节点替代Subjob节点。
    
   - 作业的调度方式设置为"事件驱动调度"，连接名称和Topic选择为工作空间B中的Kafka连接和Topic，需要与工作空间A中job1作业中Kafka Client节点所选择的Kafka连接和Topic相对应，用于通过Kafka消息触发作业运行。
   
   - IF判断条件设置，用于校验Kafka Client节点发送的消息是否符合预期，符合才会继续执行Subjob节点，否则跳过。
     右键单击连线，选择"设置条件"，在弹出的"编辑参数表达式"文本框中输入IF判断条件，失败策略保持默认即可。IF判断条件为通过EL表达式语法填写三元表达式，当三元表达式结果为true的时候，才会执行连线后面的节点，否则后续节点将被跳过。
     ```
     #{StringUtil.equals(StringUtil.split(Job.eventData,',')[1],'21')}
     ```
     该IF判断条件表示，仅当从Kafka通道获取的消息逗号后的部分为"21"时，即每月21日时，才执行后续的作业节点。
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     如果您需要匹配多条消息记录，可以添加多个Dummy节点并分别添加到Subjob节点的IF条件，然后将数据开发组件配置项中的"多IF策略"设置为"逻辑或"即可。
     图9编辑参数表达式   
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001475055590.png "点击放大")
     
     
   
   
   
   
4. 测试运行作业job_agent，在工作空间A的作业job1未运行的情况下，前往实例监控中查看执行结果是否符合预期。 
   由于作业job1未运行即未发送消息，则job_agent作业中的Subjob节点被跳过，证明IF条件判断生效。
   图10Subjob节点被跳过   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001476868388.png "点击放大")
   
   
   
5. 启动调度job_agent。然后测试运行工作空间A作业job1，待job1实例运行成功后，前往工作空间B实例监控中查看作业运行结果是否符合预期。 
   - job_agent被触发运行。
   
   - 如果当天日期和IF条件中的日期匹配，则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。
     图11Subjob节点成功运行   
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001477188020.png "点击放大")
     
     
   
   
   
   
 
