华为云用户手册

  • 离散小时调度 场景一:离散小时依赖月、周、天 ,或者月、周、天依赖离散小时, 这六种依赖,依赖的时间范围都是依赖自然天内的所有作业实例。 表1 离散小时调度依赖逻辑一 场景 依赖处理逻辑 离散小时依赖月 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天是每月3号, 作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。 示例二:作业是A离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天不是每月的3号,即今天没有作业B的实例,则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。 月依赖离散小时 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。B依赖A,当作业B在每月3号调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 离散小时依赖周 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天是每周星期一,作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后, 才会执行作业A的实例。 示例二:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天不是星期一,即今天没有作业B的实例, 则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。 周依赖离散小时 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。B依赖A,当作业B在星期一调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 离散小时依赖天 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。A依赖B,则作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。 天依赖离散小时 依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。 示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。B依赖A,则作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。 场景二:离散小时依赖小时、分钟、离散小时, 或者小时、分钟依赖离散小时,依赖都遵循如下规则。 规则一:自然天内,依赖关系中的上游、下游任务数量一致,则上游、下游一对一依赖。 解释:例如作业A依赖作业B,作业A是离散小时调度,每天3/6/8点运行,则作业A一天内有3个实例;作业B小时作业,间隔8小时调度一次,每天0点、8点、16点调度,则作业B一天也是3个实例。 上游作业B与下游作业A在一天内,都是3个实例,则作业A与作业B一对一依赖。 所以作业A与作业B的依赖情况为: 作业A在3点的实例,依赖作业B在0点的实例;作业A在6点的实例,依赖作业B在8点的实例;作业A在8点的实例,依赖作业B在 16点的实例。 规则二:自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将会根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。 先向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。 通过图表进一步进行原理解释: “先向前找上游依赖实例,依赖上游一整个区间内的实例” 解释如下: 图1 先向前找上游依赖实例,依赖上游一整个区间内的实例 “向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例” 解释如下: 图2 向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例 表2 离散小时调度依赖逻辑二 场景 依赖处理逻辑 离散小时依赖小时 依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,小时作业B,作业A依赖作业B。 当离散小时作业A、小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 小时依赖离散小时 依赖时间段范围是[当天的零点,下一天的零点) ,小时作业A,离散小时作业B,作业A依赖作业B。 当小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 离散小时依赖分钟 依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,分钟作业B,作业A依赖作业B。 当离散小时作业A、分钟作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、分钟作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 分钟依赖离散小时 依赖时间段范围是[当天的零点,下一天的零点) ,分钟作业A,离散小时作业B,作业A依赖作业B。 当分钟作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当分钟作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。 离散小时依赖离散小时 依赖时间段范围是[当天的零点, 下一天的零点) ,离散小时作业A,离散小时作业B,作业A依赖作业B。 当离散小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖; 当离散小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。
  • 最近依赖调度 最近依赖调度,是在自然周期调度的基础上,对于天依赖小时、天依赖分钟、小时依赖分钟这三种依赖场景,支持选择依赖最近的作业实例。 表3 最近依赖调度 场景 依赖处理逻辑 天依赖小时(勾选最近依赖) 依赖时间段范围是[当天的零点,下一天的零点) ,不可跨天。 示例一:天作业A每天8点调度;小时作业B每小时15分钟开始调度。则天作业A依赖最近的小时作业实例,即依赖7点15分的小时作业实例。 示例二:天作业A每天0点30分调度;小时作业B每小时40分钟开始调度。因为天作业前面没有小时任务,则天任务不依赖任何小时任务,直接运行。 天依赖分钟(勾选最近依赖) 依赖时间段范围是[当天的零点, 下一天的零点) ,不可跨天。 小时依赖分钟(勾选最近依赖) 往前找到最近的分钟任务,挂载依赖。 示例:小时作业A每小时15分钟开始调度;分钟作业B从凌晨一点开始每15分钟调度一次。则小时作业A在0点15分的实例,依赖分钟作业B在昨天23点45分的实例;小时作业A在1点15分的实例,依赖分钟作业B在1点15分的实例。
  • 通过For Each节点提取输出结果值 场景说明 结合For Each节点及其支持的Loop内嵌对象EL表达式#{Loop.current[0]},循环获取前一节点输出的结果值。 本例中, MRS Hive SQL节点返回多字段的二维数组,选择For Each节点和EL表达式#{Loop.current[]},再通过For Each循环调用Kafka Client节点子作业,Kafka Client节点发送的数据也定义为#{Loop.current[]},通过此配置即可获取MRS Hive SQL节点输出的结果值。 为便于查看最终获得的结果值,本例中For Each节点子作业选择Kafka Client节点进行演示。在实际使用中,您可以根据您的业务需求选择子作业节点类型,在节点任务中应用Loop内嵌对象EL表达式,即可获取For Each前一节点返回的结果值。 For Each节点主作业编排如图5所示。其中,For Each节点的关键配置如下: 数据集:数据集就是HIVE SQL节点的Select语句的执行结果。使用EL表达式#{Job.getNodeOutput("select95")},其中select95为前一个节点的名称。 子作业参数:子作业参数是子作业中定义的参数名,然后在主作业中定义的参数值,传递到子作业以供使用。此处子作业参数名定义为name和score,其值为分别为数据集中的第一列和第二列数值,使用EL表达式#{Loop.current[0]}和#{Loop.current[1]}。 图5 主作业样例 而For Each节点中所选的子作业,则需要定义For Each节点中的子作业参数名,以便让主作业识别参数定义,作业如图6所示。 图6 子作业样例 配置方法 开发子作业 登录 DataArts Studio 控制台,找到所需要的DataArts Studio实例,单击实例卡片上的“进入控制台”,进入概览页面。 选择“空间管理”页签,在工作空间列表中,找到所需要的工作空间,单击工作空间的“数据开发”,系统跳转至数据开发页面。 在“作业开发”页面,新建数据开发子作业EL_test_slave。选择一个Kafka Client节点,并配置作业参数,编排图6所示的作业。 此处需将参数名填写为name和score,仅用于主作业的For Each节点识别子作业参数;参数值无需填写。 配置Kafka Client节点参数。发送数据定义为:${name}: ${score},选择Kafka连接和Topic名称。 此处不能使用EL表达式#{Job.getParam("job_param_name")} ,因为此表达式只能直接获取当前作业里配置的参数的value,并不能获取到父作业传递过来的参数值,也不能获取到工作空间里面配置的全局变量,作用域仅为本作业。 而表达式${job_param_name},既可以获取到父作业传递过来的参数值,也可以获取到全局配置的变量。 图7 配置Kafka Client节点参数 配置完成后提交子作业。
  • 场景说明 使用EL表达式#{Job.getNodeOutput("前一节点名")}获取的前一节点的输出结果时,输出结果为二维数组形式 ,形如[["Dean",...,"08"],...,["Smith",...,"53"]]所示。为获取其中的值,本案例提供了如表1所示的两个常见方法示例。 表1 获取结果值常见方法 方法 关键配置 适用场景要求 通过StringUtil提取输出结果值 当SQL节点的输出结果只有一个字段,形如[["11"]]所示时,可以通过StringUtil内嵌对象EL表达式分割二维数组,获取前一节点输出的字段值: #{StringUtil.split(StringUtil.split(StringUtil.split(Job.getNodeOutput("前一节点名"),"]")[0],"[")[0],"\\"")[0]} 通过StringUtil提取输出结果值配置简单,但对适用场景有如下要求: 前一SQL节点的输出结果只有一个字段,形如[["11"]]所示。 输出结果值数据类型为String,需要应用场景支持String数据类型。例如当需要使用IF条件判断输出结果值的数值大小时,不支持String类型,则不能使用本方法。 通过For Each节点提取输出结果值 通过For Each节点,循环获取数据集中二维数组的值: For Each节点数据集:#{Job.getNodeOutput('前一节点名')} For Each节点子作业参数:#{Loop.current[索引]} 通过For Each节点输出结果值适用场景更广泛,但需将作业拆分为主作业和子作业。
  • MongoDB/DDS增量迁移 使用 CDM 导出MongoDB或者DDS的数据时,支持导出指定时间段内的数据,配合CDM的定时任务,可以实现MongoDB/DDS的增量迁移。 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 在创建CDM表/文件迁移的作业,源连接选择为MongoDB连接或者DDS连接时,高级属性的可选参数中可以配置查询筛选。 图1 MongoDB查询筛选 此参数支持配置为时间宏变量,例如起始时间配置为{"ts":{$gte:ISODate("${dateformat(yyyy-MM-dd'T'HH:mm:ss.SSS'Z',-1,DAY)}")}},表示查找ts字段中大于时间宏转换后的值,即只导出昨天以后的数据。 参数配置后,CDM就只导出前一天内的数据,再将该作业配置为每天0点执行一次,就可以增量同步每天新生成的数据。 父主题: 增量迁移原理介绍
  • HBase/CloudTable增量迁移 使用CDM导出HBase(包括MRS HBase、 FusionInsight HBase、Apache HBase)或者 表格存储服务 (CloudTable)的数据时,支持导出指定时间段内的数据,配合CDM的定时任务,可以实现HBase/CloudTable的增量迁移。 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 在创建CDM表/文件迁移的作业,源连接选择为HBase连接或CloudTable连接时,高级属性的可选参数中可以配置时间区间。 图1 HBase时间区间 起始时间(包含该值),格式为“yyyy-MM-dd HH:mm:ss”,表示只抽取该时间及以后的数据。 终止时间(不包含该值),格式为“yyyy-MM-dd HH:mm:ss”,表示只抽取该时间以前的数据。 这2个参数支持配置为时间宏变量,例如: 起始时间配置为${dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)}时,表示只导出昨天以后的数据。 终止时间配置为${dateformat(yyyy-MM-dd HH:mm:ss)}时,表示只导出当前时间以前的数据。 这2个参数同时配置后,CDM就只导出前一天内的数据,再将该作业配置为每天0点执行一次,就可以增量同步每天新生成的数据。 父主题: 增量迁移原理介绍
  • 创建数据开发作业 单击工作空间的“数据开发”,进入DataArts Studio数据开发模块。 创建子作业“分表作业”,选择CDM节点,节点属性中作业类型配置为“创建新作业”,并将步骤2中复制的作业JSON粘贴到“CDM作业消息体”中。 图6 配置CDM作业消息体 编辑“CDM作业消息体”。 由于源表有三个,分别为mail001、mail002、mail003,因此需要将作业JSON中的“fromJobConfig.tableName”属性值配置为“mail${num}”,即源表名是通过参数配置。如下图所示: 图7 编辑JSON 由于数据迁移作业名不能重复,因此修改JSON中作业名称“name”属性值配置为“mail${num}”,目的是创建多个CDM集成作业,避免作业名称重复。如下图所示: 如果需要创建分库的作业,也可将作业JSON中的源连接修改为变量,方便替换。 图8 编辑JSON 添加作业参数num,用于作业JSON中调用。如下图所示: 图9 添加作业参数num 添加完成后单击“保存并提交版本”,以保存子作业。 创建主作业“集成管理”,选择For Each节点,每次循环调用分表作业,分别将参数001、002、003传递给子作业,生成不同的分表抽取任务。 关键配置如下: 子作业:选择“分表作业” 数据集:[['001'],['002'],['003']] 子作业参数:@@#{Loop.current[0]}@@ 此处子作业参数的EL表达式需要添加@@。如果不加@@包围,数据集001会被识别为1,导致源表名不存在的问题。 如下图所示: 图10 配置关键参数 配置完成后单击“保存并提交版本”,以保存主作业。 创建主作业和子作业完成后,通过测试运行主作业“集成管理”,检查数据集成作业创建情况。运行成功后,创建并运行CDM子作业成功。 图11 查看作业创建情况
  • 注意事项 由于CDM版本不同,某些属性可能不支持,比如fromJobConfig.BatchJob。当创建任务报错时,需要在请求体中删除该属性。如下图所示: 图12 修改属性 CDM节点配置为创建作业时,节点运行会检测是否有同名CDM作业。 如果CDM作业未运行,则按照请求体内容更新同名作业。 如果同名CDM作业正在运行中,则等待作业运行完成。此时该CDM作业可能被其他任务启动,可能会导致数据抽取不符合预期(如作业配置未更新、运行时间宏未替换正确等),因此请注意不要启动或者创建多个同名作业。
  • 适用场景 业务系统中,数据源往往会采用分表的形式,以减少单表大小,支持复杂的业务应用场景。 在这种情况下,通过CDM进行数据集成时,需要针对每张表创建一个数据迁移作业。您可以参考本教程,通过数据开发模块的For Each节点和CDM节点,配合作业参数,实现批量创建分表迁移作业。 本教程中,源端MySQL数据库中存在三张分表,分别是mail01、mail02和mail03,且表结构一致,数据内容不同。目的端为MRS Hive服务。
  • 场景任务 根据客户原始数据采集处理系统中已有的H公司的数据(例如:贸易详单数据和基础信息数据),基于CDM+OBS+ DLI 完成贸易统计分析。 图1 场景方案 DLI创建OBS外表,对OBS表数据存储格式有所要求: 使用DataSource语法创建OBS表时,支持orc,parquet,json,csv,carbon,avro类型。 使用Hive语法创建OBS表时,支持TEXTFILE, AVRO, ORC, SEQUENCEFILE, RCFILE, PARQUET, CARBON类型。 如果原始数据表存储格式不满足要求,您可以通过CDM将原始数据直接导入到DLI中进行分析,无需上传OBS。
  • 数据说明 贸易详单数据 包括主要贸易国货物贸易统计数据。 表1 贸易详单数据 字段名称 字段类型 字段说明 hs_code string 进出口商品编码列表 country smallint 国家基础信息 dollar_value double 交易金额 quantity double 交易量 unit smallint 计量单位 b_country smallint 目标国家基础信息 imex smallint 进出口类型 y_year smallint 年 m_month smallint 月 基础信息数据 贸易详单数据中维度字段对应的相关字典数据信息。 表2 国家基础信息表(country) 字段名称 字段类型 字段说明 countryid smallint 国家编码 country_en string 国家英文名称 country_cn string 国家中文名称 表3 更新时间信息表(updatetime) 字段名称 字段类型 字段说明 countryid smallint 国家编码 imex smallint 进出口类型 hs_len smallint 商品编码长度 minstartdate string 最小开始时间 startdate string 开始时间 newdate string 更新时间 minnewdate string 最小更新时间 表4 进出口商品编码信息表(hs246) 字段名称 字段类型 字段说明 id bigint 编号 hs string 商品编码 hs_cn string 商品中文名称 hs_en string 商品英文名称 表5 单位信息表(unit_general) 字段名称 字段类型 字段说明 id smallint 计量单位编码 unit_en string 计量单位英文名称 unit_cn string 计量单位中文名称
  • 场景描述 H公司是国内一家收集主要贸易国贸易统计及买家数据的商业机构,拥有大量的贸易统计数据库,其数据广泛应用于产业研究、行业研究、国际贸易促进等方面。 在这之前,H公司采用其自建的大数据集群,并安排专人维护,每年固定购买电信联通双线专用带宽,在机房、电力、专网、服务器、运维方面进行高额投入,但其在面对客户不断变化的业务诉求时,因为人员投入不足,大数据集群能力不匹配,而无法聚焦业务创新,使得存量100T的数据只有4%的利用率。 在将本地的贸易统计数据迁移到华为云之后,基于华为公有云的大数据分析能力,可帮助H公司屏蔽大数据基础设施复杂的构建、维护过程,使其客户人员可以全身心聚焦业务创新,盘活100T的存量数据,使资产最大化变现。 CDM和DLI服务按需收费,帮助H公司客户释放了维护人员并降低了专用带宽成本,使得维护成本相比线下数据中心降低了70%,且使用门槛低,可实现已有数据的平滑迁移,使新业务上线周期相比之前缩短了50%。
  • 场景描述 在配置作业调度时,可以选择每个月的最后一天执行。如果您需要配置作业的调度时间为每月最后一天,请参考下面两种方法。 表1 配置每月最后一天进行调度 配置方法 优势 如何配置 调度周期配置为天,通过条件表达式进行判断是否为每月最后一天 可以灵活适用多种场景。只需要编写条件表达式就可以灵活调度作业去运行。例如,每月最后一天,每月七号等。 方法1 调度周期配置为月,勾选每月最后一天 通过配置调度周期来执行任务调度。不用编写开发语句,通过勾选需要调度的时间去执行任务。 方法2
  • 创建CDM迁移作业 登录控制台,选择实例,单击“进入控制台”,单击相应工作空间后的“数据集成”。 在集群管理页面,单击集群操作列“作业管理”,进入“作业管理”页面,如图1所示。 图1 集群管理 在“连接管理”页签中,单击“新建连接”,分别创建Oracle数据连接和MRS Hive数据连接,详情请参见新建Oracle数据连接和新建MRS Hive数据连接。 在“表/文件迁移”页签中,单击“新建作业”,创建数据迁移作业。 配置Oracle源端参数、MRS hive目的端参数,并配置传递参数,参数形式为 ${varName},本示例参数为${cur_date},如图2所示。 图2 配置作业 不能在CDM迁移作业中配置“作业失败重试”参数,如有需要请在数据开发中的CDM节点配置“失败重试”参数。
  • 适用场景 在某项目搬迁场景下,当您需要补充以前时间段内的历史业务数据,需要查看历史数据的详细信息时,可以使用补数据特性。 补数据是指作业执行一个调度任务,在过去某一段时间里生成一系列的实例。用户可以通过补数据,修正历史中出现数据错误的作业实例,或者构建更多的作业记录以便调试程序等。 补数据作业除了支持SQL脚本,其他节点也支持。 如果SQL脚本的内容有变化,补数据作业运行的是最新版本的脚本。 使用补数据功能时,如SQL中变量是DATE,脚本中就写${DATE},在作业参数中会自动增加脚本参数DATE,脚本参数DATE的值支持使用EL表达式。如果是变量时间的话,需要使用DateUtil内嵌对象的表达式,平台会自动转换成历史日期。EL表达式用法可参考EL表达式。 补数据作业除了支持作业参数,脚本参数或者全局环境变量也支持。
  • 解释说明 DataArts Studio支持自然周期的调度方式。通过各个节点的调度依赖配置结果,有序的运行业务流程中各个节点,保障业务数据有效、适时地产出。 调度依赖就是节点间的上下游依赖关系,在DataArts Studio中,上游任务节点运行完成且运行成功,下游任务节点才会开始运行。 配置调度依赖后,可以保障调度任务在运行时能取到正确的数据(当前节点依赖的上游节点成功运行后,DataArts Studio通过节点运行的状态识别到上游表的最新数据已产生,下游节点再去取数)。避免下游节点取数据时,上游表数据还未正常产出,导致下游节点取数出现问题。 在配置依赖关系时,支持配置同周期的依赖和上一周期的依赖。 同周期依赖的原理,详情参考自然周期调度之同周期依赖原理。 上一周期依赖的原理,详情参考自然周期调度之上一周期依赖原理。 当分钟的调度周期不能被小时整除时,周期调度就不是严格按照间隔周期去跑,而是按照cron表达式的规则,每个小时的零点触发去跑,再往后推间隔。
  • 前提条件 DLI创建OBS外表,对OBS表数据存储格式有所要求: 使用DataSource语法创建OBS表时,支持orc,parquet,json,csv,carbon,avro类型。 使用Hive语法创建OBS表时,支持TEXTFILE, AVRO, ORC, SEQUENCEFILE, RCFILE, PARQUET, CARBON类型。 如果原始数据表存储格式不满足要求,您可以通过CDM将原始数据直接导入到DLI中进行分析,无需上传OBS。
  • 上传增量数据 使用CDM将存量数据上传完后,单击该作业后的“编辑”,直接修改该作业。 保持作业基本参数不变,单击“下一步”修改任务参数,如图1所示。 图1 定时任务配置 勾选“是否定时执行”,配置定时任务: “重复周期”配置为1天。 “开始时间”配置为每天凌晨0点1分执行。 这样CDM每天凌晨自动执行全量迁移,但因为“重复文件处理方式”选择了“跳过重复文件”,相同名称且相同大小的文件不迁移,所以只会上传每天新增的文件。 单击“保存”,完成CDM的增量同步配置。 父主题: 使用CDM上传数据到OBS
  • 操作前准备 已创建新的工作空间,新建工作空间的用户需要具备DAYU Administrator或Tenant Administrator权限。 执行数据搬迁的用户,至少应具备新旧两个工作空间的开发者权限。 CDM集群和数据服务专享版集群在工作空间之间相互隔离,建议您在新空间提前准备好对应旧空间的集群。 搬迁依赖于OBS功能,请您提前规划OBS桶和文件夹目录。 DataArts Studio数据搬迁时,依赖各组件的备份或导入导出能力。您可以根据自己的数据需求,自由选择搬迁哪个组件的数据。 管理中心配置数据搬迁 数据集成配置数据搬迁 数据架构配置数据搬迁 数据开发配置数据搬迁 数据质量配置数据搬迁 数据目录配置数据搬迁 数据安全配置数据搬迁 数据服务配置数据搬迁
  • 方案说明 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节点成功运行
  • 解释说明 周期调度作业支持设置调度周期符合条件的作业为依赖作业。设置依赖作业的操作详情请参考配置作业调度任务(批处理作业)章节。 例如周期调度作业A,可设置其依赖作业为作业B,如图1所示进行配置。则仅当其依赖的作业B在某段时间内所有实例运行完成、且不存在失败实例时,才开始执行作业A。 依赖的作业B的“某段时间”,计算方法如下,详见后文设置依赖作业后的作业运行原理。 同周期依赖,如分钟依赖分钟、小时依赖小时或天依赖天时,“某段时间”为 (作业A执行时间-作业A周期时间, 作业A执行时间] 。 跨周期依赖:如小时依赖分钟、天依赖分钟、天依赖小时或月依赖天时,“某段时间”为 [上一作业A调度周期的自然起点, 当前作业A调度周期的自然起点) 。 作业A是否判断其依赖的作业B的实例状态,与“依赖的作业失败后,当前作业处理策略”参数有关,具体如下: “依赖的作业失败后,当前作业处理策略”参数配置为“挂起”或“取消执行”后,当其依赖的作业B在某段时间内存在运行失败实例,则作业A“挂起”或“取消执行”。 “依赖的作业失败后,当前作业处理策略”参数配置为“继续执行”,只要其依赖的作业B在某段时间内所有实例跑完(不判断其状态),则作业A就继续执行。 图1 作业依赖属性
  • 设置依赖作业的条件 当前周期调度作业的调度周期包括分钟、小时、天、周、月这五种周期,周期调度作业A如果要配置依赖作业为周期调度作业B,则调度周期必须符合以下要求: 作业A的调度周期不能比依赖作业B小。例如,作业A和作业B同为分钟/小时调度,A的间隔时间小于B的间隔时间,则作业A不能设置作业B为依赖作业;作业A为分钟调度,作业B为小时调度,则作业A不能设置作业B为依赖作业。 作业A和依赖作业B中不能有任一调度周期为周。例如,作业A的调度周期为周或作业B的调度周期为周,则作业A不能设置作业B为依赖作业。 调度周期为月的作业只能依赖调度周期为天的作业。例如,作业A的调度周期为月,则作业A只能设置调度周期为天的作业为依赖作业。 不同调度周期的作业,其允许配置的依赖作业调度周期总结如图2所示。 图2 作业依赖关系全景图
  • 设置依赖作业后的作业运行原理 同周期依赖和跨周期依赖的作业运行原理有所差异。为方便说明,本例中假设“依赖的作业失败后,当前作业处理策略”参数设置为“继续执行”,作业A不判断作业B的实例运行状态;如果该参数设置为“挂起”或“取消执行”,则作业A还会额外判断作业B的实例中是否存在失败实例。 同周期依赖:即作业A与其依赖作业B为相同调度周期,如分钟依赖分钟、小时依赖小时或天依赖天。 同周期依赖的情况下,当作业A的依赖作业配置为作业B后,作业A会在 (作业A执行时间-作业A周期时间, 作业A执行时间] 时间区间内检查是否有作业B的实例运行,只有在此期间作业B的实例运行完成才会运行作业A。 示例1:作业A依赖作业B,均为分钟调度。作业A的开始时间10:00,周期时间20分钟;作业B的开始时间10:00,周期时间10分钟。则会出现如下情况: 表1 示例1:同周期作业依赖情况 时间点 作业B(分钟调度,开始时间10:00,周期时间10分钟) 作业A(分钟调度,开始时间10:00,周期时间20分钟) 10:00 执行 检查 (09:40, 10:00] 区间,有作业B实例运行,待作业B执行完成后,执行作业A 10:10 执行 - 10:20 执行 检查 (10:00, 10:20] 区间,有作业B实例运行,待作业B执行完成后,执行作业A 10:30 执行 - ... ... ... 示例2:作业A依赖作业B,均为天调度。作业A的开始时间为8月1日09:00;作业B的开始时间8月1日10:00。则会出现如下情况: 表2 示例2:同周期作业依赖情况 时间点 作业B(天调度,开始时间为8月1日10:00) 作业A(天调度,开始时间8月1日09:00) 8月1日09:00 - 检查 (7月31日09:00, 8月1日09:00] 区间,无作业B实例运行,不执行作业A 8月1日10:00 执行 - 8月2日09:00 - 检查 (8月1日09:00, 8月2日09:00] 区间,有作业B实例运行,待作业B执行完成后,执行作业A 8月2日10:00 执行 - ... ... ... 天作业依赖天作业,上游作业调度时间早于下游作业,下游作业才能依赖到上游当天的作业。 跨周期依赖:即作业A与其依赖作业B为不同调度周期,如小时依赖分钟、天依赖分钟、天依赖小时或月依赖天。 跨周期依赖的情况下,当作业A的依赖作业配置为作业B后,作业A会在 [上一作业A调度周期的自然起点, 当前作业A调度周期的自然起点) 时间区间内检查是否有作业B的实例运行,只有在此期间作业B的实例运行完成才会运行作业A。 调度周期的自然起点定义如下: 调度周期为小时:上一调度周期的自然起点为上一小时的零分零秒,当前调度周期的自然起点为当前小时的零分零秒。 调度周期为天:上一调度周期的自然起点为昨天的零点零分零秒,当前调度周期的自然起点为今天的零点零分零秒。 调度周期为月:上一调度周期的自然起点为上个月1号的零点零分零秒,当前调度周期的自然起点为当月1号的零点零分零秒。 示例3:作业A依赖作业B,作业A为天调度,作业B为小时调度。作业A的每天02:00执行;作业B的开始时间00:00,间隔时间10小时。则会出现如下情况: 表3 示例3:跨周期作业依赖情况 时间点 作业B(小时调度,开始时间00:00,间隔时间10小时) 作业A(天调度,每天02:00执行) 第1天00:00 执行 - 第1天02:00 - 检查 [第0天00:00:00, 第1天00:00:00) 区间,无作业B实例运行,不执行 第1天10:00 执行 - 第1天20:00 执行 - 第2天00:00 执行 - 第2天02:00 - 检查 [第1天00:00:00, 第2天00:00:00) 区间,有作业B实例运行完成,执行作业A 第2天10:00 执行 - 第2天20:00 执行 - ... ... ... 示例4:作业A依赖作业B,作业A为月调度,作业B为天调度。作业A的每月1号、2号的02:00执行;作业B在8月1日00:00开始执行。则会出现如下情况: 表4 示例4:跨周期作业依赖情况 时间点 作业B(天调度,8月1日00:00执行) 作业A(月调度,每月1号、2号的02:00执行) 8月1日00:00 执行 - 8月1日02:00 - 检查 [7月1日00:00:00, 8月1日00:00:00) 区间,无作业B实例运行,不执行 8月2日00:00 执行 - 8月2日02:00 - 检查 [7月1日00:00:00, 8月1日00:00:00) 区间,无作业B实例运行,不执行 ... - ... 9月1日00:00 执行 - 9月1日02:00 - 检查 [8月1日00:00:00, 9月1日00:00:00) 区间,有作业B实例运行完成,执行作业A 9月2日00:00 执行 - 9月2日02:00 - 检查 [8月1日00:00:00, 9月1日00:00:00) 区间,有作业B实例运行完成,执行作业A ... ... ...
  • 创建并执行数据迁移作业 登录DataArts Studio控制台,单击相应工作空间后的“数据集成”。 在“集群管理”页面,单击所创建集群操作列“作业管理”,进入“作业管理”页面。 在表/文件迁移页签中,单击新建作业,创建数据迁移作业。 配置DWS源端作业参数、MRS Hive目的端作业参数,参数说明请参见配置DWS源端参数、配置MRS Hive目的端作业参数。 图4 作业配置 配置作业字段映射及任务配置,单击“保存并运行”,执行CDM作业。 在“表/文件迁移”作业列表中,查看作业执行情况。 图5 查看作业运行情况
  • 创建数据迁移连接 登录DataArts Studio控制台,单击相应工作空间后的“数据集成”。 在集群管理页面,单击所创建集群操作列“作业管理”,进入“作业管理”页面。 图1 作业管理页面 在连接管理页签中,单击“新建连接”,创建DWS数据连接,参数说明请参见配置DWS连接。 图2 配置DWS连接 同上述步骤,创建MRS Hive数据连接,参数说明请参见配置MRS Hive连接。 图3 配置MRS Hive连接
  • 开发并调度Import GES作业 假设MySQL中的原始数据表是每日更新的,我们希望每天都能将基于原始数据的最新图数据更新到GES中,则需要使用数据开发按如下步骤编排作业,并定期调度。 在DataArts Studio控制台首页,选择对应工作空间的“数据开发”模块,进入数据开发页面。 创建一个数据开发批处理作业,作业名称可以命名为“import_ges”。 图2 新建作业 在作业开发页面,拖动1个Dummy节点、8个CDM Job节点、和2个Import GES节点到画布中,选中连线图标并拖动,编排图3所示的作业。 其中Dummy节点不执行任何操作,只作为起始点的标识。CDM Job节点用于调用在创建数据集成作业中创建的数据集成作业。Import GES节点用于将图数据导入GES。 图3 编排作业 分别配置作业中的8个CDM Job节点。调用已创建的数据集成作业,将原始数据标准化为GES点/边数据集,并同步到OBS和MRS Hive中。 图4 配置CDM节点 CDM节点说明: vertex_user_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_user_rds2hive”。 vertex_user_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_user_rds2obs”。 edge_friends_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_friends_rds2hive”。 edge_friends_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_friends_rds2obs”。 vertex_movie_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_movie_rds2hive”。 vertex_movie_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“vertex_movie_rds2obs”。 edge_rate_rds2hive(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_rate_rds2hive”。 edge_rate_rds2obs(CDM Job节点):在节点属性中,选择创建数据集成作业中的CDM集群,并关联CDM作业“edge_rate_rds2obs”。 分别配置作业中的2个Import GES节点。由于1个Import GES节点只能选择一张点表和一张边表,并生成对应的元数据,因此本示例中使用2个Import GES节点依次进行导入。 Import GES节点说明: Import_GES_user-friend:在节点属性中,选择图名称后,边数据集和点数据集分别填写为“edge_friends”边表和“vertex_user”点表。另外,应配置为不允许重复边,否则定期调度后将产生大量重复边。 注意,“元数据来源”需要选择为“新建元数据”,然后单击“元数据”参数后的生成按钮,弹出新建元数据窗口,如图6所示。在新建元数据窗口内,分别选择MRS中的“edge_friends”边表和“vertex_user”点表,输出目录可以设置为OBS点表和边表所在目录,然后单击生成,系统会自动在“元数据”参数处回填已生成的元数据Schema所在的OBS目录。 Import_GES_movie-rate:在节点属性中,选择图名称后,边数据集和点数据集分别填写为“edge_rate”边表和“vertex_movie”点表。另外,应配置为不允许重复边,否则定期调度后将产生大量重复边。 注意,“元数据来源”需要选择为“新建元数据”,然后单击“元数据”参数后的生成按钮,弹出新建元数据窗口,如图6所示。在新建元数据窗口内,分别选择MRS中的“edge_rate”边表和“vertex_movie”点表,输出目录可以设置为OBS点表和边表所在目录,然后单击生成,系统会自动在“元数据”参数处回填已生成的元数据Schema所在的OBS目录。 图5 配置Import GES节点 图6 新建元数据 作业编排完成后,单击,测试运行作业。 图7 测试运行作业 如果作业运行正常,单击“调度配置”,配置作业的调度策略。 图8 调度配置 说明: 2023/04/01 00:00开始,每天00点00分执行一次作业。 依赖属性:可以配置为依赖其他作业运行,本例不涉及,无需配置。 跨周期依赖:可以选择配置为依赖上一周期或者不依赖,此处配置为不依赖即可。 最后保存并提交版本(单击),执行调度作业(单击)。实现作业每天自动运行,每日数据将自动导入到GES图中。 您如果需要及时了解作业的执行结果是成功还是失败,可以通过数据开发的运维调度界面进行查看,如图9所示。 图9 查看作业执行情况
  • 旧空间导出作业和连接 请您登录控制台首页,选择并进入旧工作空间的“数据集成”模块,然后执行如下操作进行批量导出。 在CDM主界面,单击左侧导航上的“集群管理”,单击集群“操作”列的“作业管理”,进入到“表/文件迁移”界面。 单击作业列表上方的“导出”按钮,准备导出连接和作业。 图1 批量导出 在弹出的窗口中,选择“全部作业和连接”,单击“确认”,导出所有作业和连接。 图2 全部导出 导出成功后,通过浏览器下载地址,获取到导出的JSON文件。
  • 新空间导入作业和连接 请您登录控制台首页,选择并进入新工作空间的“数据集成”模块,然后执行如下操作进行批量导入。 在CDM主界面,单击左侧导航上的“集群管理”,单击集群“操作”列的“作业管理”,进入到“表/文件迁移”界面。 单击作业列表上方的“导入”按钮,准备导入JSON文件。 图3 批量导入 在弹出的窗口中,选择导出作业获取的JSON文件,上传JSON文件。 图4 选择JSON文件 JSON文件上传成功后,单击“设置密码”,配置数据连接的密码或SK。 图5 进入设置密码 在设置密码弹窗中,依次输入各数据连接的密码或SK,完成后单击确认,回到导入作业界面。 图6 设置密码 在导入作业界面,单击确认,开始导入。 图7 开始导入 导入完成后,界面会显示导入情况。如果存在导入失败的情况,请您根据系统报错原因提示,调整后重新导入。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全