全部产品
Search
文档中心

大数据开发治理平台 DataWorks:自定义镜像

更新时间:Jun 20, 2025

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

背景信息

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

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

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

    节点类型

    引用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

    说明

    若您在安装第三方包时,Python3三方库Yum安装包在下拉列表中都没有您需要的第三方包,您可以尝试Script手动安装。

  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新版数据开发支持将个人开发环境制作成新的镜像,详情可参见:个人开发环境制作DataWorks镜像

三、发布自定义镜像

完成自定义镜像创建后,进入DataWorks控制台单击进入镜像管理 > 自定义镜像页签,对目标镜像进行测试发布。测试与发布时,需注意以下内容:

四、修改镜像归属空间

发布后的镜像,可通过修改镜像归属空间在不同工作空间中应用。

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

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

五、构建持久化镜像

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

说明

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

具体配置步骤如下:

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

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

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

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

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

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

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

六、使用镜像

旧版数据开发使用镜像

  1. 进入数据开发页面。

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

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

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

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

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

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

  3. 节点调试。

    请在节点顶部工具栏单击带参运行image),配置资源组名称运行CU镜像,然后单击运行

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

    说明

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

    详情请参见发布任务

新版数据开发使用镜像

  1. 进入数据开发页面。

    进入DataWorks工作空间列表页,在顶部切换至目标地域,找到目标工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

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

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

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

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

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

  3. 节点调试。

    请在节点右侧调试配置中,配置计算资源资源组计算CU镜像脚本参数,然后在节点顶部工具栏单击运行

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

    说明

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

    详情请参见节点/工作流发布

操作示例:通过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. 将自定义镜像构建为持久化镜像。具体请参见构建持久化镜像

相关文档