镜像管理

更新时间:2025-04-01 07:01:26

镜像管理是 DataWorks 为用户提供的用于创建和管理任务运行环境的功能。在此界面,您可以创建自定义镜像来集成必要的开发包和依赖,以满足任务在特定环境中执行的需求。例如,您可以通过自定义镜像安装运行 PyODPS所需的第三方依赖,本文为您介绍如何通过镜像管理能力创建自定义镜像。

背景信息

DataWorks在执行任务时,默认使用Default标准镜像,平台会根据任务类型自动选择适配的镜像。官方镜像作为预配置的基础镜像,为特定任务类型提供了标准化的执行环境。自定义镜像在此基础上进一步扩展了功能性和灵活性。您可以根据实际应用场景基于这些基础镜像进行个性化扩展,实现功能的按需定制,以提升数据处理任务的执行效率与灵活性。

  • 支持自定义镜像的方式:

  • 支持自定义镜像的节点类型与镜像构建方式:

    节点类型

    引用ACR镜像构建

    直接基于官方镜像构建

    节点类型

    引用ACR镜像构建

    直接基于官方镜像构建

    PyODPS2

    image

    image

    PyODPS3

    image

    image

    EMR Spark

    image

    image

    EMR Spark SQL

    image

    image

    EMR SHELL

    image

    image

    Shell

    image

    image

    Python

    image

    image

    Notebook

    image

    image

使用说明

  • 镜像功能仅支持与新Serverless资源组配合使用。

    说明

    如果您使用旧版独享调度资源组运行PyODPS任务节点,并且需要依赖第三方包,可使用运维助手,具体请参见独享调度资源组配置第三方包(不推荐)

  • 不同DataWorks版本,支持创建的自定义镜像最大个数存在限制:

    • 基础版和标准版:10个。

    • 专业版:50个。

    • 企业版:100个。

  • 仅专业版及以上版本支持镜像构建能力。

  • 每个地域最多支持两个镜像同时构建。

前提条件

步骤一:进入镜像管理

  1. 登录DataWorks控制台

  2. 进入镜像管理页面。

    在左侧导航栏,单击左侧导航栏上的镜像管理进入镜像管理页面。

    image

步骤二:创建自定义镜像

DataWorks创建自定义镜像时,支持以DataWorks官方镜像阿里云ACR镜像作为镜像引用类型来创建镜像,以下为选择不同引用类型时的不同配置参数:

方式一:基于DataWorks官方镜像直接创建

  1. 配置自定义镜像参数:

    参数

    说明

    参数

    说明

    镜像名称

    自定义镜像的名称。

    镜像描述

    自定义镜像的说明。

    引用类型

    选择DataWorks官方镜像

    镜像命名空间

    固定为DataWorks Default

    镜像仓库

    固定为DataWorks Default

    镜像名称/ID

    下拉选择DataWorks提供的官方镜像。

    可见范围

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

    使用子产品

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

    支持任务类型

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

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

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

    安装包

    按需添加需要的第三方包。支持以下方式:

    • 快捷安装:在安装包下拉选择框选择Python2Python3Yum,可以直接选择需要安装的环境、资源。

    • 手动输入:在安装包下拉选择框选择Script。可通过Script命令框手动输入安装命令。您可选择以下手动输入示例命令下载第三方包。

      • pip示例命令:pip install xx,支持Python2使用。

      • pip3示例命令:/home/tops/bin/pip3 install 'urllib3<2.0' ,支持Python3使用。

      • yum示例命令:yum install -y git

      • wget示例命令:wget git

  2. 单击确定,完成镜像创建。

方式二:基于阿里云ACR镜像创建

限制条件

  • DataWorks创建仅支持企业版阿里云ACR镜像实例。

  • DataWorks仅支持选择一个VPC访问阿里云ACR镜像实例。

  • DataWorks支持的阿里云ACR镜像实例最大为5GB

  1. 配置自定义镜像参数:

    参数

    说明

    参数

    说明

    镜像名称

    自定义镜像的名称。

    镜像描述

    自定义镜像的说明。

    引用类型

    选择阿里云ACR镜像

    镜像实例ID

    支持根据实例ID选择在阿里云容器镜像服务中创建的企业版实例,创建实例详情请参见:创建企业版实例

    镜像命名空间

    支持根据所选实例,选择镜像实例下的命名空间,创建命名空间详情请参见:创建命名空间

    镜像仓库

    支持根据所选实例,选择镜像实例下的镜像仓库,创建镜像仓库详情请参见:创建镜像仓库

    镜像版本

    支持根据所选中的镜像仓库,选择镜像仓库下您需要创建自定义镜像的镜像版本。

    关联的VPC

    选择镜像实例绑定的VPC网络,配置VPC网络详情请参见:配置专有网络的访问控制

    可见范围

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

    使用子产品

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

    支持任务类型

    ACR镜像启动方式为启动命令+用户任务代码文件路径的方式启动,以下为不同任务类型和默认启动命令:

    • Shell

    • Python

      若需将阿里云ACR镜像创建的自定义镜像应用于Python任务,需确认您的ACR镜像实例内是否包含Python环境,否则无法支持Python任务。

    • Notebook

      • 若需将阿里云ACR镜像创建的自定义镜像应用于Notebook任务,请将DataWorks提供的Notebook基础镜像作为您ACR镜像的基础镜像,为Notebook任务提供运行环境。DataWorks提供的Notebook基础镜像:dataworks-public-registry.cn-shanghai.cr.aliyuncs.com/public/dataworks-notebook:py3.11-ubuntu22.04-20241202

      • 请确保您构建镜像使用的环境已具备公网访问能力,以便正常获取DataWorks提供的Notebook基础镜像。

  2. 单击确定,完成镜像创建。

方式三:基于个人开发环境实例创建

Data Studio新版数据开发支持将个人开发环境制作成新的镜像,详情可参见:个人开发环境制作镜像

步骤三:发布自定义镜像

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

  2. 单击操作列的发布

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

    说明

    测试资源组请选择Serverless资源组。

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

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

  • 如果您配置的自定义镜像是从公网获取第三方包,且长时间测试不通过,请检查测试资源组绑定的VPC是否具备公网访问能力,为VPC配置公网,请参见使用公网NAT网关SNAT功能访问互联网

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

步骤四:修改镜像归属空间

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

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

步骤五:构建持久化镜像

完成步骤四后,您已经可以正常在业务中使用自定义镜像,但每次运行任务节点时,DataWorks都会重新部署镜像环境,下载第三方包。该场景下会增加节点运行时间且可能承担更多的计算费用,因此,DataWorks支持将自定义镜像构建为持久化镜像,无需每次都重新部署镜像环境,每次运行任务节点时使用同一个镜像环境,不仅确保了运行环境的一致性,还有效节省了任务运行时间、计算成本和流量成本。

说明

构建持久化镜像只支持通过官方镜像创建的自定义镜像。

具体配置步骤如下:

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

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

  3. 在目标镜像操作列单击image > 构建,将自定义镜像构建为持久化镜像。

  4. 在弹出的请选择构建镜像的资源组对话框中,配置构建镜像使用的资源组,然后单击继续

    说明
    • 构建镜像大约耗时5~10分钟,具体视镜像大小而定。

    • 构建镜像会按照0.5 CU × 构建时长收取计算费用,详情请参见数据计算计费说明

    • 为避免因网络等原因出现构建失败的情况,请确保构建镜像的资源组步骤三:发布自定义镜像时选择的测试资源组一致。

后续操作:使用镜像

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与运维 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 在数据开发功能中找到待测试自定义镜像的任务节点,单击右侧调度配置,配置资源属性:

    • 调度资源组:选择Serverless资源组。

      说明
      • 为确保任务节点顺利运行,请确保调度资源组发布镜像时选择的测试资源组一致。

      • 如果此处未显示目标资源组,请检查是否将该资源组绑定至当前工作空间。您可以前往资源组列表页,找到目标资源组,然后单击操作列的绑定工作空间,完成绑定。

    • 镜像:选择已发布的镜像。

  3. 节点调试。

    • 如果使用旧版数据开发,请在节点顶部工具栏单击带参运行image),配置资源组名称运行CU镜像自定义参数,然后单击运行

    • 如果使用新版数据开发,请在节点右侧调试配置中,配置计算资源资源组计算CU镜像脚本参数,然后在节点顶部工具栏单击运行

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

    说明

    数据开发中修改的镜像不会同步到生产环境中,您需要将任务发布后,才能在生产环境中生效。详情请参见发布任务(旧版数据开发)节点/工作流发布(新版数据开发)

操作示例:通过PyODPS节点使用镜像实现中文分词

假设需要对MaxCompute表中的某一列中文数据进行分词,然后将分词结果存入另一张表中,用于下游调度节点使用。您可在自定义镜像中预装jieba分词工具包,然后通过PyODPS任务使用该镜像对数据表中的中文数据进行分词处理,并将结果存储至新表,无缝集成至下游调度流程。

  1. 创建测试数据。

    1. 创建DataWorks工作空间绑定MaxCompute计算资源。详情请参见创建工作空间创建数据源或注册集群(未参加新版数据开发公测)绑定计算资源(参加新版数据开发公测)

    2. 在数据开发中,创建ODPS节点(旧版数据开发)或MaxCompute SQL节点(新版数据开发),新建测试表并添加测试数据。

      说明

      如下示例使用了调度参数,请在右侧调度配置中设置参数名为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节点官方镜像。

    • 支持任务类型:支持PyODPS2PyODPS 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]

      • 调度资源组:选择Serverless资源组,与发布镜像时选择的测试资源组相同。

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

    3. 节点调试。

      • 如果使用旧版数据开发,请在节点顶部工具栏单击带参运行image),配置资源组名称运行CU镜像自定义参数,然后单击运行

      • 如果使用新版数据开发,请在节点右侧调试配置中,配置计算资源资源组计算CU镜像脚本参数,然后在节点顶部工具栏单击运行

    4. (可选)新建临时查询(旧版数据开发)或在个人目录下创建SQL文件(新版数据开发),使用如下SQL查询产出表中是否有数据。

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

      image

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

      说明

      数据开发中修改的镜像不会同步到生产环境中,您需要将任务发布后,才能在生产环境中生效。详情请参见发布任务(旧版数据开发)节点/工作流发布(新版数据开发)

  5. 将自定义镜像构建为持久化镜像。具体请参见步骤五:构建持久化镜像

附录:查看官方镜像

DataWorks支持的官方镜像如下,您也可以前往镜像管理页面查看。

镜像名称:版本 / 镜像ID

支持的任务类型

补充说明

镜像名称:版本 / 镜像ID

支持的任务类型

补充说明

dataworks_pyodps_py311_task_pod

PyODPS 3

该镜像仅适用于PYODPS3。

dataworks_pairec_task_pod

PyODPS 3

该镜像适用于PYODPS3,用于运行 PAI-Rec 生成的算法流程。

dataworks_pyodps_task_pod

PyODPS 2PyODPS 3

-

dataworks_emr_datalake_5.15.1_task_pod

EMR SparkEMR Spark SQLEMR SHELL

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

dataworks_shell_task_pod

Shell

-

dataworks_python_task_pod

Python

-

dataworks_cdh_custom_task_pod

CDH HiveCDH SparkCDH Spark SQLCDH MRCDH PrestoCDH Impala

  • 该镜像支持的地域为:华北2(北京)、华北3(张家口)。

  • 该镜像需要用户自行安装CDH parcel目录。

相关文档

  • 本页导读 (1)
  • 背景信息
  • 使用说明
  • 前提条件
  • 步骤一:进入镜像管理
  • 步骤二:创建自定义镜像
  • 方式一:基于DataWorks官方镜像直接创建
  • 方式二:基于阿里云ACR镜像创建
  • 方式三:基于个人开发环境实例创建
  • 步骤三:发布自定义镜像
  • 步骤四:修改镜像归属空间
  • 步骤五:构建持久化镜像
  • 后续操作:使用镜像
  • 操作示例:通过PyODPS节点使用镜像实现中文分词
  • 附录:查看官方镜像
  • 相关文档