云服务器内容精选

  • 解决方案 本章节介绍如何通过AppStage运维中心完成对业务实时数据的接入、处理、开发与应用。 图1 数据开发与应用流程 数据接入 AppStage运维中心支持接入虚拟机日志和容器日志,您可以根据日志类型选择日志接入方式。 虚拟机日志接入:通过日志配置下发任务部署filebeat,并根据日志采集配置设置,通过filebeat采集虚拟机上的业务日志。 容器日志接入:安装daemonset插件,通过daemonset实现容器日志接入。 (可选)如果需要将原始日志转化为JSON格式,可以在日志接入时选择算子清洗方式对日志数据做清洗,数据清洗如数据清洗说明所示。 数据导流 接入的日志数据存在于对应的Topic中,需要创建导流任务,将数据存储在对应的数据库中才能进行日志检索、日志数据的管理和后续开发。 (可选)数据汇聚:当日志量较大且不需要关注原始日志时可以对实时日志进行日志汇聚。 数据开发 可以使用存入数据库中的数据进行报表开发、实时监控或者异常告警等应用,可以直接写SQL,但是不同数据源写SQL的方式有差异,且有一定难度,AppStage支持使用运维数仓的方式,会自动根据不同数据源生成对应的SQL。 创建逻辑主体:使用运维数仓时首先需要创建逻辑主体。 创建指标:逻辑主体创建成功后,需要创建数据指标。 (可选)创建视图:为需要计算的指标创建查询视图,也可以在查询视图的基础上创建持久化视图或长期存储视图。 数据应用 使用报表对业务进行实时监控:使用运维数仓中的指标或视图创建业务报表,实时监控业务数据。 通过日志检索进行问题定位:日志接入并创建导流任务后,可以对已接入的日志进行检索,定位业务异常问题。 数据异常告警:支持通过异常检测上报告警和配置虚拟机异常告警,根据业务需要进行配置。
  • 数据清洗说明 在做日志接入创建日志空间时可以配置算子清洗策略完成日志数据清洗,如图2所示,算子清洗功能及使用样例请参见算子清洗功能介绍。 图2 算子清洗 清洗规则:选择“算子清洗”。 日志样例:使用典型日志,用来做清洗验证。 解析脚本:配置解析脚本,将日志样例清洗为字段显示。解析脚本中不支持使用中划线,支持使用下划线。 清洗字段:配置解析脚本后单击“配置解析脚本”,自动生成清洗自动,查看字段是否符合预期。
  • 背景信息 随着业务数量增多,业务的数据开发需求也逐渐增多, 数据开发人员不能快速支撑业务的开发需求,了解业务的人员设计和开发业务的数据资产可以使数据发挥最大价值,因此需要业务人员来主导业务的 数据治理 开发工作。 数据治理的核心就是管理好业务的数据资产,随着业务特性和业务复杂度快速增长,面临的不再是无数据的时代,面临的问题是如何在数据世界中获取到准确且有价值的信息,例如同一个指标在不同的应用场景,哪个才是准确的?这么多数据我的业务监控是否都覆盖了?以及是否有无价值和未合理使用的数据等,因此如何有效管理数据资产成了当前重点关注的问题。
  • 使用案例 案例场景 因数据规整要求,需要周期性地将多组 DLI 源数据表数据导入到对应的DLI目的表,如表1所示。 表1 需要导入的列表情况 源数据表名 目的表名 a_new a b_2 b c_3 c d_1 d c_5 e b_1 f 如果通过SQL节点分别执行导入脚本,需要开发大量脚本和节点,导致重复性工作。在这种情况下,我们可以使用For Each节点进行循环作业,节省开发工作量。 配置方法 准备源表和目的表。为了便于后续作业运行验证,需要先创建DLI源数据表和目的表,并给源数据表插入数据。 创建DLI表。您可以在 DataArts Studio 数据开发中,新建DLI SQL脚本执行以下SQL命令,也可以在 数据湖探索 (DLI)服务控制台中的SQL编辑器中执行以下SQL命令: /* 创建数据表 */ CREATE TABLE a_new (name STRING, score INT) STORED AS PARQUET; CREATE TABLE b_2 (name STRING, score INT) STORED AS PARQUET; CREATE TABLE c_3 (name STRING, score INT) STORED AS PARQUET; CREATE TABLE d_1 (name STRING, score INT) STORED AS PARQUET; CREATE TABLE c_5 (name STRING, score INT) STORED AS PARQUET; CREATE TABLE b_1 (name STRING, score INT) STORED AS PARQUET; CREATE TABLE a (name STRING, score INT) STORED AS PARQUET; CREATE TABLE b (name STRING, score INT) STORED AS PARQUET; CREATE TABLE c (name STRING, score INT) STORED AS PARQUET; CREATE TABLE d (name STRING, score INT) STORED AS PARQUET; CREATE TABLE e (name STRING, score INT) STORED AS PARQUET; CREATE TABLE f (name STRING, score INT) STORED AS PARQUET; 给源数据表插入数据。您可以在DataArts Studio数据开发模块中,新建DLI SQL脚本执行以下SQL命令,也可以在 数据湖 探索(DLI)服务控制台中的SQL编辑器中执行以下SQL命令: /* 源数据表插入数据 */ INSERT INTO a_new VALUES ('ZHAO','90'),('QIAN','88'),('SUN','93'); INSERT INTO b_2 VALUES ('LI','94'),('ZHOU','85'); INSERT INTO c_3 VALUES ('WU','79'); INSERT INTO d_1 VALUES ('ZHENG','87'),('WANG','97'); INSERT INTO c_5 VALUES ('FENG','83'); INSERT INTO b_1 VALUES ('CEHN','99'); 准备数据集数据。您可以通过以下方式之一获取数据集: 您可以将表1数据导入到DLI表中,然后将SQL脚本读取的结果作为数据集。 您可以将表1数据保存在OBS的 CS V文件中,然后通过DLI SQL或DWS SQL创建OBS外表关联这个CSV文件,然后将OBS外表查询的结果作为数据集。DLI创建外表请参见OBS输入流,DWS创建外表请参见创建外表。 您可以将表1数据保存在HDFS的CSV文件中,然后通过HIVE SQL创建Hive外表关联这个CSV文件,然后将HIVE外表查询的结果作为数据集。 MRS 创建外表请参见创建表。 本例以方式1进行说明,将表1中的数据导入到DLI表(Table_List)中。您可以在DataArts Studio数据开发模块中,新建DLI SQL脚本执行以下SQL命令导入数据,也可以在数据湖探索(DLI)服务控制台中的SQL编辑器中执行以下SQL命令: /* 创建数据表TABLE_LIST,然后插入表1数据,最后查看生成的表数据 */ CREATE TABLE Table_List (Source STRING, Destination STRING) STORED AS PARQUET; INSERT INTO Table_List VALUES ('a_new','a'),('b_2','b'),('c_3','c'),('d_1','d'),('c_5','e'),('b_1','f'); SELECT * FROM Table_List; 生成的Table_List表数据如下: 图2 Table_List表数据 创建要循环运行的子作业ForeachDemo。在本次操作中,定义循环执行的是一个包含了DLI SQL节点的任务。 进入DataArts Studio数据开发模块选择“作业开发”页面,新建作业ForeachDemo,然后选择DLI SQL节点,编排图3所示的作业。 DLI SQL的语句中把要替换的变量配成${}这种参数的形式。在下面的SQL语句中,所做的操作是把${Source}表中的数据全部导入${Destination}中,${fromTable}、${toTable} 就是要替换的变量参数。SQL语句为: INSERT INTO ${Destination} select * from ${Source}; 此处不能使用EL表达式#{Job.getParam("job_param_name")} ,因为此表达式只能直接获取当前作业里配置的参数的value,并不能获取到父作业传递过来的参数值,也不能获取到工作空间里面配置的全局变量,作用域仅为本作业。 而表达式${job_param_name},既可以获取到父作业传递过来的参数值,也可以获取到全局配置的变量。 图3 循环执行子作业 配置完成SQL语句后,在子作业中配置作业参数。此处仅需要配置参数名,用于主作业ForeachDemo_master中的For Each节点识别子作业参数;参数值无需填写。 图4 配置子作业参数 配置完成后保存作业。 创建For Each节点所在的主作业ForeachDemo_master。 进入DataArts Studio数据开发模块选择“作业开发”页面,新建数据开发主作业ForeachDemo_master。选择DLI SQL节点和For Each节点,选中连线图标并拖动,编排图5所示的作业。 图5 编排作业 配置DLI SQL节点属性,此处配置为SQL语句,语句内容如下所示。DLI SQL节点负责读取DLI表Table_List中的内容作为数据集。 SELECT * FROM Table_List; 图6 DLI SQL节点配置 配置For Each节点属性。 子作业:子作业选择步骤2已经开发完成的子作业“ForeachDemo”。 数据集:数据集就是DLI SQL节点的Select语句的执行结果。使用EL表达式#{Job.getNodeOutput('preDLI')},其中preDLI为前一个节点的名称。 子作业参数:用于将数据集中的数据传递到子作业以供使用。Source对应的是数据集Table_List表的第一列,Destination是第二列,所以配置的EL表达式分别为#{Loop.current[0]}、#{Loop.current[1]}。 图7 配置For Each节点 配置完成后保存作业。 测试运行主作业。 单击主作业画布上方的“测试运行”按钮,测试作业运行情况。主作业运行后,会通过For Each节点自动调用运行子作业。 单击左侧导航栏中的“实例监控”,进入实例监控中查看作业运行情况。等待作业运行成功后,就能查看For Each节点生成的子作业实例,由于数据集中有6行数据,所以这里就对应产生了6个子作业实例。 图8 查看作业实例 查看对应的6个DLI目的表中是否已被插入预期的数据。您可以在DataArts Studio数据开发模块中,新建DLI SQL脚本执行以下SQL命令导入数据,也可以在数据湖探索(DLI)服务控制台中的SQL编辑器中执行以下SQL命令: /* 查看表a数据,其他表数据请修改命令后运行 */ SELECT * FROM a; 将查询到的表数据与给源数据表插入数据步骤中的数据进行对比,可以发现数据插入符合预期。 图9 目的表数据
  • 适用场景 当您进行作业开发时,如果某些任务的参数有差异、但处理逻辑全部一致,在这种情况下您可以通过For Each节点避免重复开发作业。 For Each节点可指定一个子作业循环执行,并通过数据集对子作业中的参数进行循环替换。关键参数如下: 子作业:选择需要循环执行的作业。 数据集:即不同子任务的参数值的集合。可以是给定的数据集,如“[['1'],['3'],['2']]”;也可以是EL表达式如“#{Job.getNodeOutput('preNodeName')}”,即前一个节点的输出值。 子作业参数:参数名即子作业中定义的变量;参数值一般配置为数据集中的某组数据,每次运行中会将参数值传递到子作业以供使用。例如参数值填写为:#{Loop.current[0]},即将数据集中每行数据的第一个数值遍历传递给子作业。 For Each节点举例如图1所示 。从图中可以看出,子作业“foreach”中的参数名为“result”,参数值为一维数组数据集“[['1'],['3'],['2']] ”的遍历(即第一次循环为1,第二次循环为3,第三次循环为2)。 图1 for each节点
  • For Each节点与EL表达式 要想使用好For Each节点,您必须对EL表达式有所了解。EL表达式用法请参考EL表达式。 下面为您展示For Each节点常用的一些EL表达式。 #{Loop.dataArray} :For循环节点输入的数据集,是一个二维数组。 #{Loop.current}:由于For循环节点在处理数据集的时候,是一行一行进行处理的,那Loop.current就表示当前处理到的某行数据,Loop.current是一个一维数组,一般定义格式为#{Loop.current[0]}、#{Loop.current[1]}或其他,0表示遍历到当前行的第一个值。 #{Loop.offset}:For循环节点在处理数据集时当前的偏移量,从0开始。 #{Job.getNodeOutput('preNodeName')}:获取前面节点的输出。
  • 约束与限制 仅当前工作空间的管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户,可新建、修改和删除审批人。 审批人必须为当前工作空间管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户。 当前工作空间为企业模式时,通过任务发布方式进行单据的审批操作,不支持提交脚本或者作业进行审批。 开启审批功能时,相关API的请求体需要增加审批人属性,具体见作业开发API。 审批开关的配置、作业和脚本的审批只能在前台界面进行操作。 有实时Pipeline作业的情况下,不允许打开审批开关。 审批开关打开后,审批中心功能对审批人和单据提交人都可见。审批开关关闭时,仅当前工作空间的管理员或者拥有DAYU Administrator、Tenant Administrator权限的用户可以看到审批中心功能,其他用户不可见。
  • 数据湖准备 在本示例中,选择数据湖探索(DLI)服务作为数据底座。为确保DataArts Studio与DLI网络互通,在创建DLI队列时区域和企业项目应与DataArts Studio实例保持一致。 当前由于DLI的“default”队列默认Spark组件版本较低,可能会出现无法支持建表语句执行的报错,这种情况下建议您选择自建队列运行业务。如需“default”队列支持建表语句执行,可联系DLI服务客服或技术支持人员协助解决。 DLI的“default”队列为共享队列,仅用于用户体验,用户间可能会出现抢占资源的情况,不能保证每次都可以得到资源执行相关操作。当遇到执行时间较长或无法执行的情况,建议您在业务低峰期再次重试,或选择自建队列运行业务。 开通DLI服务后,您需要在管理中心创建DLI连接,然后通过数据开发组件新建数据库,再执行SQL来创建OBS外表。操作步骤如下: 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。 在DataArts Studio控制台首页,选择对应工作空间的“管理中心”模块,进入管理中心页面。 在“数据连接”页面,单击“创建数据连接”按钮。 图1 数据连接 创建一个到DLI的连接,数据连接类型选择“数据湖探索(DLI)”,数据连接名称设置为“dli”。 完成设置后,单击“测试”,测试成功后单击“确定”,完成DLI数据连接的创建。 图2 创建数据连接 DLI连接创建完成后,跳转到数据开发页面。 图3 跳转到数据开发页面 参见图4,在DLI连接上右键单击,创建一个数据库用于存放数据表,数据库名称为“BI”。 图4 创建数据库 创建一个DLI SQL脚本,以通过DLI SQL语句来创建数据表。 图5 新建脚本 在新建脚本弹出的SQL编辑器中输入如下SQL语句,并单击“运行”来创建数据表。其中,user、product、comment、action为OBS外表,使用指定OBS路径中的CSV文件来填充数据,用于存放原始数据;top_like_product和top_bad_comment_product为DLI表,用于存放分析结果。 create table user( user_id int, age int, gender int, rank int, register_time string ) USING csv OPTIONS (path "obs://fast-demo/user_data"); create table product( product_id int, a1 int, a2 int, a3 int, category int, brand int ) USING csv OPTIONS (path "obs://fast-demo/product_data"); create table comment( deadline string, product_id int, comment_num int, has_bad_comment int, bad_comment_rate float ) USING csv OPTIONS (path "obs://fast-demo/comment_data"); create table action( user_id int, product_id int, time string, model_id string, type string ) USING csv OPTIONS (path "obs://fast-demo/action_data"); create table top_like_product(brand int, like_count int); create table top_bad_comment_product(product_id int, comment_num int, bad_comment_rate float); 图6 创建数据表 关键参数说明: 数据连接:步骤4中创建的DLI数据连接。 数据库:步骤6中创建的数据库。 资源队列:可使用提供的默认资源队列“default”。 当前由于DLI的“default”队列默认Spark组件版本较低,可能会出现无法支持建表语句执行的报错,这种情况下建议您选择自建队列运行业务。如需“default”队列支持建表语句执行,可联系DLI服务客服或技术支持人员协助解决。 DLI的“default”队列为共享队列,仅用于用户体验,用户间可能会出现抢占资源的情况,不能保证每次都可以得到资源执行相关操作。当遇到执行时间较长或无法执行的情况,建议您在业务低峰期再次重试,或选择自建队列运行业务。 脚本运行成功后,可以通过如下脚本检查数据表是否创建成功。 SHOW TABLES; 确认数据表创建成功后,该脚本后续无需使用,可直接关闭。
  • 约束限制 在使用分区管理功能时,需要满足如下约束: 不支持在小型机、加速集群、单机集群上使用。 支持在8.1.3及以上集群版本中使用。 仅支持行存范围分区表、列存范围分区表、时序表以及冷热表。 分区键唯一且类型仅支持timestamp、timestamptz、date类型。 不支持存在maxvalue分区。 (nowTime - boundaryTime) / period需要小于分区个数上限,其中nowTime为当前时间,boundaryTime为现有分区中最早的分区边界时间。 period、ttl取值范围为1hour ~ 100years。另外,在兼容Teradata或MySQL的数据库中,分区键类型为date时,period不能小于1day。 表级参数ttl不支持单独存在,必须要提前或同时设置period,并且要大于或等于period。 集群在线扩容期间,自动增加分区会失败,但是由于每次增分区时,都预留了足够的分区,所以不影响使用。
  • 分区自动管理 分区管理功能是和表级参数period、ttl绑定的,只要成功设置了表级参数period,即开启了自动创建新分区功能;成功设置了表级参数ttl,即开启了自动删除过期分区功能。第一次自动创建分区或删除分区的时间为设置period或ttl后30秒。 有如下两种开启分区管理功能的方式: 建表时指定period、ttl。 该方式适用于新建分区管理表时使用。新建分区管理表有两种语法:一种是建表时指定分区,另一种是建表时不指定分区。 建分区管理表时如果指定分区,则语法规则和建普通分区表相同,唯一的区别就是会指定表级参数period、ttl。 示例:创建分区管理表CPU1,指定分区。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE CPU1( id integer, IP text, time timestamp ) with (TTL='7 days',PERIOD='1 day') partition by range(time) ( PARTITION P1 VALUES LESS THAN('2023-02-13 16:32:45'), PARTITION P2 VALUES LESS THAN('2023-02-15 16:48:12') ); 建分区管理表时可以只指定分区键不指定分区,此时将创建两个默认分区,这两个默认分区的分区时间范围均为period。其中,第一个默认分区的边界时间是大于当前时间的第一个整时/整天/整周/整月/整年的时间,具体选择哪种整点时间取决于period的最大单位;第二个默认分区的边界时间是第一个分区边界时间加period。假设当前时间是2023-02-17 16:32:45,各种情况的第一个默认分区的分区边界选择如下表: 表2 period参数说明 period period最大单位 第一个默认分区的分区边界 1hour Hour 2023-02-17 17:00:00 1day Day 2023-02-18 00:00:00 1month Month 2023-03-01 00:00:00 13months Year 2024-01-01 00:00:00 创建分区管理表CPU2,不指定分区: 1 2 3 4 5 6 CREATE TABLE CPU2( id integer, IP text, time timestamp ) with (TTL='7 days',PERIOD='1 day') partition by range(time); 使用ALTER TABLE RESET的方式设置period、ttl。 该方式适用于给一张满足分区管理约束的普通分区表增加分区管理功能。 创建普通分区表CPU3: 1 2 3 4 5 6 7 8 9 10 CREATE TABLE CPU3( id integer, IP text, time timestamp ) partition by range(time) ( PARTITION P1 VALUES LESS THAN('2023-02-14 16:32:45'), PARTITION P2 VALUES LESS THAN('2023-02-15 16:56:12') ); 同时开启自动创建和自动删除分区功能: 1 ALTER TABLE CPU3 SET (PERIOD='1 day',TTL='7 days'); 只开启自动创建分区功能: 1 ALTER TABLE CPU3 SET (PERIOD='1 day'); 只开启自动删除分区功能,如果没有提前开启自动创建分区功能,则开启失败: 1 ALTER TABLE CPU3 SET (TTL='7 days'); 通过修改period和ttl修改分区管理功能: 1 ALTER TABLE CPU3 SET (TTL='10 days',PERIOD='2 days'); 关闭分区管理功能。 使用ALTER TABLE RESET语句可以删除表级参数period、ttl,即可关闭相应的分区管理功能。 不能在存在ttl的情况下,单独删除period。 时序表不支持ALTER TABLE RESET。 同时关闭自动创建和自动删除分区功能: 1 ALTER TABLE CPU1 RESET (PERIOD,TTL); 只关闭自动删除分区功能: 1 ALTER TABLE CPU3 RESET (TTL); 只关闭自动创建分区功能,如果该表有ttl参数,则关闭失败: 1 ALTER TABLE CPU3 RESET (PERIOD);
  • 方案说明 DataArts Studio数据开发模块支持以事件触发的方式运行作业,因此通过DIS或者MRS Kafka作为作业依赖纽带,可以跨空间实现作业调度。 如下图,工作空间A中的job1运行完成后,可以使用DIS Client或Kafka Client发送消息触发中继作业job_agent;job_agent配置事件触发调度,根据DIS Client或Kafka Client发送的消息触发运行后,判断消息是否符合预期,符合则触发job2作业运行,否则不再触发job2运行。 图1 调度方案
  • 配置方法(Kafka Client) 登录DataArts Studio控制台,找到所需要的DataArts Studio实例,单击实例卡片上的“进入控制台”,进入概览页面。 单击第一个工作空间A的“数据开发”,系统跳转至数据开发页面,新建数据开发作业job1。分别选择Dummy节点和Kafka Client节点,选中连线图标并拖动,编排如图7所示的作业。 Dummy节点不执行任何操作,本例选择Dummy节点仅为演示操作,实际使用中您可以用其他作业节点替代。 Kafka Client节点用于发送消息。您需要选择Kafka连接和Topic名称,并将发送数据配置为EL表达式job1,#{DateUtil.getDay(Job.startTime)}。则当本作业执行完成后,将使用Kafka Client发送一条字符串消息:job1,作业执行日期。例如2月15日作业job1执行,实际的消息则为:job1,15。 作业调度等其他作业参数无需配置,保持默认即可。 图7 job1作业Kafka Client节点配置 在另一个工作空间B,新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点,选中连线图标并拖动,编排图8所示的作业。 图8 job_agent作业调度配置 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日时,才执行后续的作业节点。 如果您需要匹配多条消息记录,可以添加多个Dummy节点并分别添加到Subjob节点的IF条件,然后将数据开发组件配置项中的“多IF策略”设置为“逻辑或”即可。 图9 编辑参数表达式 测试运行作业job_agent,在工作空间A的作业job1未运行的情况下,前往实例监控中查看执行结果是否符合预期。 由于作业job1未运行即未发送消息,则job_agent作业中的Subjob节点被跳过,证明IF条件判断生效。 图10 Subjob节点被跳过 启动调度job_agent。然后测试运行工作空间A作业job1,待job1实例运行成功后,前往工作空间B实例监控中查看作业运行结果是否符合预期。 job_agent被触发运行。 如果当天日期和IF条件中的日期匹配,则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。 图11 Subjob节点成功运行
  • 配置方法(DIS Client) 登录DataArts Studio控制台,找到所需要的DataArts Studio实例,单击实例卡片上的“进入控制台”,进入概览页面。 单击第一个工作空间A的“数据开发”,系统跳转至数据开发页面,新建数据开发作业job1。分别选择Dummy节点和DIS Client节点,选中连线图标并拖动,编排如图2所示的作业。 Dummy节点不执行任何操作,本例选择Dummy节点仅为演示操作,实际使用中您可以用其他作业节点替代。 DIS Client节点用于发送消息。您需要选择DIS所属Region和通道,并将发送数据配置为EL表达式job1,#{DateUtil.getDay(Job.startTime)}。则当本作业执行完成后,将使用DIS Client发送一条字符串消息:job1,作业执行日期。例如2月15日作业job1执行,实际的消息则为:job1,15。 作业调度等其他作业参数无需配置,保持默认即可。 图2 job1作业DIS Client节点配置 在另一个工作空间B,新建数据开发作业job_agent。分别选择Dummy节点和Subjob节点,选中连线图标并拖动,编排图3所示的作业。 图3 job_agent作业调度配置 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日时,才执行后续的作业节点。 如果您需要匹配多条消息记录,可以添加多个Dummy节点并分别添加到Subjob节点的IF条件,然后将数据开发组件配置项中的“多IF策略”设置为“逻辑或”即可。 图4 编辑参数表达式 测试运行作业job_agent,在工作空间A的作业job1未运行的情况下,前往实例监控中查看执行结果是否符合预期。 由于作业job1未运行即未发送消息,则job_agent作业中的Subjob节点被跳过,证明IF条件判断生效。 图5 Subjob节点被跳过 启动调度job_agent。然后测试运行工作空间A作业job1,待job1实例运行成功后,前往工作空间B实例监控中查看作业运行结果是否符合预期。 job_agent被触发运行。 如果当天日期和IF条件中的日期匹配,则job_agent作业中的Subjob节点成功运行、子作业job2也执行完成。否则Subjob节点被跳过。 图6 Subjob节点成功运行
  • 数据开发的主要功能 表1 数据开发的主要功能 支持的功能 说明 数据管理 支持管理DWS、DLI、MRS Hive等多种 数据仓库 。 支持可视化和DDL方式管理数据库表。 脚本开发 提供在线脚本编辑器,支持多人协作进行SQL、Shell、Python脚本在线代码开发和调测。 支持使用变量和函数。 作业开发 提供图形化设计器,支持拖拉拽方式快速构建数据处理工作流。 预设数据集成、SQL、Shell等多种任务类型,通过任务间依赖完成复杂数据分析处理。 支持导入和导出作业。 资源管理 支持统一管理在脚本开发和作业开发使用到的file、jar、archive类型的资源。 作业调度 支持单次调度、周期调度和事件驱动调度,周期调度支持分钟、小时、天、周、月多种调度周期。调度周期配置为小时,系统支持按间隔小时和离散小时配置调度周期。 运维监控 支持对作业进行运行、暂停、恢复、终止等多种操作。 支持查看作业和其内各任务节点的运行详情。 支持配置多种方式报警,作业和任务发生错误时可及时通知相关人,保证业务正常运行。
  • 数据开发中的对象 数据连接:定义访问数据实体存储(计算)空间所需信息的集合,包括连接类型、名称和登录信息等。 解决方案:解决方案为用户提供便捷的、系统的方式管理作业,更好地实现业务需求和目标。每个解决方案可以包含一个或多个业务相关的作业,一个作业可以被多个解决方案复用。 作业:作业由一个或多个节点组成,执行作业可以完成对数据的一系列操作。 脚本:脚本(Script)是一种批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。 节点:定义对数据执行的操作。 资源:用户可以上传自定义的代码或文本文件作为资源,以便在节点运行时调用。 表达式:数据开发作业中的节点参数可以使用表达式语言(Expression Language,简称EL),根据运行环境动态生成参数值。数据开发EL表达式包含简单的算术和逻辑计算,引用内嵌对象,包括作业对象和一些工具类对象。 环境变量:环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所使用到的信息。 补数据:手工触发周期方式调度的作业任务,生成某时间段内的实例。