文档

镜像管理

更新时间:

如果您在通用型资源组(新版资源组)部署任务时,需要特定开发环境(Python、Shell、第三方包依赖等)支持,镜像管理功能能够定制化构建包含所有必需组件的镜像,不仅满足任务执行条件,还优化了工作流的可靠性和维护性,实现数据处理的无缝高效运行。

前提条件

  • 已创建通用型资源组(新版资源组),该功能需要与通用型资源组配合使用。通用型资源组的更多详情,请参见新增和使用新版资源组

    说明
    • 新版资源组目前处于逐步灰度发布阶段,如果您需要使用但所处地域暂未发布,请提交工单联系技术支持人员开放。

    • 新版资源组支持的地域:华北2(北京)、华东2(上海)、华南1(深圳)、华东1(杭州)、中国(香港)、华北3(张家口)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)。

  • 通用型资源组绑定的VPC需要具备公网访问能力,具体配置详情,请参见使用公网NAT网关SNAT功能访问互联网

  • 已拥有AliyunDataWorksFullAccessModifyResourceGroup权限策略。授权详情请参见产品及控制台权限控制详情:RAM Policy

操作步骤

步骤一:查看DataWorks官方镜像

  1. 登录DataWorks控制台,切换至DataWorks工作空间所在地域后,单击左侧导航栏的镜像管理

  2. 查看DataWorks官方镜像,目前支持如下镜像:

    • DataWorks Shell节点官方镜像:支持Shell任务类型。

    • DataWorks PYODPS节点官方镜像:支持PyODPS 2PyODPS 3任务类型。

    • DataWorks EMR datalake 5.15.1版本官方镜像:支持EMR SparkEMR Spark SQLEMR SHELL任务类型。

      说明

      该镜像支持EMR新版数据湖集群5.15.1版本的任务提交。

    image

步骤二:创建自定义镜像

  1. 您可以通过如下方式创建自定义镜像:

    • DataWorks官方镜像页签,找到自定义镜像所需的基础官方镜像,单击操作列的创建自定义镜像

    • 自定义镜像页签,单击创建镜像

  2. 在创建镜像页面,配置如下参数。

    参数

    说明

    镜像名称

    自定义镜像的名称。

    镜像描述

    自定义镜像的说明。

    引用类型

    固定为DataWorks官方镜像,目前仅支持基于DataWorks官方镜像创建自定义镜像。

    镜像命名空间

    固定为DataWorks Default

    镜像仓库

    固定为DataWorks Default

    镜像名称/ID

    DataWorks官方镜像,支持选择:

    • dataworks_shell_task_pod:DataWorks Shell节点官方镜像。

    • dataworks_pyodps_task_pod:DataWorks PYODPS节点官方镜像。

    • dataworks_emr_datalake_5.151_task_pod:DataWorks EMR datalake 5.15.1版本官方镜像。

    可见范围

    支持配置自定义镜像的可见范围,包括仅创建者可见全员可见

    使用子产品

    当前自定义镜像仅支持用于数据开发

    支持任务类型

    • DataWorks Shell节点官方镜像:支持Shell任务类型。

    • DataWorks PYODPS节点官方镜像:支持PyODPS 2PyODPS 3任务类型。

    • DataWorks EMR datalake 5.15.1版本官方镜像:支持EMR SparkEMR Spark SQLEMR SHELL任务类型。

    安装包

    按需添加需要的第三方包。支持Python2、Python3、Yum和Script方式。

  3. 单击确定

步骤三:发布镜像

  1. 自定义镜像页签,查看并找到已创建的自定义镜像。

  2. 单击操作列的发布

  3. 选择测试资源组后,单击测试结果右侧的测试

    说明

    测试资源组请选择通用型资源组。

    image

  4. 测试成功后,单击发布

说明
  • 只有测试成功的镜像才可以发布。

  • 如果长时间测试不通过,请检查测试资源组绑定的VPC是否具备公网访问能力,为VPC配置公网,请参见使用公网NAT网关SNAT功能访问互联网

  • 如果测试失败,您可以在目标自定义镜像的操作列单击image > 修改,修改镜像配置。

步骤四:使用镜像

  1. 自定义镜像页签,查看并找到已发布的自定义镜像。

  2. 在目标镜像操作列单击image > 修改归属工作空间,为自定义镜像绑定归属工作空间。

    image

  3. 在数据开发功能中找到目标任务节点,单击右侧调度配置,选择已发布并绑定了当前工作空间的自定义镜像

    image

  4. 保存并提交修改。

    说明

    数据开发中修改的镜像不会同步到生产环境中,您需要通过发布任务将任务发布后,才能在生产环境中生效。

配置示例

场景说明

假设需要对MaxCompute表中的某一列数据进行分词,然后将分词结果存入另一张表中,用于下游调度节点使用。

可以使用此方案,在自定义镜像中预装jieba分词工具包,然后通过PyODPS任务使用该镜像对表数据进行分词处理并存储结果至新表,无缝集成至下游调度流程。

操作步骤

  1. 创建测试数据。

    1. 创建MaxCompute数据源。并在DataWorks数据开发中绑定已创建的MaxCompute数据源。

    2. 在数据开发中,创建ODPS节点,新建测试表并添加测试数据。

      说明

      如下示例使用了调度参数,请在右侧调度配置中设置参数名为bday,参数值为$[yyyymmdd]

      -- 创建测试表
      CREATE TABLE IF NOT EXISTS custom_img_test_tb
      (
          c_customer_id BIGINT NOT NULL,
          c_customer_text STRING NOT NULL,
          PRIMARY KEY (c_customer_id)
      )
      COMMENT 'TABLE COMMENT'
      PARTITIONED BY (ds STRING COMMENT '分区')
      LIFECYCLE 90;
      
      -- 向表中插入测试数据
      INSERT INTO custom_img_test_tb PARTITION (ds='${bday}') (c_customer_id, c_customer_text) VALUES
      (1, '晚来天欲雪,能饮一杯无?'),
      (2, '月落乌啼霜满天,江枫渔火对愁眠。'),
      (3, '山重水复疑无路,柳暗花明又一村。'),
      (4, '春眠不觉晓,处处闻啼鸟。'),
      (5, '静夜思,床前明月光,疑是地上霜。'),
      (6, '海上生明月,天涯共此时。'),
      (7, '旧时王谢堂前燕,飞入寻常百姓家。'),
      (8, '一行白鹭上青天,窗含西岭千秋雪。'),
      (9, '人生得意须尽欢,莫使金樽空对月。'),
      (10, '天生我材必有用,千金散尽还复来。');
    3. 保存并发布。

  2. 创建自定义镜像。

    参见步骤二:创建自定义镜像,关键参数如下:

    • 镜像名称/ID:选择dataworks_pyodps_task_pod,DataWorks PYODPS节点官方镜像。

    • 支持任务类型:选择PyODPS 3

    • 安装包:选择Python3jieba

  3. 发布自定义镜像并修改归属项目空间。具体请参见步骤三:发布镜像步骤四:使用镜像

  4. 在调度任务中使用自定义镜像。

    1. 在数据开发中,创建PyODPS3节点,配置如下内容:

      import jieba
      from odps import ODPS
      from odps.models import TableSchema as Schema, Column, Partition
      
      # 读取表数据
      table = o.get_table('custom_img_test_tb')
      partition_spec = f"ds={args['bday']}"
      with table.open_reader(partition=partition_spec) as reader:
          records = [record for record in reader]
      
      # 对提取的文本进行分词
      participles = [' | '.join(jieba.cut(record['c_customer_text'])) for record in records]
      
      # 创建目标表
      if not o.exist_table("participle_tb"):
          schema = Schema(columns=[Column(name='word_segment', type='string', comment='分词结果')], partitions=[Column(name='ds', type='string', comment='分区字段')])
          o.create_table("participle_tb", schema)
      
      # 写入分词结果到目标表
      # 定义输出分区和表
      output_partition = f"ds={args['bday']}"
      output_table = o.get_table("participle_tb")
      
      # 如果分区不存在,先创建分区
      if not output_table.exist_partition(output_partition):
          output_table.create_partition(output_partition)
      
      # 将分词结果写入表
      record = output_table.new_record()
      with output_table.open_writer(partition=output_partition, create_partition=True) as writer:
          for participle in participles:
              record['word_segment'] = participle
              writer.write(record)
    2. 在右侧调度配置中,设置如下关键参数:

      • 调度参数:参数名bday,参数值为$[yyyymmdd]

      • 调度资源组:选择通用型资源组。

      • 镜像:选择已发布并绑定了当前工作空间的自定义镜像。

    3. 保存并带参运行。

    4. (可选)新建临时查询,使用如下SQL查询产出表中数据是否有数据。

      SELECT * FROM participle_tb WHERE ds=<分区日期>;

      image

    5. 将PyODPS节点发布至生产环境。

      说明

      数据开发中修改的镜像不会同步到生产环境中,您需要通过发布任务将任务发布后,才能在生产环境中生效。

相关文档