华为云用户手册

  • 功能说明 复制对象或按对象名前缀批量复制对象。 复制对象或批量复制时,请确保OBS桶中的源对象不发生变化,否则可能产生复制失败或者数据不一致的问题。 如果被复制对象的存储类型为cold,必须首先恢复被复制对象,否则无法复制成功。 复制时需要有被复制对象的读权限和目标桶的写权限。 如果没有开启客户端跨区域复制模式,复制的源桶和目标桶必须在同一个区域(Region)。 如果源桶是并行文件系统(POSIX),则目标桶不能是非并行文件系统。
  • 参数说明 参数 约束 描述 srcbucket 必选 源桶名。 dstbucket 必选 目标桶名。 dest 可选 复制对象时的目标对象名,或批量复制时目标对象名前缀。 key 复制对象时必选 批量复制时可选 复制对象时的源对象名,或批量复制时源对象名前缀。 规则如下: 复制对象时,该值不能为空;如果dest为空,则将源对象复制到目标桶的根目录;如果dest以“/”结尾,则目标对象名为dest+源对象名;否则,目标对象名为dest; 批量复制时,如果该值为空,则复制源桶中的所有对象;否则,复制源桶中以该值为对象名前缀的所有对象。目标对象名的确认规则为: 如果dest以“/”结尾,目标对象名为dest+源对象名; 如果dest不以“/”结尾,目标对象名为dest+/+源对象名。 说明: 批量复制且该值不为空时,若未设置flat选项,则复制时源对象名会包含上一级父对象名前缀;若设置了flat选项,则复制时源对象名不包含上一级父对象名前缀。 请参考复制示例理解该参数的使用方式。 fr 附加参数,复制对象时可选 复制对象时生成结果清单文件。 flat 附加参数,批量复制时可选 批量复制时,不包含上一级父对象名前缀。 dryRun 附加参数,可选 测试模式运行,不执行实际的复制操作。 crr 附加参数,可选 复制时使用客户端跨区域复制模式,以通过数据流的方式从源桶直接复制数据到目标桶,且两个桶可以是任意两个OBS服务的桶。 说明: 若设置了该参数,必须确保更新了配置文件中客户端跨区域复制的相关配置信息,具体可参考更新配置文件。 复制时源桶对应的配置信息为配置文件中的:akCrr/skCrr/tokenCrr/endpointCrr,目标桶对应的配置信息为配置文件中的:ak/sk/token/endpoint。 须知: 开启跨区域复制后,因为会占用执行命令主机上传和下载的双向带宽、CPU和内存等资源,可能会影响执行命令主机的性能。 vlength 附加参数,可选 复制完成后,验证目标桶对象大小是否与源桶中对象的大小一致。 说明: 必须与crr参数配合使用。 vmd5 附加参数,可选 复制完成后,验证目标桶的MD5值是否与源桶中对象的MD5值一致。 说明: 必须与crr参数配合使用。 源桶中对象必须包含元数据x-obs-meta-md5chksum,否则会忽略MD5值校验。 MD5值校验通过后,会将该值设置为目标对象元数据x-obs-meta-md5chksum,用于下载或复制时校验MD5。 u 附加参数,可选 增量复制操作,设置该参数后,复制每个源对象时会对比目标桶中对应路径的目标对象,仅在目标对象不存在,或者目标对象大小与源对象大小不一致,或者目标对象的最后修改时间早于源对象的最后修改时间时进行复制。 p 附加参数,可选 每个分段复制任务的最大并发数,默认为配置文件中的defaultParallels。 threshold 附加参数,可选 开启分段复制任务的阈值,单位:字节,默认为配置文件中的defaultBigfileThreshold。 说明: 如果待复制的源对象小于该阈值,则使用直接复制模式;否则使用分段复制模式。 直接复制模式不会产生断点记录文件,不支持断点续传。 支持带容量单位配置,例如,配置1MB代表1048576字节。 versionId 附加参数,复制对象时可选 复制单个对象时可指定的源对象版本号。 acl 附加参数,可选 复制对象时可指定的目标对象的预定义访问策略。支持的值: private public-read public-read-write bucket-owner-full-control 说明: 以上四个值分别对应:私有读写、公共读、公共读写、桶拥有者完全控制,四种预定义访问策略。 sc 附加参数,可选 复制对象时可指定的目标对象的存储类型。支持的值: standard:标准存储,访问时延低、吞吐量高,适用于有大量热点文件(平均一个月多次)或小文件(小于1MB)。 warm:低频访问存储,可用性略低于standard,适用于不频繁访问(平均一年少于12次)但在需要时也要求快速访问数据的业务场景。 cold:归档存储,安全、持久且成本极低,适用于很少访问(平均一年访问一次)数据的业务场景。 meta 附加参数,可选 复制对象时可指定的目标对象的标准和自定义元数据。格式为:key1:value1#key2:value2#key3:value3。 说明: 以上值表示复制对象完成后,桶内目标对象包含三组自定义元数据,分别为:key1:value1、key2:value2、key3:value3。 标准元数据头包括:Content-Type、Content-Encoding、Cache-Control、Content-Disposition、Content-Language、Expires。 fs 附加参数,可选 是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。 注意: 该列举方式会因为目录结构,耗时会差别很大。 该参数开启后,会忽略marker和limit值,统计桶或者并行文件系统或者指定目录的大小。 Util 5.5.12版本及以上支持该参数。 ps 附加参数,可选 每个分段复制任务的段大小,单位:字节,取值范围是100KB~5GB,默认为配置文件中的defaultPartSize。 说明: 支持带容量单位配置,例如,配置1MB代表1048576字节。 支持配置为auto,此时obsutil会根据源对象大小自动设置每个分段任务的段大小。 cpd 附加参数,可选 生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。 说明: 每个分段复制任务会产生唯一对应的断点记录文件并保存至该文件夹的copy子文件夹下,分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。 r 附加参数,批量复制时必选 按指定源桶的对象名前缀批量复制对象。 f 附加参数,批量复制时可选 强制操作,不进行询问提示。 j 附加参数,批量复制时可选 批量复制时的最大并发数,默认为配置文件中的defaultJobs。 说明: 工具会保证该值至少为1。 exclude 附加参数,批量复制时可选 不包含源对象的匹配模式,如:*.txt。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符,例如abc*.txt代表匹配以abc开头以.txt结尾的任意文件。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 如果待复制的对象名匹配该参数,则跳过该对象的复制。 须知: 建议使用引号传递该匹配模式( macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个exclude参数,如 -exclude=*.xxx -exclude=*.xxx。 include 附加参数,批量复制时可选 包含源对象的匹配模式,如:*.jpg。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 首先执行exclude的匹配规则,如果待复制的对象名不匹配exclude,则判断待复制的对象名是否匹配该参数,如果匹配则复制该对象,否则跳过该文件的复制。 须知: 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个include参数,如-include=*.xxx -include=*.xxx。 timeRange 附加参数,批量复制时可选 复制对象时的时间段匹配模式,仅复制最后修改时间在该时间段内的对象。 该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。 说明: 使用“time1-time2”,代表匹配的时间段,其中time1必须小于等于time2,格式为yyyyMMddHHmmss。 时间格式支持自动补全,例如yyyyMMdd等价于yyyyMMdd000000,yyyyMM等价于yyyyMM01000000。 使用“*-time2”,代表匹配最后修改时间在time2之前的所有文件,使用“time1-*”,代表匹配最后修改时间time1之后的所有文件。 须知: 该匹配模式表示的时间是UTC时间。 该匹配模式仅适用于对象名非“/”结尾的对象。 mf 附加参数,可选 设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。 o 附加参数,可选 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果和警告结果三个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。 说明: 结果清单文件命名规则:cp_{succeed | failed | warning}_report_时间_TaskId.txt。 单个结果清单文件默认情况下最大为30MB且最大可保留的文件个数为1024,可在配置文件中通过recordMaxLogSize和recordBackups分别配置。 当涉及多文件/文件夹时,如需确认失败任务的具体错误信息,可参考结果清单文件夹下的失败结果清单文件"cp_failed_report_时间_TaskId.txt"及日志路径下的日志文件。 config 附加参数,可选 运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 e 附加参数,可选 指定终端节点。 i 附加参数,可选 指定用户的AK。 k 附加参数,可选 指定用户的SK。 t 附加参数,可选 指定用户的securitytoken。
  • 命令结构 Windows操作系统 移动单个对象 obsutil mv obs://srcbucket/key obs://dstbucket/[dest] [-dryRun] [-u] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] 批量移动对象 obsutil mv obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun] [-f] [-flat] [-u] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] macOS/Linux操作系统 移动单个对象 ./obsutil mv obs://srcbucket/key obs://dstbucket/[dest] [-dryRun] [-u] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] 批量移动对象 ./obsutil mv obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun] [-f] [-flat] [-u] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] 移动的源路径和目标路径不能完全相同。 批量移动时,源路径和目标路径不能相互嵌套。 不支持对并行文件系统的批量移动的操作。
  • 参数说明 参数 约束 描述 srcbucket 必选 源桶名。 dstbucket 必选 目标桶名。 dest 可选 移动对象时的目标对象名,或批量移动时目标对象名前缀。 key 移动对象时必选 批量移动时可选 移动对象时的源对象名,或批量移动时源对象名前缀。 规则如下: 移动对象时,该值不能为空;如果dest为空,则将源对象移动到目标桶的根目录;如果dest以“/”结尾,则目标对象名为dest+源对象名;否则,目标对象名为dest; 批量移动时,如果该值为空,则移动源桶中的所有对象;否则,移动源桶中以该值为对象名前缀的所有对象。目标对象名的确认规则为: 如果dest以“/”结尾,目标对象名为dest+源对象名; 如果dest不以“/”结尾,目标对象名为dest+/+源对象名。 说明: 批量移动且该值不为空时,若未设置flat选项,则移动时源对象名会包含上一级父对象名前缀;若设置了flat选项,则移动时源对象名不包含上一级父对象名前缀。 请参考移动命令结构理解该参数的使用方式。 fr 附加参数,移动对象时可选 移动对象时生成结果清单文件。 flat 附加参数,批量移动时可选 移动时,不包含上一级父对象名前缀。 dryRun 附加参数,可选 测试模式运行,不执行实际的移动操作。 u 附加参数,可选 增量移动操作,设置该参数后,移动每个源对象时会对比目标桶中对应路径的目标对象,仅在目标对象不存在,或者目标对象大小与源对象大小不一致,或者目标对象的最后修改时间早于源对象的最后修改时间时进行移动。 说明: 如果目标对象与源对象大小以及修改时间都一致,此时会直接删除源对象,而不进行移动操作。 p 附加参数,可选 每个分段移动任务的最大并发数,默认为配置文件中的defaultParallels。 threshold 附加参数,可选 开启分段移动任务的阈值,单位:字节,默认为配置文件中的defaultBigfileThreshold。 说明: 如果待移动的源对象小于该阈值,则使用直接移动模式;否则使用分段移动模式。 直接移动模式不会产生断点记录文件,不支持断点续传。 支持带容量单位配置,例如,配置1MB代表1048576字节。 versionId 附加参数,移动对象时可选 移动单个对象时可指定的源对象版本号。 说明: POSIX桶无version概念,故POSIX桶不支持versionId选项。 acl 附加参数,可选 移动对象时可指定的目标对象的预定义访问策略。支持的值: private public-read public-read-write bucket-owner-full-control 说明: 以上四个值分别对应:私有读写、公共读、公共读写、桶拥有者完全控制,四种预定义访问策略。 sc 附加参数,可选 移动对象时可指定的目标对象的存储类型。支持的值: standard:标准存储,访问时延低、吞吐量高,适用于有大量热点文件(平均一个月多次)或小文件(小于1MB)。 warm:低频访问存储,可用性略低于standard,适用于不频繁访问(平均一年少于12次)但在需要时也要求快速访问数据的业务场景。 cold:归档存储,安全、持久且成本极低,适用于很少访问(平均一年访问一次)数据的业务场景。 meta 附加参数,可选 移动对象时可指定的目标对象的自定义元数据。格式为:key1:value1#key2:value2#key3:value3。 说明: 以上值表示移动对象完成后,桶内目标对象包含三组自定义元数据,分别为:key1:value1、key2:value2、key3:value3。 fs 附加参数,可选 是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。 注意: 该列举方式会因为目录结构,耗时会差别很大。 该参数开启后,会忽略marker和limit值,统计桶或者并行文件系统或者指定目录的大小。 Util 5.5.12版本及以上支持该参数。 ps 附加参数,可选 每个分段移动任务的段大小,单位:字节,取值范围是100KB~5GB,默认为配置文件中的defaultPartSize。 说明: 支持带容量单位配置,例如,配置1MB代表1048576字节。 支持配置为auto,此时obsutil会根据源对象大小自动设置每个分段任务的段大小。 cpd 附加参数,可选 生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。 说明: 每个分段移动任务会产生唯一对应的断点记录文件并保存至该文件夹的copy子文件夹下,分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。 r 附加参数,批量移动时必选 按指定源桶的对象名前缀批量移动对象。 f 附加参数,批量移动时可选 强制操作,不进行询问提示。 j 附加参数,批量移动时可选 批量移动时的最大并发数,默认为配置文件中的defaultJobs。 说明: 工具会保证该值至少为1。 exclude 附加参数,批量移动时可选 不包含源对象的匹配模式,如:*.txt。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符,例如abc*.txt代表匹配以abc开头以.txt结尾的任意文件。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 如果待移动的对象名匹配该参数,则跳过该对象的移动。 须知: 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个exclude参数,如-exclude=*.xxx -exclude=*.xxx include 附加参数,批量移动时可选 包含源对象的匹配模式,如:*.jpg。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 首先执行exclude的匹配规则,如果待移动的对象名不匹配exclude,则判断待移动的对象名是否匹配该参数,如果匹配则移动该对象,否则跳过该文件的复制。 须知: 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个include参数,如-include=*.xxx -include=*.xxx timeRange 附加参数,批量移动时可选 移动对象时的时间段匹配模式,仅移动最后修改时间在该时间段内的对象。 该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。 说明: 使用“time1-time2”,代表匹配的时间段,其中time1必须小于等于time2,格式为yyyyMMddHHmmss。 时间格式支持自动补全,例如yyyyMMdd等价于yyyyMMdd000000,yyyyMM等价于yyyyMM01000000。 使用“*-time2”,代表匹配最后修改时间在time2之前的所有文件,使用“time1-*”,代表匹配最后修改时间time1之后的所有文件。 须知: 该匹配模式表示的时间是UTC时间。 该匹配模式仅适用于对象名非“/”结尾的对象。 mf 附加参数,可选 设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。 o 附加参数,可选 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果和警告结果三个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。 说明: 结果清单文件命名规则:mv_{succeed | failed | warning}_report_时间_TaskId.txt。 单个结果清单文件默认情况下最大为30MB且最大可保留的文件个数为1024,可在配置文件中通过recordMaxLogSize和recordBackups分别配置。 当涉及多文件/文件夹时,如需确认失败任务的具体错误信息,可参考结果清单文件夹下的失败结果清单文件"mv_failed_report_时间_TaskId.txt"及日志路径下的日志文件; config 附加参数,可选 运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 e 附加参数,可选 指定终端节点。 i 附加参数,可选 指定用户的AK。 k 附加参数,可选 指定用户的SK。 t 附加参数,可选 指定用户的securitytoken。
  • Windows操作系统下,下载对象时发现本地和云上对象数量不一致 如果发现下载后本地文件和文件夹数量之和小于云上对象数量(OBS不区分文件或文件夹,统称为对象),并且当前操作系统是Windows,这个是因为Windows文件系统将文件和目录名称视为不区分大小写,FOO.txt和foo.txt将被视为相同文件;但是在OBS中是区分大小写的,FOO.txt和foo.txt将被视为不同文件。 比如桶中存在以下对象(大小写不一致): obsutil ls obs://test Start at 2024-01-17 01:33:37.6378193 +0000 UTC Listing objects . Folder list: obs://test/TEST/ obs://test/test/ Object list: key LastModified Size StorageClass ETag obs://test/TEST/FOO.txt 2024-01-17T01:33:21Z 493B standard "735b0ca5680bfa12d8895702662192ec" obs://test/test/foo.txt 2024-01-17T01:32:59Z 5B standard "5d41402abc4b2a76b9719d911017c592" Total size of bucket: 498B Folder number: 2 File number: 2 使用cp命令下载整个桶的对象到Windows的test目录下: obsutil cp obs://test ./test -r -f Start at 2024-01-17 01:39:40.4700311 +0000 UTC Parallel: 5 Jobs: 5 Threshold: 50.00MB PartSize: auto VerifyLength: false VerifyMd5: false CheckpointDir: C:\Users\Administrator\.obsutil_checkpoint Task id: 72c5ac1c-68c0-4206-95d6-18a193bfa77e OutputDir: C:\Users\Administrator\.obsutil_output TempFileDir: C:\Users\Administrator\temp [---------------------------] 100.00% tps:484.98 162.11KB/s 4/4 498B/498B 205ms Succeed count: 4 Failed count: 0 Succeed bytes: 498B Metrics [max cost:86 ms, min cost:85 ms, average cost:43.25 ms, average tps:9.13, transfered size:498B] Task id: 72c5ac1c-68c0-4206-95d6-18a193bfa77e 使用dir /b /s 查看test路径下的所有文件和文件夹以及子目录下的文件,发现只保留了文件夹TEST\和文件TEST\foo.txt。 在该场景下本地文件不一定对应原始OBS文件,在这个例子中,本地TEST\foo.txt 是云上TEST/FOO.txt,而非test/foo.txt,这个因下载成功顺序而导致结果不同。 针对文件夹,以首次文件夹名下载成功为准,比如TEST/优先 test/下载成功,则最后本地文件夹只有TEST\。 针对文件,文件名以首次文件名下载成功为准,文件内容以最后一次下载成功为准,比如云上的对象test/foo.txt优先TEST/FOO.txt下载成功,则最后本地文件只有foo.txt(文件名),但是文件内容是FOO.txt的内容。 父主题: 常见问题
  • 修订记录 发布日期 修订记录 2024-01-19 第八次正式发布。 修改章节: SDK下载,优化兼容性描述内容。 2024-01-05 第七次正式发布。 新增章节: 如何解决 Declaration of xxxx must be compatible with xxxx?。 2019-11-20 第六次正式发布。 调整以下章节的位置: 示例程序 技术支持渠道 2019-03-30 第五次正式发布。 新增章节: API参考。 2019-01-17 第四次正式发布。 修改章节: SDK下载,新增SDK源码地址。 安装SDK,新增“使用composer安装”方式。 使用临时URL进行授权访问,优化描述内容。 对象上传简介,新增对象链接地址格式拼接规则。 2018-10-31 第三次正式发布。 新增章节: “管理桶策略” “基于表单上传” 修改章节: “使用URL进行授权访问”,增加示例代码。 2018-01-31 第二次正式发布。 调整章节: “快速入门”,新增OBS服务端环境搭建、开发环境准备、安装SDK、获取服务地址、引入依赖。 “相关资源”,新增示例程序,移除OBS服务端环境搭建。 “初始化”,移除服务地址。 新增章节: 桶存储类型 修改章节: 设置对象属性,新增设置对象存储类型小节。 “临时授权访问”,修改示例代码。 设置生命周期规则,新增设置对象转换策略小节。 2017-11-30 第一次正式发布。
  • 兼容性 版本修订记录信息:ChangeLog。 推荐的PHP版本:PHP 5.6,PHP 7.x。 PHP SDK 3.22.6 及以上版本至少需要PHP 7.1 版本才支持使用。 PHP SDK最高只兼容到PHP 8.1版本, 不支持PHP 8.2 及以上版本。 命名空间:与旧版本(2.1.x)不兼容,对外公开的类和函数均调整到Obs命名空间下。 接口函数:与旧版本(2.1.x)不完全兼容,接口变化如下表: 接口函数 变化说明 ObsClient.setBucketCors 请求参数中CorsRule字段改名为CorsRules。 ObsClient.getBucketCors 响应结果中CorsRule字段改名为CorsRules。 ObsClient.setBucketTagging 请求参数中TagSet字段改名为Tags。 ObsClient.getBucketTagging 响应结果中TagSet字段改名为Tags。
  • 如何解决 Declaration of xxxx must be compatible with xxxx? 如果遇到这种报错,基本上都是版本不兼容导致的,因为社区开源软件依赖会不定期更新。比如遇到以下报错: Declaration of Obs\Internal\Common\CheckoutStream::read($length) must be compatible with Psr\Http\Message\StreamInterface::read(int $length) 从报错得知,CheckoutStream::read($length) 缺少int类型声明,很大可能就是psr/http-message版本太高(可以从composer.lock找到准确的版本号),另外查看Github社区发现psr/http-message 1.1版本升级到2.0 增加了类型声明,最后降低psr/http-message 版本为1.1解决问题。 父主题: 常见问题
  • 提交Spark作业 用户需要在数据开发模块中创建一个作业,通过作业的 DLI Spark节点提交Spark作业。 创建一个数据开发模块空作业,作业名称为“job_DLI_Spark”。 图3 创建作业 然后进入作业开发页面,拖动DLI Spark节点到画布并单击,配置节点的属性。 图4 配置节点属性 关键属性说明: DLI集群名称:DLI中创建的Spark集群。 作业运行资源:DLI Spark节点运行时,限制最大可以使用的CPU、内存资源。 作业主类:DLI Spark节点的主类,本例的主类是“org.apache.spark.examples.SparkPi”。 Jar包资源:3中创建的资源。 作业编排完成后,单击,测试运行作业。 图5 作业日志(仅参考) 如果日志运行正常,保存作业并提交版本。
  • 场景说明 用户在使用DLI服务时,大部分时间会使用SQL对数据进行分析处理,有时候处理的逻辑特别复杂,无法通过SQL处理,那么可以通过Spark作业进行分析处理。本章节通过一个例子演示如何在数据开发模块中提交一个Spark作业。 操作流程如下: 创建DLI集群,通过DLI集群的物理资源来运行Spark作业。 获取Spark作业的演示JAR包,并在数据开发模块中关联到此JAR包。 创建数据开发模块作业,通过DLI Spark节点提交Spark作业。
  • 启动作业调度 登录 DataArts Studio 控制台。选择实例,单击“进入控制台”,选择对应工作空间的“数据开发”模块,进入数据开发页面。 图1 选择数据开发 在数据开发控制台,单击左侧导航栏中的作业开发按钮,进入作业开发页面后,打开已完成血缘配置的作业。 在数据开发中,当作业进行“执行调度”时,系统开始解析血缘关系。 测试运行不会解析血缘。 图2 作业调度 待调度作业成功运行完成后,等待约1分钟左右,数据血缘关系即可生成成功。
  • 新建物理模型 在DataArts Studio控制台首页,选择实例,单击“进入控制台”,选择对应工作空间的“数据架构”模块,进入数据架构页面。 图1 选择数据架构 在数据架构控制台,单击左侧导航树中的“关系建模”。 在“关系建模”页面,如果当前未创建过关系模型,系统会弹出“新建分层治理模型”提示框,提示您创建关系建模下SDI和DWI层的物理模型。如果不是首次创建,可在物理模型处单击按钮新建物理模型。 根据 数据治理 方法论,以及关系建模和维度建模方法,数仓分层的模型默认为4层,层级含义介绍如下: 关系建模下包含SDI层和DWI层两层模型,物理模型归属于两层模型之一。 SDI:Source Data Integration,又称贴源数据层。SDI是源系统数据的简单落地。 DWI:Data Warehouse Integration,又称数据整合层。DWI整合多个源系统数据,对源系统进来的数据进行整合、清洗,并基于三范式进行关系建模。 维度建模需要基于维度,新建DWR层模型,最终将数据汇总到DM层模型中。 DWR:Data Warehouse Report,又称数据报告层。DWR基于多维模型,和DWI层数据粒度保持一致。 DM (Data Mart):又称数据集市。DM面向展现层,数据有多级汇总。 数仓分层的4层层级的名称支持由管理员自定义,单击层级名后的即可重命名。重命名建议能够区分不同层级,规则为只能包含英文字母、中文、数字、下划线,且以英文字母或中文开头。 图2 新建分层治理模型 图3 新建物理模型 在弹出窗口中配置如下参数,然后单击“确定”。 图4 配置物理模型 表1 参数描述 参数名称 说明 *模型名称 只能包含中文、英文字母、数字和下划线。 *数据连接类型 下拉选择数据连接类型。 数仓分层 下拉选择SDI或DWI分层。 SDI:Source Data Integration,又称贴源数据层。SDI是源系统数据的简单落地。 DWI:Data Warehouse Integration,又称数据整合层。DWI整合多个源系统数据,对源系统进来的数据进行整合、清洗,并基于三范式进行关系建模。 描述 描述信息。支持的长度0~600字符。
  • 新建企业模式工作空间 如果您之前未使用过简单模式、无需继承业务数据,则可以直接新建新企业模式工作空间。 创建工作空间 使用具有DAYU Administrator、Tenant Administrator权限的账号进入DataArts Studio控制台。 单击控制台的“空间管理”页签,进入工作空间页面。 单击“新建”,在空间信息页面请根据页面提示配置参数,参数说明如表1所示,配置完成后,单击“确定”完成工作空间的创建。 图6 空间信息 表1 新建空间参数说明 参数名 说明 空间名称 空间名称,只能包含字母、数字、下划线、中划线、中文字符,且长度不超过32个字符。在当前的DataArts Studio实例中,工作空间名称必须唯一。 空间描述 空间的描述信息。 空间模式 选择工作空间为简单模式还是企业模式。新建企业模式工作空间时,此处需配置为企业模式。 企业项目 DataArts Studio实例默认工作空间关联的企业项目。企业项目管理是一种按企业项目管理云资源的方式,具体请参见《企业管理用户指南》。 如果已经创建了企业项目,这里才可以选择。当DataArts Studio实例需连接云上服务(如DWS、 MRS 、RDS等),还必须确保DataArts Studio工作空间的企业项目与该云服务实例的企业项目相同。 一个企业项目下只能购买一个DataArts Studio实例。 需要与其他云服务互通时,需要确保与其他云服务的企业项目一致。 作业日志OBS路径 用于指定DataArts Studio数据开发作业的日志存储的OBS桶。工作空间成员如需使用DataArts Studio数据开发,必须具备“作业日志OBS桶”的读、写权限,否则,在使用过程中,系统将无法正常读、写数据开发的作业日志。 单击“请选择”按钮,您可以选择一个已创建的OBS桶和对象,系统将基于工作空间全局配置作业日志OBS桶。 如果不配置该参数,DataArts Studio数据开发的作业日志默认存储在以“dlf-log-{projectId}”命名的OBS桶中,{projectId}即项目ID。 DLI脏数据OBS路径 用于指定DataArts Studio数据开发中DLI SQL执行过程中的脏数据存储的OBS桶。工作空间成员如需使用DataArts Studio数据开发执行DLI SQL,必须具备“DLI脏数据OBS桶”的读、写权限,否则,在使用过程中,系统将无法正常读、写DLI SQL执行过程中的脏数据。 单击“请选择”按钮,您可以选择一个已创建的OBS桶和对象,系统将基于工作空间全局配置DLI脏数据OBS桶。 如果不配置该参数,DataArts Studio数据开发的DLI SQL脏数据默认存储在以“dlf-log-{projectId}”命名的OBS桶中。 DLM专享版API配额 该参数对应值分别表示已使用配额/已分配配额/总使用配额/总分配配额/总配额。 数据服务专享版会对已创建的API按需计费,默认上限为0时,不可创建API。 初始工作空间具有10个API的试用额度。已分配配额可以修改,但不能小于已使用配额,不能大于总配额-总分配配额+已分配配额。 创建后操作 创建后需要管理员手工新建数据连接、配置环境隔离,并按照组织分工在工作空间处定义管理员、开发者、部署者、运维者等角色。 新建数据连接:请参考新建数据连接。 配置环境隔离:请参考配置企业模式环境隔离。 为其他用户定义工作空间角色:请参见添加工作空间成员和角色。 另外,新建企业模式工作空间,还需要您在数据开发中配置空间级别的公共委托或公共 IAM 账号。配置委托的操作详情可参见配置调度身份。 图7 配置工作空间委托
  • 简单模式升级企业模式 对于简单模式的工作空间,DAYU Administrator、Tenant Administrator可以直接将其升级为企业模式。 升级前操作 如果您需要升级工作空间模式,需要在数据开发中配置空间级别的公共委托或公共IAM账号,避免升级失败。 配置委托的操作详情可参见配置调度身份。 图4 配置工作空间委托 升级操作 登录DataArts Studio控制台。 找到所需要的DataArts Studio实例,在DataArts Studio实例上单击“进入控制台”。然后,选择“空间管理”页签。 在“空间管理”页面,找到需要升级模式的工作空间,单击其所在行的“编辑”,此时显示“空间信息”页面。 在“空间信息”页面,单击“空间模式”后的“升级”按钮,弹出确认界面后,单击“确认升级”您就可以将该工作空间升级为企业模式。 图5 升级企业模式 升级后操作 升级后需要管理员手工修改数据连接、配置环境隔离,并按照组织分工在工作空间处定义管理员、开发者、部署者、运维者等角色。 修改数据连接:请参考新建数据连接。 配置环境隔离:请参考配置企业模式环境隔离。 为其他用户定义工作空间角色:请参见添加工作空间成员和角色。
  • 前提条件 创建工作空间模式前,您需要先了解以下内容: 已了解简单模式与企业模式工作空间的区别,包括不同工作空间的开发流程等差异,详情请参见简单模式与企业模式介绍。 已配置空间级的身份调度,包含公共委托和公共IAM账号,详情请参见配置公共委托和配置公共IAM账号。 已准备好两套相互隔离的 数据湖 引擎,用于隔离开发和生产环境。 配置两套数据湖服务,进行开发与生产环境隔离。 对于集群化的数据源(例如MRS、DWS、RDS、MySQL、Oracle、DIS、E CS 等),DataArts Studio通过管理中心的创建数据连接区分开发环境和生产环境的数据湖服务,在开发和生产流程中自动切换对应的数据湖。因此您需要准备两套数据湖服务,且两套数据湖服务的版本、规格、组件、区域、VPC、子网以及相关配置等信息,均应保持一致,详细操作请参见新建数据连接。 创建数据连接时,通过不同的集群来进行开发与生产环境的隔离,如图1所示。 图1 创建数据连接时选择不同集群 配置DLI环境隔离。 配置企业模式环境隔离,包含DLI队列配置和DB配置。 对于Serverless服务(例如DLI),DataArts Studio通过管理中心的环境隔离来配置生产环境和开发环境数据湖服务的对应关系,在开发和生产流程中自动切换对应的数据湖。因此您需要在Serverless数据湖服务中准备两套队列、两套数据库资源,建议通过名称后缀进行区分,详细操作请参见配置企业模式环境隔离。 配置DB,在同一个数据湖服务下配置两套数据库,进行开发与生产环境隔离。 对于DWS、MRS Hive和MRS Spark这三种数据源,如果在创建数据连接时选择同一个集群,如图2所示,则需要配置数据源资源映射的DB数据库映射关系进行开发生产环境隔离,如图3所示。详细操作请参见DB配置。 图2 创建数据连接时选择同一个集群 图3 DB配置 数据准备与同步 数据湖服务创建完成后,您需要按照项目规划(例如数据开发需要操作的库表等),分别在开发和生产环境的数据湖服务中,新建数据库、数据库模式(仅DWS需要)、数据表等。 对于集群化的数据源(例如MRS、DWS、RDS、MySQL、Oracle、DIS、ECS),使用两套集群资源,两套环境中的数据库、数据库模式(仅DWS需要)和数据表必须保持同名。 对于Serverless服务(例如DLI),两套队列和两套数据库建议通过名称和后缀(开发环境添加后缀“_dev”,生产环境无后缀)进行关联与区分,数据表必须保持同名。 对于DWS、MRS Hive和MRS Spark数据源,如果使用一套相同的集群资源,通过两个数据库(开发环境添加后缀“_dev”,生产环境无后缀)进行开发生产环境隔离,两套环境中数据库模式(仅DWS需要)和数据表必须保持同名。 数据库、数据库模式(仅DWS需要)、数据表等新建完成后,如果涉及原始数据表等,您还需要将两套数据湖服务之间的数据进行同步: 数据湖中已有数据:通过 CDM 或DRS等数据迁移服务,在数据湖间批量同步数据。 数据源待迁移数据:通过对等的CDM或DRS等数据迁移服务作业进行同步,保证生产环境和开发环境的数据湖服务数据一致。
  • 参数说明 表5 DLI数据表 参数 是否必选 说明 基本属性 表名 是 数据表的名称。只能包含英文小写字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 别名 否 数据表的别名,只能包含中文字符、英文字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 数据连接类型 是 数据表所属的数据连接类型。系统默认。 数据连接 是 数据表所属的数据连接。系统默认。 数据库 是 数据表所属的数据库。系统默认。 数据位置 是 选择数据存储的位置: OBS DLI 数据格式 是 选择数据的格式。“数据位置”为“OBS”时,配置该参数。 parquet:支持读取不压缩、snappy压缩、gzip压缩的parquet数据。 csv:支持读取不压缩、gzip压缩的csv数据。 orc:支持读取不压缩、snappy压缩的orc数据。 json:支持读取不压缩、gzip压缩的json数据。 路径 是 选择数据存储的OBS路径。“数据位置”为“OBS”时,配置该参数。 如果OBS路径不存在或者OBS桶不存在,系统支持可以自动创建obs目录。 说明: 如果OBS桶创建超过上限,系统会自动提示“创建obs目录失败,错误原因:[Create OBS Bucket failed:TooManyBuckets:You have attempted to create more buckets than allowed]”。 表描述 否 数据表的描述信息。 表结构 列类型 是 选择列类型。包含分区列和普通列。系统默认普通列。 列名 是 填写列名,列名不能重复。 类型 是 选择数据类型,具体说明请参见《 数据湖探索 SQL语法参考》的数据类型。 列描述 否 填写列的描述信息。 操作 否 单击,增加列。 单击,删除列。 表6 DWS数据表 参数 是否必选 说明 基本属性 表名 是 数据表的名称。只能包含英文字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 别名 否 数据表的别名,只能包含中文字符、英文字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 数据连接类型 是 数据表所属的数据连接类型。系统默认。 数据连接 是 数据表所属的数据连接。系统默认。 数据库 是 数据表所属的数据库。系统默认。 模式 是 选择数据库的模式。 表描述 否 数据表的描述信息。 高级选项 否 提供以下高级选项: 选择数据表的存储方式 行存模式 列存模式 选择数据表的压缩级别 行存模式:压缩级别的有效值为YES/NO。 列存模式:压缩级别的有效值为YES/NO/LOW/MIDDLE/HIGH,还可以配置列存模式同一压缩级别下不同的压缩水平0-3(数值越大,表示同一压缩级别下压缩比越大)。 表结构 列名 是 填写列名,列名不能重复。 数据分类 是 选择数据类型的类别: 数值类型 货币类型 布尔类型 二进制类型 字符类型 时间类型 几何类型 网络地址类型 位串类型 文本搜索类型 UUID类型 JSON类型 对象标识符类型 类型 是 选择数据类型,具体说明请参见《 数据仓库 服务开发指南》的数据类型。 列描述 否 填写列的描述信息。 是否建ES索引 否 单击复选框时,表示需要建立ES索引。建立ES索引时,请同时在“CloudSearch集群名”中选择建立好的 CSS 集群。如何创建CSS集群,请参见《 云搜索服务 用户指南》的创建集群。 ES索引数据类型 否 选择ES索引的数据类型: text keyword date long integer short byte double boolean binary 操作 否 单击,增加列。 单击,删除列。 表7 MRS Hive数据表 参数 是否必选 说明 基本属性 表名 是 数据表的名称。只能包含英文小写字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 别名 否 数据表的别名,只能包含中文字符、英文字母、数字、“_”,不能为纯数字,不能以“_”开头,且长度为1~63个字符。 数据连接类型 是 数据表所属的数据连接类型。系统默认。 数据连接 是 选择数据表所属的数据连接。系统默认。 数据库 是 选择数据表所属的数据库。系统默认。 表描述 否 数据表的描述信息。 表结构 列名 是 填写列名,列名不能重复。 数据分类 是 选择数据类型的类别: 原始类型 ARRAY MAP STRUCT UNION 类型 是 选择数据类型,具体说明请参见LanguageManual DDL。 列描述 否 填写列的描述信息。 操作 否 单击,增加列。 单击,删除列。
  • 配置作业参数 作业参数为全局参数,可用于作业中的任意节点。操作方法如下: 单击编辑器右侧的“参数”,展开配置页面,配置如表5所示的参数。 表5 作业参数配置 功能 说明 变量 新增 单击“新增”,在文本框中填写作业参数的名称和参数值。 参数名称 名称只能包含字符:英文字母、数字、中划线和下划线。 参数值 字符串类的参数直接填写字符串,例如:str1 数值类的参数直接填写数值或运算表达式。 参数配置完成后,在作业中的引用格式为:${参数名称} 编辑参数表达式 在参数值文本框后方,单击,编辑参数表达式,更多表达式请参见表达式概述。 修改 在参数名和参数值的文本框中直接修改。 掩码显示 在参数值为密钥等情况下,从安全角度,请单击将参数值掩码显示。 删除 在参数值文本框后方,单击,删除作业参数。 常量 新增 单击“新增”,在文本框中填写作业常量的名称和参数值。 参数名称 名称只能包含字符:英文字母、数字、中划线和下划线。 参数值 字符串类的参数直接填写字符串,例如:str1 数值类的参数直接填写数值或运算表达式。 参数配置完成后,在作业中的引用格式为:${参数名称} 编辑参数表达式 在参数值文本框后方,单击,编辑参数表达式,更多表达式请参见表达式概述。 修改 在参数名和参数值的文本框中直接修改,修改完成后,请保存。 删除 在参数值文本框后方,单击,删除作业常量。 工作空间环境变量 查看工作空间已配置的变量和常量。 单击“作业参数预览”页签,展开预览页面,配置如表6所示的参数。 表6 作业参数预览 功能 说明 当前时间 仅单次调度才显示。系统默认为当前时间。 事件触发时间 仅事件驱动调度才显示。系统默认为事件触发时间。 周期调度 仅周期调度才显示。系统默认为调度周期。 具体时间 仅周期调度才显示。周期调度配置的具体运行时间。 起始日期 仅周期调度才显示。周期调度的生效时间。 后N个实例 作业运行调度的实例个数。 单次调度场景默认为1。 事件驱动调度场景默认为1。 周期调度场景 当实例数大于10时,系统最多展示10个日期实例,系统会自动提示“当前参数预览最多支持查看10个实例”。 在作业参数预览中,如果作业参数配置存在语法异常情况系统会给出提示信息。 如果参数配置了依赖作业实际运行时产生的数据,参数预览功能中无法模拟此类数据,则该数据不展示。
  • 备份资产 登录DataArts Studio控制台。选择实例,单击“进入控制台”,选择对应工作空间的“数据开发”模块,进入数据开发页面。 图1 选择数据开发 在数据开发主界面的左侧导航栏,选择“备份管理”。 单击“启动每日备份”,打开“OBS文件浏览”页面,选择OBS文件夹,设置备份数据的存储位置。 图2 备份管理 每日备份在每日0点开始备份昨日的所有作业、脚本、资源和环境变量,启动当日不会备份昨日的作业、脚本、资源和环境变量。 选择OBS存储路径时,若仅选择至桶名层级,则备份对象自动存储在以“备份日期”命名的文件夹内。环境变量,资源,脚本和作业分别存储在1_env,2_resources,3_scripts和4_jobs文件夹内。 备份成功后,在以“备份日期”命名的文件夹内,自动生成backup.json文件,该文件按照节点类型存储了作业信息,支持恢复作业前进行修改。 启动每日备份后,若想结束备份任务,您可以单击右边的“停止每日备份”。
  • 还原资产 登录DataArts Studio控制台。选择实例,单击“进入控制台”,选择对应工作空间的“数据开发”模块,进入数据开发页面。 图3 选择数据开发 在数据开发模块控制台的左侧导航栏,选择“备份管理”。 选择“还原管理”页签,单击“还原备份”。 在还原备份对话框中,从OBS桶中选择待还原的资产存储路径,设置重名处理策略。 待还原的资产存储路径为备份资产中生成的文件路径。 您可在还原资产前修改备份路径下的backup.json文件,支持修改连接名(connectionName)、数据库名(database)和集群名(clusterName)。 图4 还原资产 单击“确定”。
  • 启动作业调度 登录DataArts Studio控制台。选择实例,单击“进入控制台”,选择对应工作空间的“数据开发”模块,进入数据开发页面。 图1 选择数据开发 在数据开发控制台,单击左侧导航栏中的作业开发按钮,进入作业开发页面后,打开已完成血缘配置的作业。 在数据开发中,当作业进行“执行调度”时,系统开始解析血缘关系。 测试运行不会解析血缘。 图2 作业调度 待调度作业成功运行完成后,等待约1分钟左右,数据血缘关系即可生成成功。
  • (可选)创建DLI环境隔离 仅Serverless服务(当前即DLI)需要配置环境隔离。 在DataArts Studio控制台首页,选择对应工作空间的“管理中心”模块,进入管理中心页面。 图1 选择管理中心 在管理中心页面,单击“数据源资源映射配置”,进入数据源资源映射配置页面。 图2 数据源资源映射配置 单击“DB配置”下的“添加”,然后分别配置开发环境数据库名和生产环境数据库名,完成后单击“保存”。通过和可以进行编辑和删除操作。 数据库名需配置为已创建完成的数据库名。建议在创建数据库时,开发环境数据库名和生产环境数据库名保持一致,开发环境数据库名带上“_dev”后缀,以与生产环境数据库名进行区分。 图3 DB配置 单击“DLI队列配置”下的“添加”,然后分别配置开发环境队列名和生产环境队列名,完成后单击“保存”。通过和可以进行编辑和删除操作。 队列名需配置为已在DLI创建完成的队列名。建议开发环境队列名和生产环境队列名保持一致,开发环境队列名带上“_dev”后缀,以与生产环境队列名进行区分。 图4 DLI队列配置 “DB配置”和“DLI队列配置”完成后,DLI环境隔离创建成功。
  • DB配置 在DataArts Studio控制台首页,选择对应工作空间的“管理中心”模块,进入管理中心页面。 在管理中心页面,单击“数据源资源映射配置”,进入数据源资源映射配置页面。 单击“DB配置”下的“添加”,然后分别配置开发环境数据库名和生产环境数据库名,完成后单击“保存”。通过和可以进行编辑和删除操作。 数据库名需配置为已创建完成的数据库名。建议在创建数据库时,开发环境数据库名和生产环境数据库名保持一致,开发环境数据库名带上“_dev”后缀,以与生产环境数据库名进行区分。 对于DWS、MRS Hive和MRS Spark这三种数据源,如果在创建数据连接时选择同一个集群,则需要配置数据源资源映射的DB数据库映射关系进行开发生产环境隔离。 图5 DB配置
  • 调试方法介绍 下面为您介绍几种EL表达式的调试方法,能够在调试过程中方便地看到替换结果。 后文以#{DateUtil.now()}表达式为例进行介绍。 使用DIS Client节点。 前提:您需要具备DIS通道。 方法:选择DIS Client节点,将EL表达式直接写在要发送的数据中,单击“测试运行”,然后在节点上右键查看日志,日志中会把EL表达式的值打印出来。 使用Kafka Client节点。 前提:您需要具备MRS集群,且集群有Kafka组件。 方法:选择Kafka Client节点,将EL表达式直接写在要发送的数据中,单击“测试运行”,然后在节点上右键查看日志,日志中会把EL表达式的值打印出来。 使用Shell节点。 前提:您需要具备ECS弹性云服务器。 方法:创建一个主机连接,将EL表达式直接通过echo打印出来,单击“测试运行”之后查看日志,日志中会打印出EL表达式的值。 使用Create OBS节点。 如果上述方法均不可用,则可以通过Create OBS去创建一个OBS目录,目录名称就是EL表达式的值,单击“测试运行”后,再去OBS界面查看创建出来的目录名称。
  • 举例 在Rest Client节点的参数“URL参数”中使用EL表达式“tableName=#{JSONUtil.path(Job.getNodeOutput("get_cluster"),"tables[0].table_name")}”,如图1所示。 表达式说明如下: 获取作业中“get_cluster”节点的执行结果(“Job.getNodeOutput("get_cluster")”),执行结果是一个JSON字符串。 通过JSON路径(“tables[0].table_name”),获取JSON字符串中字段的值。 图1 表达式示例 EL表达式在数据开发过程中被广泛应用,您可以参考最佳实践查看更多应用EL表达式的进阶实践。
  • 调度身份的分类 调度身份分为委托和IAM账户两大类。 委托:由于云各服务之间存在业务交互关系,一些云服务需要与其他云服务协同工作,需要您创建云服务委托,将操作权限委托给这些服务,让这些服务以您的身份使用其他云服务,代替您进行一些资源运维工作。 委托可以分为: 公共委托:工作空间级别的全局委托。适用于该空间内的所有作业。配置公共委托请参考配置公共委托。 作业委托:适用于单个作业级别。配置作业委托请参考配置作业委托。 IAM账号:通过用户组统一配置,权限管理相对于委托来说,流程简便;并且使用IAM账号的兼容性更好,可支持MRS相关的节点(MRS Presto SQL、MRS Spark、MRS Spark Python、MRS Flink Job、 MRS MapReduce),通过直连方式的(MRS Spark SQL、MRS Hive SQL)节点,以及目标端为DWS的ETL Job节点,解决部分MRS集群和部分ETL Job节点不支持委托方式提交作业的问题。 IAM账户可分为: 公共IAM账户:工作空间级别的全局IAM账户。适用于该空间内的所有作业。配置公共IAM账户请参考配置公共IAM账号。 执行用户:作业级别的IAM账户,适用于单个作业级别。配置执行用户请参考配置执行用户。
  • 参考:创建委托 登录IAM服务控制台。 选择“委托”,单击“创建委托”。 设置“委托名称”。例如:DGC_agency。 在创建委托页面,委托类型选择“云服务”,云服务选择“数据湖治理中心DGC”,将操作权限委托给DataArts Studio,让DataArts Studio以您的身份使用其他云服务,代替您进行一些资源运维工作。 图6 创建委托 单击“下一步”,进入授权页面。 在授权页面中搜索“Tenant Administrator”策略,勾选“Tenant Administrator”策略并单击“下一步”。 因Tenant Administrator策略具有除 统一身份认证 服务IAM外,其他所有服务的所有执行权限。所以给委托服务DataArts Studio配置Tenant Administrator,可访问周边所有服务。 若您想达到对权限较小化的安全管控要求,Tenant Administrator可不配置,仅配置OBS OperateAccess权限(因作业执行过程中,需要往obs写执行日志信息,因此需要添加 OBS OperateAccess权限)。然后再根据作业中的节点类型,配置不同的委托权限。例如某作业仅包含Import GES节点,可配置GES Administrator权限和OBS OperateAccess权限即可。详细方案请参考参考:配置委托权限。 图7 配置权限 单击“确定”完成委托创建。
  • 参考:配置委托权限 将账号的操作权限委托给DataArts Studio服务后,需要配置委托身份的权限,才可与其他服务进行交互。 为实现对权限较小化的安全管控要求,可根据作业中的节点类型,以服务为粒度,参见表1配置相应的服务Admin权限。 也可精确到具体服务的操作、资源以及请求条件等。根据作业中的节点类型,以对应服务API接口为粒度进行权限拆分,满足企业对权限最小化的安全管控要求。参见表2进行配置。例如包含Import GES节点的作业,您只需要创建自定义策略,并勾选ges:graph:getDetail(查看图详情),ges:jobs:getDetail(查询任务状态),ges:graph:access(使用图)这三个授权项即可。 当满足如下条件之一时,MRS集群才支持委托方式提交作业。 非安全集群。 安全集群,集群版本大于 2.1.0,并且安装了MRS 2.1.0.1及以上版本的补丁。 当MRS集群不支持委托方式提交作业时,如下节点相关作业不能配置委托。 MRS相关的节点(MRS Presto SQL、MRS Spark、MRS Spark Python、MRS Flink Job、 MRS MapReduce),以及通过API方式连接的(MRS Spark SQL、MRS Hive SQL)节点。 配置服务级Admin权限 因作业执行过程中,需要往OBS写执行日志信息,因此粗粒度授权时,所有作业都需要添加OBS OperateAccess权限。 表1 配置相关节点的admin权限 节点名称 系统权限 权限描述 CDM Job、DIS Stream、DIS Dump、DIS Client DAYU Administrator 数据治理中心 服务的所有执行权限。 Import GES GES Administrator 图引擎服务的所有执行权限。该角色有依赖,需要在同项目中勾选依赖的角色:Tenant Guest、Server Administrator。 MRS Presto SQL、MRS Spark、MRS Spark Python、MRS Flink Job、 MRS MapReduce MRS Spark SQL、MRS Hive SQL(通过MRS API方式连接MRS集群的) MRS Administrator MRS Fullaccess KMS Administrator MRS Administrator:RBAC策略下 MapReduce服务 的所有执行权限。该角色有依赖,需要在同项目中勾选依赖的角色:Tenant Guest、Server Administrator。 MRS Fullaccess:细粒度策略下MRS管理员权限,拥有该权限的用户可以拥有MRS所有权限。 KMS Administrator: 数据加密 服务加密密钥的管理员权限。 MRS Spark SQL、MRS Hive SQL、MRS Kafka、Kafka Client(通过代理方式连接集群) DAYU Administrator KMS Administrator DAYU Administrator:数据治理中心服务的所有执行权限。 KMS Administrator:数据加密服务加密密钥的管理员权限。 DLI Flink Job、DLI SQL、DLI Spark DLI Service Admin 数据湖探索的所有执行权限。 DWS SQL、Shell、RDS SQL(通过代理方式连接数据源) DAYU Administrator KMS Administrator DAYU Administrator:数据治理中心服务的所有执行权限。 KMS Administrator:数据加密服务加密密钥的管理员权限。 CSS DAYU Administrator Elasticsearch Administrator DAYU Administrator:数据治理中心服务的所有执行权限。 Elasticsearch Administrator: 云搜索 服务的所有执行权限。该角色有依赖,需要在同项目中勾选依赖的角色:Tenant Guest、Server Administrator。 Create OBS、Delete OBS、OBS Manager OBS OperateAccess 查看桶、上传对象、获取对象、删除对象、获取对象ACL等对象基本操作权限 SMN SMN Administrator 消息通知 服务的所有执行权限。 配置细粒度权限(根据各服务支持的授权项,创建自定义策略) 创建自定义策略的详细操作请参见创建自定义策略。 作业执行过程中,需要向OBS中写入执行日志。当采取精细化授权方式时,任何类型的作业均需要添加OBS的如下授权项: obs:bucket:GetBucketLocation obs:object:GetObject obs:bucket:CreateBucket obs:object:PutObject obs:bucket:ListAllMyBuckets obs:bucket:ListBucket CDM Job、DIS Stream、DIS Dump、DIS Client节点隶属于DataArts Studio模块,DataArts Studio不支持细粒度授权。因此包含这几类节点的作业,给服务配置权限仅支持DataArts Studio Administarator。 CSS不支持细粒度授权,且需要通过代理执行。因此包含这类节点的作业,需要配置DataArts Studio Administarator和Elasticsearch Administrator权限。 SMN不支持细粒度授权,因此包含这类节点的作业,需要配置SMN Administarator权限。 表2 自定义策略 节点名称 授权项 Import GES ges:graph:access ges:graph:getDetail ges:jobs:getDetail MRS Presto SQL、MRS Spark、MRS Spark Python、MRS Flink Job、 MRS MapReduce MRS Spark SQL、MRS Hive SQL(通过MRS API方式连接MRS集群的) mrs:job:delete mrs:job:stop mrs:job:submit mrs:cluster:get mrs:cluster:list mrs:job:get mrs:job:list kms:dek:crypto kms:cmk:get MRS Spark SQL、MRS Hive SQL、MRS Kafka、Kafka Client(通过代理方式连接集群) kms:dek:crypto kms:cmk:get DataArts Studio Administarator(角色) DLI Flink Job、DLI SQL、DLI Spark dli:jobs:get dli:jobs:update dli:jobs:create dli:queue:submit_job dli:jobs:list dli:jobs:list_all DWS SQL、Shell、RDS SQL(通过代理方式连接数据源) kms:dek:crypto kms:cmk:get DataArts Studio Administarator(角色) Create OBS、Delete OBS、OBS Manager obs:bucket:GetBucketLocation obs:bucket:ListBucketVersions obs:object:GetObject obs:bucket:CreateBucket obs:bucket:DeleteBucket obs:object:DeleteObject obs:object:PutObject obs:bucket:ListAllMyBuckets obs:bucket:ListBucket
  • 使用案例 案例场景 因数据规整要求,需要周期性地将多组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的CSV文件中,然后通过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')}:获取前面节点的输出。
共100000条