华为云用户手册

  • 排查思路 DLI 提供优惠的资源套餐包,购买套餐包后,资源按照套餐包类型计费。 套餐包是用户预先购买的资源使用量配额,超出当前套餐包的额度,将自动转为按需收费。 建议您按以下顺序排查原因。 可能原因 处理措施 未购买对应的套餐包 请参考判断是否经购买了对应的套餐包 套餐包额度已用完 请参考判断套餐包额度是否超出 购买的套餐包没有涵盖到DLI所有计费项 请参考判断是否产生了套餐包未涵盖的计费项 如果处理完某个可能原因仍未解决问题,请继续排查其他可能原因。
  • 判断是否经购买了对应的套餐包 目前DLI支持的套餐包类型如表1所示。 不同套餐包抵扣的费用不同,详见套餐包计费。请确认是否已经购买了产生按需费用的计费项所对应的套餐包。 如果未购买,产生按需计费为正常现象;如果已购买,请继续排查判断套餐包额度是否超出。 表1 套餐包类型及适用场景 类型 说明 适用场景 重置规则 扫描数据量套餐包 按照用户每个作业的数据扫描量(单位为“GB”)收取计算费用。 仅适用于default 队列。 扫描数据量套餐的额度按订购周期会重置。 弹性资源池CU时套餐包 按照“CU时”收取计算费用,用户在弹性资源池添加的队列上运行作业时按照弹性资源池CU时计费。 适用于可预估队列使用量的场景、或测试项目等资源消耗不高的场景。 弹性资源池CU时套餐包的额度按订购周期重置。 存储量套餐包 按照存储在DLI服务中的数据存储量(单位为“GB”)收取存储费用。 适用于在DLI 存储表数据的场景,例如时延敏感类的业务将表存储在DLI,使用存储量套餐包可以节省存储费用。 存储套餐的额度每个小时会重置。
  • 计费示例 示例价格仅供参考,实际价格请以DLI产品价格详情中的信息为准。 更多示例参考DLI产品价格详情。 假设用户A预先购买了4000CU时的套餐包,有效期为1个月,在套餐包用完之前,用户A使用CU时的计算资源时,都将从套餐包中扣除。 如果套餐包剩余10CU时,用户使用了16CU时,则其中10CU时将从套餐包中扣除,超出的6CU时按需计费。 计费项1:预付费购买套餐包的费用。 计费项2:超出套餐包6CU时的按需费用,假设使用的是队列资源。使用时长1小时。 按需计费弹性资源池费用计算示例: 4000 CU 时套餐包1190/月。 弹性资源池单价:0.4元/小时,超出的CU:6CUs,时长:1小时。 费用合计:1190+2.4=1192.4元。
  • 套餐包类型及适用场景 表1 套餐包类型及适用场景 类型 说明 适用场景 重置规则 扫描数据量套餐包 按照用户每个作业的数据扫描量(单位为“GB”)收取计算费用。 仅适用于default 队列。 扫描数据量套餐的额度按订购周期会重置。 弹性资源池CU时套餐包 按照“CU时”收取计算费用,用户在弹性资源池添加的队列上运行作业时按照弹性资源池CU时计费。 适用于可预估队列使用量的场景、或测试项目等资源消耗不高的场景。 弹性资源池CU时套餐包的额度按订购周期重置。 存储量套餐包 按照存储在DLI服务中的数据存储量(单位为“GB”)收取存储费用。 适用于在DLI 存储表数据的场景,例如时延敏感类的业务将表存储在DLI,使用存储量套餐包可以节省存储费用。 存储套餐的额度每个小时会重置。 按订购周期重置:如重置周期为月,且按订购周期重置,即如果用户1月5日订购的套餐包,之后每个月5日同一时间重置免费资源。 按自然周期重置:结合重置周期使用,如重置周期为月,且按自然周期重置,即每月1日0点重置免费资源。 DLI的套餐包中仅存储套餐包按自然周期,即每小时重置,其他套餐包按订购周期重置。
  • 计费项 DLI的计费项包括计算计费、存储计费、扫描量计费。DLI的计费详情请参见DLI产品价格详情。您可以通过DLI提供的价格计算器,快速计算出购买资源的参考价格。 表1 DLI计费项 计费项 说明 计算计费 支持三种计费模式: 按照包年/包月的订购周期计费 根据计算资源使用量(CU时)按需计费。 按预购的套餐包计费。 支持包年包月+按需组合使用(超出包周期规格按需计费);支持套餐包+按需计费组合使用(超出套餐包使用量按需计费)。 存储计费 按照存储在DLI服务中的表数据存储量(单位为“GB”)收取存储费用。 在估算存储费用时,请特别注意,DLI采用压缩存储,通常能压缩到原文件大小的 1/5 。DLI存储按照压缩后的大小计费。 如果数据存储在OBS服务中,则DLI服务不收取存储费用,对应的费用由OBS服务收取。 扫描量计费 按照用户每个作业的数据扫描量(单位为“GB”)收取计算费用。 当前仅适用于在默认default队列中提交作业按扫描数据量计费。 CU是弹性资源池的计价单位。 1CU= 1Core 4GMem。不同规格对应的计算能力不一样,规格越高计算能力越好。 default队列中提交作业按扫描数据量计费。
  • 适用场景 通常情况下,建议您针对不同的业务创建项目: 开发项目:在此项目下,大多是工程师开发调试时使用,作业随机性大,数据量小。针对这种情况,建议您使用按CU时计费模式,能够帮您有效控制成本,将资源消耗控制在一定范围内。如果您有短时的专属资源需求,也可以在购买按需队列时勾选专属资源模式,享受资源专属。 生产项目:在此项目下,您的作业相对稳定(经过开发调试再上线),建议您使用包年/包月计费模式,可以更优惠。同时,按需计费的队列,在空闲1小时后(队列空闲是指该队列上没有正在运行的作业),系统会自动释放计算资源,再次使用时,需要重新分配计算资源,可能会耗费5~10min时间。使用包年/包月计费模式则可避免这种情况,节省等待时间。
  • 计费模式 DLI在不同的计费项下有不同的计费模式,具体详见表2说明。 表2 DLI计费模式 计费项 计费模式 计费模式说明 计算计费 包年/包月 按照弹性资源池包年/包月的固定费用计费。 按需计费 按需弹性资源池资源使用CU时进行计费。 计算费用=单价*CU数*小时数 CU时套餐包 DLI提供了弹性资源池CU时套餐包。 CU时套餐包的额度会按订购周期重置。 DLI表的数据存储 按需计费 按照存储在DLI服务中的数据存储量(单位为“GB”)收取存储费用。 存储费用=单价*存储数据量(GB)*小时数 存储套餐包 购买了存储量套餐包,按需使用过程中优先抵扣存储套餐包的规格额度,超过套餐包额度的按照按需计费。存储套餐的额度每个小时会重置。 数据扫描量 按需计费 扫描量计费=单价*扫描量数据(GB) 扫描数据量套餐包 购买了扫描数据量套餐包,按需使用过程中优先抵扣扫描数据量套餐包的规格额度,超过扫描数据量套餐包额度的按照按需计费。扫描数据量套餐的额度会按订购周期重置。 按订购周期重置:如重置周期为月,且按订购周期重置,即如果用户1月5日订购的套餐包,之后每个月5日同一时间重置免费资源。 按自然周期重置:结合重置周期使用,如重置周期为月,且按自然周期重置,即每月1日0点重置免费资源。 DLI的套餐包中仅存储套餐包按自然周期重置,即每小时重置,其他套餐包按订购周期重置。
  • 在脚本中调用连接器 在脚本中,调用连接器实现与OCR的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图5 新建一个空白脚本 在脚本编辑器中,输入如下代码。 //导入该脚本所依赖的标准库文件,ocr是系统预置的标准库。 import * as ocr from 'ocr'; let cli = ocr.newClient("OCR_Test"); try { let url = "https://obs.example.com:443/1.PNG?AccessKeyId=ZK87UUIONJF5ZHWBINUO&Expires=1556001233&Signature=DOwO6djb4Q3EBvCieQFaO3T2GKU%3D&x-obs-security-token=gQpjbi1ub3J0aC0xipYOeC2mcbefHh5I_aMr6DEWQ8-iFyxqatavdiFtYowH-lpJCcxeTynsV_4PTJe9QIx85mlDIDo3sU9PUv3hFtRjQORjGE2PqA4hEtozvMuWxXb5b6RKiFT37-z7NoI4R85XmlTmZGQ6OUZ92bercG5DWEBTDVd3I_UYuNGzF20q6S2COP__Z-uqkhhw8nATd3k6GaIfCqxjcOih_juHBBoM1ON74vpKxCl1sJxnEYbZfkf6FO_xuGaJD7-J7OzD8tsSmFf4jR1TqZFZzrPEc9bkd2bPr8pwOCdDp8Yy0EVauKDvtIXsvzFollOR0rUvZol1sIsQU0gVpFpZyIqYqG6C_qQfXmr5DQwXTsQyifKjXLSj2MbPs6FKLYqu7mj0NhxUVcK5EQh5Vl5x5VHvYGRwgWJL078oXVBKGnQnr05EDHcCiW-6Gris2mHBYdcNmuhJ1UwNekeumBc0S6_33yK-U8OGYLMpR6HnLooyFmtmnOBIIQIkzWfWUNM7nIdWWcPmozJcBZ8iyawE0Cxgz5Xf56hPi-YZda0d1Xu387GA8PBkEPVct1yo5nh2bmVfRH6z0zWzhN-vbFcIHsfYv776DDLKQdSH0Sn-8bHdvPLPd2QieBkgS6wfvTcKMeBA6PwwNBl0Xqds6vQPpSZe6cYyplNuJoY05VLd8tLZMy_bR8Dmf1kArQaSquBzw2eDCfJAazjA4wTnkbccr38k7eM%3D" let resp = cli.idCardWithURL(url, "front"); console.log(resp); } catch (e) { console.log("error: ", e) } 其其中,ocr.newClient("OCR_Test")中,“OCR_Test”为连接器的名称,“url”取值是图片的URL, “front”表示识别的是身份证正面。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 不用设置输入参数,直接单击测试窗口右上角的。 在输出参数页签,检查是否识别出身份证上文字信息。 识别出身份证上的文字信息,表明成功调用连接器。 单击脚本编辑器页面上方的,启用脚本。
  • 背景信息 文字识别 (Optical Character Recognition,简称OCR)以开放API的方式提供给用户,用户使用Python、Java等编程语言调用OCR服务API将图片识别成文字,帮助用户自动采集关键数据,打造智能化业务系统,提升业务效率。 在AstroZero中,通过应用与华为OCR(Optical Character Recognition)对接,可实现图片或扫描件中文字识别功能。
  • 在脚本中,调用Rest Action Rest Action启用后,可在脚本中调用已创建的Rest Action。 参考登录AstroZero新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“逻辑”。 单击脚本后的,设置脚本名称,单击“添加”。 图10 新增一个空脚本 在脚本编辑器中,输入如下代码。 // Here's your code. import * as connector from "connector"; let client = connector.newClient("命名空间__test", "test1"); let result = client.invoke("命名空间_flapRefund", {}); console.log(result) 其中,“命名空间__test”表示连接器的名称,“test1”为创建Rest Service(自定义连接器)配置的认证信息名称,“命名空间__flapRefund”为创建并启用Rest Action中配置的动作名称。 单击脚本编辑器页面上方的,保存脚本。 脚本保存成功后,单击,运行脚本。 在页面底部“输入参数”页签中,输入请求参数,单击测试窗口右上角的。 在“日志”页签,查看打印的日志。
  • 创建并启用Rest Action 通过创建Rest Action,使得系统可以调用第三方提供的Rest协议的接口,实现第三方提供的业务功能。 在创建Rest Service(自定义连接器)中创建的Rest Service列表中,选择Rest Action所在的REST Service,在“动作”页签,单击“新建”。 参照表3,设置动作的基本信息,单击“下一步”。 图4 新建动作设置基本信息 参照表4,设置消息头入参,单击“下一步”。 如果此接口没有消息头输入参数,则不需要配置参数,请删除第一行参数。如果有消息头输入参数,且有多个,请单击。如果之前创建Rest Service时,有定义消息头参数,可选择“从模板中插入”,并定义输入参数的基本信息。消息头入参的参数说明请参见。 图5 消息头入参配置页面 参照表5,设置输入参数,单击“下一步”。 如果此接口没有输入参数,则不需要配置参数,删除第一行参数。如果有输入参数,且有多个,请单击,并定义输入参数的基本信息。 页面上方“消息体格式”参数使用说明:当方法为“PUT”或“POST”时,该参数才会显示。当第三方入参为数组类型或者非JSON类型时,需要将“输入消息体方式”设置为“值”形式。 例如,如果设置“消息体格式”为“键-值”,假设定义了输入参数A、B、C,调用时消息体中传递了参数 {A: 1,B:2, C:3} ,此时被调用方收到的参数信息是 {A: 1,B:2, C:3}。如果设置“输入消息体方式”为“值”,此时默认使用$in输入参数定义,调用时消息体中传递了参数{$in: [1,2,3] },此时被调用方收到的参数信息为[1,2,3]。 图6 输入参数配置页面 参照表6,设置输出参数,单击“保存”。 如果此接口没有输出参数,则不需要配置参数,请删除第一行参数。如果有输出参数,且有多个参数,请单击,并定义输出参数的基本信息。 页面上方“消息体格式”参数使用说明:设置“输出消息体方式”为“值”后,系统会引入一个通用的出参变量“$out”,将body的内容存到“$out”中,作为出参。 例如,若设置“消息体格式”为“键-值”,假设定义了输出参数A、B、C,调用后返回消息体中传递了参数 {A: 1,B:2, C:3} ,此时调用方收到的参数信息是 {A: 1,B:2, C:3};若设置“输出消息体方式”为“值”,此时默认使用$out输出参数定义,调用业务接口返回消息体中传递了参数[1,2,3],此时调用方收到的参数信息为{$out:[1,2,3]}。 图7 输出参数配置页面 在动作页签,单击该Rest Action所在行的,启用Rest Action。 单击“导出”,可导出zip包,zip包中包括该服务的所有Rest接口。单击“导入”,可通过导入yaml文件,导入Rest Action。
  • 示例场景说明 本实践通过 DataArts Studio 服务的数据开发DLF组件和 数据湖探索 服务(DLI)对某电商商城的用户、商品、评论数据(脱敏后)进行分析,输出用户和商品的各种数据特征,可为营销决策、广告推荐、信用评级、品牌监控、用户行为预测提供高质量的信息。在此期间,您可以学习到数据开发模块脚本编辑、作业编辑、作业调度等功能,以及DLI的SQL基本语法。 本入门示例涉及DataArts Studio服务的管理中心和数据开发模块,DataArts Studio的各版本均可以满足使用要求。 如果您从未使用过DataArts Studio,您可以选择试用DataArts Studio,按照本示例进行入门试用。 操作流程如下: 准备工作,包括使用DataArts Studio前的准备、数据源准备和 数据湖 准备。 数据开发,包含创建DLI SQL脚本和开发作业。 分析10大用户关注最多的产品 分析10大用户评价最差的商品 开发并调度作业,通过编排作业和配置作业调度策略,定期执行作业,使得用户可以每天获取到最新的数据分析结果。 服务退订,如果不再使用DataArts Studio相关服务,请及时进行退订和资源删除。 父主题: 免费版:基于DLI的电商BI报表数据开发流程
  • 步骤3:服务退订 本开发场景中,DataArts Studio、OBS和DLI服务均会产生相关费用。在使用过程中,如果您额外进行了通知配置,可能还会产生以下相关服务的费用: SMN 服务:如果您在使用DataArts Studio各组件过程中开启了 消息通知 功能,则会产生消息通知服务费用,收费标准请参见SMN价格详情。 在场景开发完成后,如果您不再使用DataArts Studio及相关服务,请及时进行退订和资源删除,避免持续产生费用。 表1 相关服务退订方式 服务 计费说明 退订方式 DataArts Studio DataArts Studio计费说明 DataArts Studio实例仅支持包周期计费。您可以根据需要参考云服务退订退订DataArts Studio包年包月套餐。 OBS OBS计费说明 OBS服务支持按需和包周期计费,套餐包暂不支持退订。本例中使用按需计费,完成后删除新建的存储桶即可;另外,DataArts Studio作业日志和DLI脏数据默认存储在以dlf-log-{Project id}命名的OBS桶中,在退订DataArts Studio后可以一并删除。 DLI DLI计费说明 DLI服务未购买专属队列时,涉及存储收费和扫描量计费。扫描量收费是在使用默认default队列提交作业时计费的,后续不使用队列不收费;存储收费需要您在DLI服务数据管理中删除相关数据。 SMN SMN计费说明 SMN服务按实际用量付费,退订DataArts Studio服务后不会再产生通知,您也可以直接删除SMN服务已产生的主题和订阅。 父主题: 免费版:基于DLI的电商BI报表数据开发流程
  • 查看业务资产和技术资产 在DataArts Studio控制台首页,选择对应工作空间的“数据目录”模块,进入数据目录页面。 在左侧导航栏单击“数据目录”,选择“业务资产”页签,然后在筛选条件中选择业务对象,将显示符合条件的业务资产。 选择“技术资产”页签,然后在筛选条件中“数据连接”选择所需查看的连接,“类型”选择“Table”,右侧页面将显示符合条件的所有的元数据。 图1 技术资产 在资产列表中,单击所需查看的元数据名称,即可查看详情信息。 例如,在资产列表中,找到事实表fact_stroke_order,单击事实表名称,即可查看事实表的详情信息。在详情页面,进入“血缘”页签,可查看事实表的输入输出血缘信息。 图2 血缘 在资产列表中,找到汇总表,例如dws_payment_type,单击汇总表名称,即可查看汇总表的详情信息。在详情页面,进入“数据预览”页签,可查看汇总表的预览数据。 图3 数据预览
  • 快速入门指引 数据治理中心 DataArts Studio是具备数据全生命周期管理和智能数据管理能力的一站式 数据治理 平台,基于数据湖底座,提供数据集成、开发、治理等能力。针对不同的使用场景,我们提供了不同的使用方案示例: 表1 快速入门案例定位 使用案例示例 所选数据湖底座 所需最低版本 业务能力 适用场景 免费版:基于DLI的电商BI报表数据开发流程 DLI 免费版 数据开发 对数据全生命周期管理的流程诉求较低,需要全托管的大数据调度能力,适用于开发者试用、小规模验证等场景。 初级版:基于DWS的电影评分数据集成与开发流程 DWS 初级版 数据集成+数据开发 用于大数据开发场景的数据ETL任务管理等场景,但不涉及数据治理,适用于开发者试用、小规模验证等场景。 企业版:基于 MRS Hive的出租车出行的数据治理流程 MRS Hive 企业版 数据集成+数据开发+数据治理 需求全功能数据治理能力,适用于有完善的数据管理团队和体系,要进行企业信息架构、数据标准、数据模型、数据指标的落地,匹配完整的DAYU数据治理方法论。
  • 解决方案 建议您通过以下措施解决此问题: 检查 CDM 集群是否被关机。 是,将CDM集群开机后,确认管理中心的数据连接恢复正常。 否,跳转至步骤2。 检查该CDM集群是否同时被用于数据迁移作业和管理中心连接代理。 是,您可以错开数据迁移作业和管理中心连接代理的使用时间,或再创建CDM集群,与原有CDM集群分开使用。 否,跳转至步骤3。 直接重启该CDM集群,释放连接池资源。确认管理中心的数据连接恢复正常。
  • 试用初级版 您可以进入“大数据福利专场 0元试用”或“免费试用专区”活动页面,找到DataArts Studio的试用活动,配置DataArts Studio的区域后(不同区域的资源之间内网不互通,请根据您的实际需要慎重选择区域),单击购买即可进入DataArts Studio实例创建界面。 图1 试用初级版 试用初级版注意事项: 云产品体验名额有限,领完即止。 符合“参与对象”的同一用户仅能对同一产品申请一次。 试用产品的升级:用户试用过程中,主动进行升配等操作,将按照官网标准价格收费;如果进行降配或切换计费方式等,将不进行退费。 试用产品的续费:用户需要在试用期满后继续使用DataArts Studio的,应当在期满前按标准费用进行续费。
  • 使用免费版 您可以参考购买DataArts Studio基础包,直接购买DataArts Studio免费版。 图2 使用免费版 使用免费版注意事项: 免费版不自带数据集成集群,而是首次购买时赠送36小时cdm.large规格的CDM集群折扣套餐,1年内有效。使用折扣套餐包时,您需要在“ 云数据迁移 CDM”服务创建一个与DataArts Studio实例区域一致的cdm.large规格集群,集群运行时会自动扣除折扣套餐包时长,折扣套餐包时长到期后需要删除此集群,否则会产生相关费用。关于CDM服务的计费详情可参见CDM用户指南。 免费版不支持购买增量包,例如无法购买批量数据迁移增量包或作业节点调度次数/天增量包。 免费版数据开发组件的脚本数和作业数的配额限制分别为20。 免费版仅用于试用场景,在业务负荷大的场景下,无法保证免费版实例上业务的正常运行。 免费版不支持通过API调用的方式使用,仅支持控制台方式使用。 免费版受成本、资源等因素限制,提供的总数量有限。当全网免费版数量超过限额时,将无法继续创建免费版实例。 免费版支持升级到其他付费版本。升级到其他版本或删除当前免费版实例后,您可以再次购买免费版,但不能再勾选“CDM套餐包”,折扣套餐仅在首次购买免费版时赠送。
  • 解决方案 关系建模或维度建模修改字段更新表后,但实际上数据库中物理表并无变化,这是因为未对数据表更新方式做配置,此选项默认为“不更新”。 配置数据表更新方式操作如下: 在DataArts Studio控制台首页,选择实例,单击“进入控制台”,选择对应工作空间的“数据架构”模块,进入数据架构页面。 在数据架构控制台,单击左侧导航树中的“配置中心”。 单击“功能配置”页签。 配置“数据表更新方式”选择为“依据DDL更新模板”或“重建数据表”。 不更新:不更新数据库中的表。 依据DDL更新模板:依据DDL模板管理中配置的DDL更新模板,更新数据库中的表,但能否更新成功是由底层数仓引擎的支持情况决定的。由于不同类型的数仓支持的更新表的能力不同,在数据架构中所做的表更新操作,如果数仓不支持,则无法确保数据库中的表和数据架构中的表是一致的。例如,DLI类型的表更新操作不支持删除表字段,如果在数据架构的表中删除了表字段,则无法在数据库中相应的删除表字段。 如果线下数据库支持更新表结构语法,可以在DDL模板配置对应语法,之后更新操作就可以通过DataArts Studio管控;如果线下数据库不支持更新,那只有通过重建这种方式更新。 重建数据表:先删除数据库中已有的表,再重新创建表。选择该选项可以确保数据库中的表和数据架构中的表是一致的,但是由于会先删除表,因此一般建议只在开发设计阶段或测试阶段使用该选项,产品上线后不推荐使用该选项。 单击“确定”,完成配置。
  • CDM可以跨账户使用吗? CDM不支持跨账户使用,可以通过授权给同一账户 IAM 子用户使用。 IAM用户授权操作步骤如下: 创建用户组并授权 在IAM控制台创建用户组,并授予CDM集群只读权限“CDM ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择“云数据迁移服务”,进入CDM主界面查看集群,若未提示权限不足,表示“CDM ReadOnlyAccess”已生效。 在“服务列表”中选择除CDM服务外的任一服务,若提示权限不足,表示“CDM ReadOnlyAccess”已生效。 父主题: 数据集成
  • 解决办法 编辑E CS 的/etc/ssh/sshd_config文件,添加或者更新如下两个值。 ClientAliveInterval 300 ClientAliveCountMax 3 ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔,默认是0,不发送请求。然而ClientAliveInterval 300表示五分钟发送一次,然后客户端响应,这样就保持长连接了。ClientAliveCountMax的默认值3。ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值,就自动断开,正常情况下,客户端会正常响应。 修改后,重启ECS的sshd,执行如下命令: restart sshd.service 检查sshd是否启动成功(下图为成功):
  • 原因分析 获取Shell节点的运行日志。 [2021/11/17 02:00:36 GMT+0800] [INFO] No job-level agency is set, Workspace-level agency is dlg_agency, Execute job use agency dlg_agency, job id is 07572F197E4642E5BE549C2B656F157Ctm7cHkHd [2021/11/17 02:00:36 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:00:36 GMT+0800] [INFO] Get response from agent when try to submit shell running job : [2021/11/17 02:00:36 GMT+0800] [INFO] { "jobResultList":[ { "jobId":"a567f7f5-3c9e-4dfc-a464-bd477ac5b1ea", "status":"created", "errorCode":0, "failCount":0, "result":[ ] } ], "agentId":"614853ee-c1c6-456d-9aa6-fc84ad1281ed" } [2021/11/17 02:00:36 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [INFO] Job Run finish , the raw output is : [2021/11/17 02:05:56 GMT+0800] [INFO] { "jobId":"a567f7f5-3c9e-4dfc-a464-bd477ac5b1ea", "status":"failed", "errorCode":3427, "errorMessage":"Shell script job execute failed.", "failCount":0, "result":[ { "is_success":false, "exeTime":300.609 } ] } [2021/11/17 02:05:56 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [INFO] The return code is : [-1]. [2021/11/17 02:05:56 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [INFO] Execute shell script job finished. [2021/11/17 02:05:56 GMT+0800] [ERROR] Shell exit code is not 0 [2021/11/17 02:05:56 GMT+0800] [DEBUG] =============================================== [2021/11/17 02:05:56 GMT+0800] [ERROR] Shell script job execute failed. Please contact ECS Service. [2021/11/17 02:05:56 GMT+0800] [ERROR] Exception message: RuntimeException: Shell script job execute failed. Please contact ECS Service. [2021/11/17 02:05:56 GMT+0800] [ERROR] Root Cause message:RuntimeException: Shell script job execute failed. Please contact ECS Service. 确认其ECS的sshd_config参数如下。 原因分析:由于ssh session超时断开了,因此Shell节点失败。
  • 解决方案 此类问题一般是由于用户不具备MRS集群操作权限导致的。 对于租户下新增的用户,需要在MRS集群列表的界面找到对应的MRS集群实例,手动单击同步。 操作如下: 进入MRS控制台,查看现有集群,单击对应的集群名称进入概览页。 图1 MRS集群实例 在“IAM用户同步”处,单击同步。 图2 单击同步 在操作日志处查看操作结果。 图3 操作日志 如果经过上述步骤,账号已同步。但还是提示MRS权限不足的话,则需要登录到Manger管理页面中创建一个与当前主账号同名的账号。 在步骤4中,需要创建一个与当前主账号同名的账号。
  • DataArts Studio和ROMA有什么差异? 从数据运营方案(数据中台)的数据集成、数据治理以及数据开放三层结构来看,DataArts Studio和ROMA主要差别在于数据治理方面: ROMA作为连接各个系统的管道,对接入数据没有治理和规划的功能。 DataArts Studio支持对接入数据进行结构分析,重新建模,最终打破数据孤岛,帮助企业建立统一数据模型。 在实际使用中,经常需要DataArts Studio和ROMA的密切配合使用,支撑用户的数字化转型。 父主题: 咨询与计费
  • 表达式转换 使用JSP表达式语言(Expression Language)对当前字段或整行数据进行转换。JSP表达式语言可以用来创建算术和逻辑表达式。在表达式内可以使用整型数,浮点数,字符串,常量true、false和null。 数据进行转换过程中,替换内容包含特殊字符时,需要先使用\将该字符转义成普通字符。 表达式支持以下两个环境变量: value:当前字段值。 row:当前行,数组类型。 表达式支持的工具类用法罗列如下,未列出即表示不支持: 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”。 表达式:StringUtils.lowerCase(value) 将当前字段的字符串全部转为大写。 表达式:StringUtils.upperCase(value) 如果想将第1个日期字段格式从“2018-01-05 15:15:05”转换为“20180105”。 表达式:DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd") 如果想将时间戳转换成“yyyy-MM-dd hh:mm:ss”格式的日期字符串的类型,例如字段值为“1701312046588”,转换后为“2023-11-30 10:40:46”。 表达式:DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss") 如果想将“yyyy-MM-dd hh:mm:ss”格式的日期字符串转换成时间戳的类型。 表达式:DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss")) 如果当前字段值为“yyyy-MM-dd”格式的日期字符串,需要截取年,例如字段值为“2017-12-01”,转换后为“2017”。 表达式:StringUtils.substringBefore(value,"-") 如果当前字段值为数值类型,转换后值为当前值的两倍。 表达式:value*2 如果当前字段值为“true”,转换后为“Y”,其它值则转换后为“N”。 表达式:value=="true"?"Y":"N" 如果当前字段值为字符串类型,当为空时,转换为“Default”,否则不转换。 表达式:empty value? "Default":value 如果想将日期字段格式从“2018/01/05 15:15:05”转换为“2018-01-05 15:15:05”。 表达式:DateUtils.format(DateUtils.parseDate(value,"yyyy/MM/dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss") 获取一个36位的UUID(Universally Unique Identifier,通用唯一识别码)。 表达式:CommonUtils.randomUUID() 如果当前字段值为字符串类型,将首字母转换为大写,例如将“cat”转换为“Cat”。 表达式:StringUtils.capitalize(value) 如果当前字段值为字符串类型,将首字母转换为小写,例如将“Cat”转换为“cat”。 表达式:StringUtils.uncapitalize(value) 如果当前字段值为字符串类型,使用空格填充为指定长度,并且将字符串居中,当字符串长度不小于指定长度时不转换,例如将“ab”转换为长度为4的“ab”。 表达式:StringUtils.center(value,4) 删除字符串末尾的一个换行符(包括“\n”、“\r”或者“\r\n”),例如将“abc\r\n\r\n”转换为“abc\r\n”。 表达式:StringUtils.chomp(value) 如果字符串中包含指定的字符串,则返回布尔值true,否则返回false。例如“abc”中包含“a”,则返回true。 表达式:StringUtils.contains(value,"a") 如果字符串中包含指定字符串的任一字符,则返回布尔值true,否则返回false。例如“zzabyycdxx”中包含“z”或“a”任意一个,则返回true。 表达式:StringUtils.containsAny(value,"za") 如果字符串中不包含指定的所有字符,则返回布尔值true,包含任意一个字符则返回false。例如“abz”中包含“xyz”里的任意一个字符,则返回false。 表达式:StringUtils.containsNone(value,"xyz") 如果当前字符串只包含指定字符串中的字符,则返回布尔值true,包含任意一个其它字符则返回false。例如“abab”只包含“abc”中的字符,则返回true。 表达式:StringUtils.containsOnly(value,"abc") 如果字符串为空或null,则转换为指定的字符串,否则不转换。例如将空字符转换为null。 表达式:StringUtils.defaultIfEmpty(value,null) 如果字符串以指定的后缀结尾(包括大小写),则返回布尔值true,否则返回false。例如“abcdef”后缀不为null,则返回false。 表达式:StringUtils.endsWith(value,null) 如果字符串和指定的字符串完全一样(包括大小写),则返回布尔值true,否则返回false。例如比较字符串“abc”和“ABC”,则返回false。 表达式:StringUtils.equals(value,"ABC") 从字符串中获取指定字符串的第一个索引,没有则返回整数-1。例如从“aabaabaa”中获取“ab”的第一个索引1。 表达式:StringUtils.indexOf(value,"ab") 从字符串中获取指定字符串的最后一个索引,没有则返回整数-1。例如从“aFkyk”中获取“k”的最后一个索引4。 表达式:StringUtils.lastIndexOf(value,"k") 从字符串中指定的位置往后查找,获取指定字符串的第一个索引,没有则转换为“-1”。例如“aabaabaa”中索引3的后面,第一个“b”的索引是5。 表达式:StringUtils.indexOf(value,"b",3) 从字符串获取指定字符串中任一字符的第一个索引,没有则返回整数-1。例如从“zzabyycdxx”中获取“z”或“a”的第一个索引0。 表达式:StringUtils.indexOfAny(value,"za") 如果字符串仅包含Unicode字符,返回布尔值true,否则返回false。例如“ab2c”中包含非Unicode字符,返回false。 表达式:StringUtils.isAlpha(value) 如果字符串仅包含Unicode字符或数字,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumeric(value) 如果字符串仅包含Unicode字符、数字或空格,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumericSpace(value) 如果字符串仅包含Unicode字符或空格,返回布尔值true,否则返回false。例如“ab2c”中包含Unicode字符和数字,返回false。 表达式:StringUtils.isAlphaSpace(value) 如果字符串仅包含ASCII可打印字符,返回布尔值true,否则返回false。例如“!ab-c~”返回true。 表达式:StringUtils.isAsciiPrintable(value) 如果字符串为空或null,返回布尔值true,否则返回false。 表达式:StringUtils.isEmpty(value) 如果字符串中仅包含Unicode数字,返回布尔值true,否则返回false。 表达式:StringUtils.isNumeric(value) 获取字符串最左端的指定长度的字符,例如获取“abc”最左端的2位字符“ab”。 表达式:StringUtils.left(value,2) 获取字符串最右端的指定长度的字符,例如获取“abc”最右端的2位字符“bc”。 表达式:StringUtils.right(value,2) 将指定字符串拼接至当前字符串的左侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”左侧,拼接后长度为8,则转换后为“yzyzybat”。 表达式:StringUtils.leftPad(value,8,"yz") 将指定字符串拼接至当前字符串的右侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”右侧,拼接后长度为8,则转换后为“batyzyzy”。 表达式:StringUtils.rightPad(value,8,"yz") 如果当前字段为字符串类型,获取当前字符串的长度,如果该字符串为null,则返回0。 表达式:StringUtils.length(value) 如果当前字段为字符串类型,删除其中所有的指定字符串,例如从“queued”中删除“ue”,转换后为“qd”。 表达式:StringUtils.remove(value,"ue") 如果当前字段为字符串类型,移除当前字段末尾指定的子字符串。指定的子字符串若不在当前字段的末尾,则不转换,例如移除当前字段“www.domain.com”后的“.com”。 表达式:StringUtils.removeEnd(value,".com") 如果当前字段为字符串类型,移除当前字段开头指定的子字符串。指定的子字符串若不在当前字段的开头,则不转换,例如移除当前字段“www.domain.com”前的“www.”。 表达式:StringUtils.removeStart(value,"www.") 如果当前字段为字符串类型,替换当前字段中所有的指定字符串,例如将“aba”中的“a”用“z”替换,转换后为“zbz”。 表达式:StringUtils.replace(value,"a","z") 替换内容包含特殊字符时,需要先把该字符转义成普通字符,例如,客户想通过该表达式把字符串中 \t 去掉时,需要配置为: StringUtils.replace(value,"\\t","")(即把 \ 再次转义)。 如果当前字段为字符串类型,一次替换字符串中的多个字符,例如将字符串“hello”中的“h”用“j”替换,“o”用“y”替换,转换后为“jelly”。 表达式:StringUtils.replaceChars(value,"ho","jy") 如果字符串以指定的前缀开头(区分大小写),则返回布尔值true,否则返回false,例如当前字符串“abcdef”以“abc”开头,则返回true。 表达式:StringUtils.startsWith(value,"abc") 如果当前字段为字符串类型,去除字段中首、尾处所有指定的字符,例如去除“abcyx”中首尾所有的“x”、“y”、“z”和“b”,转换后为“abc”。 表达式:StringUtils.strip(value,"xyzb") 如果当前字段为字符串类型,去除字段末尾所有指定的字符,例如去除当前字段末尾的“abc”字符串。 表达式:StringUtils.stripEnd(value,"abc") 如果当前字段为字符串类型,去除字段开头所有指定的字符,例如去除当前字段开头的所有空格。 表达式:StringUtils.stripStart(value,null) 如果当前字段为字符串类型,获取字符串指定位置后(索引从0开始,包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”索引为2的字符(即c)及之后的字符串,则转换后为“cde”。 表达式:StringUtils.substring(value,2) 如果当前字段为字符串类型,获取字符串指定区间(索引从0开始,区间起点包括指定位置的字符,区间终点不包含指定位置的字符)的子字符串,区间位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后、第4个字符(即e)之前的字符串,则转换后为“cd”。 表达式:StringUtils.substring(value,2,4) 如果当前字段为字符串类型,获取当前字段里第一个指定字符后的子字符串。例如获取“abcba”中第一个“b”之后的子字符串,转换后为“cba”。 表达式:StringUtils.substringAfter(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符后的子字符串。例如获取“abcba”中最后一个“b”之后的子字符串,转换后为“a”。 表达式:StringUtils.substringAfterLast(value,"b") 如果当前字段为字符串类型,获取当前字段里第一个指定字符前的子字符串。例如获取“abcba”中第一个“b”之前的子字符串,转换后为“a”。 表达式:StringUtils.substringBefore(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符前的子字符串。例如获取“abcba”中最后一个“b”之前的子字符串,转换后为“abc”。 表达式:StringUtils.substringBeforeLast(value,"b") 如果当前字段为字符串类型,获取嵌套在指定字符串之间的子字符串,没有匹配的则返回null。例如获取“tagabctag”中“tag”之间的子字符串,转换后为“abc”。 表达式:StringUtils.substringBetween(value,"tag") 如果当前字段为字符串类型,删除当前字符串两端的控制字符(char≤32),例如删除字符串前后的空格。 表达式:StringUtils.trim(value) 将当前字符串转换为字节,如果转换失败,则返回0。 表达式:NumberUtils.toByte(value) 将当前字符串转换为字节,如果转换失败,则返回指定值,例如指定值配置为1。 表达式:NumberUtils.toByte(value,1) 将当前字符串转换为Double数值,如果转换失败,则返回0.0d。 表达式:NumberUtils.toDouble(value) 将当前字符串转换为Double数值,如果转换失败,则返回指定值,例如指定值配置为1.1d。 表达式:NumberUtils.toDouble(value,1.1d) 将当前字符串转换为Float数值,如果转换失败,则返回0.0f。 表达式:NumberUtils.toFloat(value) 将当前字符串转换为Float数值,如果转换失败,则返回指定值,例如配置指定值为1.1f。 表达式:NumberUtils.toFloat(value,1.1f) 将当前字符串转换为Int数值,如果转换失败,则返回0。 表达式:NumberUtils.toInt(value) 将当前字符串转换为Int数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toInt(value,1) 将字符串转换为Long数值,如果转换失败,则返回0。 表达式:NumberUtils.toLong(value) 将当前字符串转换为Long数值,如果转换失败,则返回指定值,例如配置指定值为1L。 表达式:NumberUtils.toLong(value,1L) 将字符串转换为Short数值,如果转换失败,则返回0。 表达式:NumberUtils.toShort(value) 将当前字符串转换为Short数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toShort(value,1) 将当前IP字符串转换为Long数值,例如将“10.78.124.0”转换为Long数值是“172915712”。 表达式:CommonUtils.ipToLong(value) 从网络读取一个IP与物理地址映射文件,并存放到Map集合,这里的URL是IP与地址映射文件存放地址,例如“http://10.114.205.45:21203/sqoop/IpList.csv”。 表达式:HttpsUtils.downloadMap("url") 将IP与地址映射对象缓存起来并指定一个key值用于检索,例如“ipList”。 表达式:CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url")) 取出缓存的IP与地址映射对象。 表达式:CommonUtils.getCache("ipList") 判断是否有IP与地址映射缓存。 表达式:CommonUtils.cacheExists("ipList") 根据IP取出对应的详细地址:国家_省份_城市_运营商,例如“1xx.78.124.0”对应的地址为“中国_广东_深圳_电信”,取不到对应地址则默认“**_**_**_**”。如果需要,可通过StringUtil类表达式对地址进行进一步拆分。 表达式:CommonUtils.getMapValue(CommonUtils.ipToLong(value),CommonUtils.cacheExists("ipLis")?CommonUtils.getCache("ipLis"):CommonUtils.setCache("ipLis",HttpsUtils.downloadMap("url"))) 根据指定的偏移类型(month/day/hour/minute/second)及偏移量(正数表示增加,负数表示减少),将指定格式的时间转换为一个新时间,例如将“2019-05-21 12:00:00”增加8个小时。 表达式:DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8) 如果value值为空或者null时,则返回字符串“aaa”,否则返回value。 表达式:StringUtils.defaultIfEmpty(value,"aaa")
  • 数据服务SDK支持的语言? 数据服务SDK是基于DataArts Studio数据服务创建的数据API封装的SDK包。通过调用此SDK包提供的代码样例,即可进行数据服务中数据API的调用,帮助开发者简单、快速地通过数据API获取到开放数据。 数据服务SDK支持的语言有:C#、Python、Go、JavaScript、PHP、C++、C、Android、Java等,详见SDK参考手册。 父主题: 数据服务
  • 什么是数据血缘关系? 大数据时代,数据爆发性增长,海量的、各种类型的数据在快速产生。这些庞大复杂的数据信息,通过联姻融合、转换变换、流转流通,又生成新的数据,汇聚成数据的海洋。 数据的产生、加工融合、流转流通,到最终消亡,数据之间自然会形成一种关系。我们借鉴人类社会中类似的一种关系来表达数据之间的这种关系,称之为数据的血缘关系。与人类社会中的血缘关系不同,数据的血缘关系还包含了一些特有的特征: 归属性:一般来说,特定的数据归属特定的组织或者个人,数据具有归属性。 多源性:同一个数据可以有多个来源(多个父亲)。一个数据可以是多个数据经过加工而生成的,而且这种加工过程可以是多个。 可追溯性:数据的血缘关系,体现了数据的生命周期,体现了数据从产生到消亡的整个过程,具备可追溯性。 层次性:数据的血缘关系是有层次的。对数据的分类、归纳、总结等对数据进行的描述信息又形成了新的数据,不同程度的描述信息形成了数据的层次。 DataArts Studio生成的血缘关系图如图1所示,为数据表对象,为作业节点对象,通过对象和箭头的编排表示血缘信息。从血缘关系图中可以看到,wk_02表数据是由wk_01表数据经过hive_1作业节点加工而生成的,wk_02表数据经由hive_2作业节点加工又分别生成了wk_03、wk_04和wk_05的表数据。 图1 数据血缘关系示例 父主题: 数据目录
  • 免费试用即将到期,如何续费? 当免费试用的DataArts Studio实例即将到期时,您可以购买DataArts Studio实例以继续使用。您可以登录DataArts Studio控制台,找到即将到期的免费试用的DataArts Studio实例,在试用的DataArts Studio实例上单击“购买DataArts Studio实例”进行购买。 购买DataArts Studio实例的具体操作,请参见购买DataArts Studio实例。在购买DataArts Studio实例时,如需保留原有DataArts Studio实例中的资源和数据,您需要注意以下几点: 购买DataArts Studio实例的区域需和免费试用的DataArts Studio实例的区域一致。 需购买同版本或更高版本的DataArts Studio实例。 试用实例的资源默认继承保留至第一个购买成功的实例中。 父主题: 咨询与计费
  • DataArts Studio支持连接哪些数据源? DataArts Studio支持对接如DLI、DWS、MRS Hive等云服务,也支持对接如MySQL、Oracle等传统数据库,支持程度各有不同,详情请参见DataArts Studio支持的数据源章节。 DataArts Studio对接数据源,即为通过管理中心创建数据源的数据连接。DataArts Studio管理中心数据连接与数据集成数据连接相互独立,使用场景各有不同。 管理中心的数据连接用于对接数据湖底座,DataArts Studio基于数据湖底座,提供一站式数据开发、治理和服务等能力。 数据集成的数据连接仅限于在数据集成中使用,用于将源端原始数据集成到目的端数据湖底座中。 父主题: 管理中心
  • 解决方案 新建MRS Hive连接时,提示无法下载配置文件,实际是用户权限不足。建议您新建一个业务用户,给对应的权限后重试即可。 如果要创建MRS安全集群的数据连接,不能使用admin用户。因为admin用户是默认的管理页面用户,这个用户无法作为安全集群的认证用户来使用。您可以创建一个新的MRS用户,然后在创建MRS数据连接时,“用户名”和“密码”填写为新建的MRS用户及其密码。 如果CDM集群为2.9.0版本及之后版本,且MRS集群为3.1.0及之后版本,则所创建的用户至少需具备Manager_viewer的角色权限才能在CDM创建连接;如果需要对MRS组件的库、表、列进行操作,还需要参考MRS文档添加对应组件的库、表、列操作权限。 如果CDM集群为2.9.0之前的版本,或MRS集群为3.1.0之前的版本,则所创建的用户需要具备Manager_administrator或System_administrator权限,才能在CDM创建连接。 仅具备Manager_tenant或Manager_auditor权限,无法创建连接。
共100000条