镜像管理

更新时间:2025-02-19 03:08:35

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

背景信息

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

使用说明

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

    说明

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

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

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

    • 专业版:50个。

    • 企业版:100个。

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

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

  • EMR类型的任务选择Default标准镜像时若等待时间较久,可能存在部分较旧的EMR集群版本镜像未初始化,可提交工单解决。

前提条件

步骤一:进入镜像管理

  1. 登录DataWorks控制台

  2. 进入镜像管理页面。

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

    image

步骤二:创建自定义镜像

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

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

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

    参数

    说明

    参数

    说明

    镜像名称

    自定义镜像的名称。

    镜像描述

    自定义镜像的说明。

    引用类型

    选择DataWorks官方镜像

    镜像命名空间

    固定为DataWorks Default

    镜像仓库

    固定为DataWorks Default

    镜像名称/ID

    DataWorks官方镜像,支持选择:

    • dataworks_shell_task_pod

    • dataworks_pyodps_task_pod

    • dataworks_emr_datalake_5.15.1_task_pod

    • dataworks_pyodps_py311_task_pod

    • dataworks_python_task_pod

    • dataworks_pairec_task_pod

    可见范围

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

    使用子产品

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

    支持任务类型

    • 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网络详情请参见:配置专有网络的访问控制

    可见范围

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

    使用子产品

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

    支持任务类型

    • Shell

    • Python

    • Notebook:使用ACR镜像在DataWorks运行Notebook任务时,请将DataWorks提供的Notebook基础镜像作为您ACR镜像的基础镜像,为Notebook任务提供运行环境。DataWorks提供的Notebook基础镜像:dataworks-notebook:py3.11-ubuntu22.04:py3.11-ubuntu22.04-20241202

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

    • 若需将阿里云ACR镜像创建的自定义镜像应用于NoteBook任务,请确保您构建镜像使用的环境已具备公网访问能力,以便正常获取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资源组。

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

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

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

    image

  3. 保存并提交修改。

    说明

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

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

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

  1. 创建测试数据。

    1. 创建MaxCompute数据源,并在DataWorks数据开发中绑定已创建的MaxCompute数据源。详情请参见创建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]

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

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

    3. 保存并带参运行。

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

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

      image

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

      说明

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

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

附录:查看官方镜像

  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版本的任务提交。

    • DataWorks CDH节点官方镜像:支持CDH HiveCDH SparkCDH Spark SQLCDH MRCDH PrestoCDH Impala

    image

相关文档

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

点击开启售前

在线咨询服务