个人开发环境制作MaxCompute镜像

DataWorks支持在创建个人开发环境的自定义镜像时,同步生成MaxCompute的自定义镜像,方便您在DataWorks节点(如PyODPS 3节点、Notebook节点)中使用MaxCompute自定义镜像。本文将为您介绍在DataWorks构建并使用MaxCompute自定义镜像。

背景信息

MaxCompute镜像管理功能支持您创建自定义镜像,您可在SQL UDF、PyODPSMaxFrame开发等场景中直接引用已有镜像,无需执行繁琐的资源打包、上传等流程。在DataWorks,您可以基于个人开发环境,在构建DataWorks镜像的同时,同步构建MaxCompute镜像。

前提条件

创建MaxCompute自定义镜像

准备工作

注意事项

创建MaxCompute自定义镜像:

  • 镜像大小:MaxCompute单个镜像最大规格为10 GB

  • 镜像数量:MaxCompute单租户最多可上传10个镜像。

使用MaxCompute镜像:DataWorks基于Python 3.11环境构建MaxCompute镜像。若要运行通过DataWorks构建的MaxCompute镜像,请确保您的Python环境为3.11版本。

创建个人开发环境实例

进入Data Studio,参照下文使用特定镜像dataworks-maxcompute:py3.11-ubuntu20.04创建个人开发环境实例,以便同步创建MaxCompute自定义镜像。

  1. 进入Data Studio。

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

    2. Data Studio页面左侧导航栏单击image按钮,进入数据开发页面。

  2. 进入个人开发环境创建页面。单击顶部个人开发环境·请选择,按需创建个人开发环境实例。

    • 如果您还没有个人开发环境实例,需要您自主创建,单击前往新建

    • 如果您已有个人开发环境实例,则单击管理实例,然后在个人开发环境实例列表中,单击新建实例

  3. 配置个人开发环境。在DataWorks中创建MaxCompute自定义镜像时,个人开发环境需要进行以下配置,其他参数配置可参见新建个人开发环境实例

    • 镜像配置:请选择dataworks-maxcompute:py3.11-ubuntu20.04

      说明
      • 只有选择dataworks-maxcompute:py3.11-ubuntu20.04 镜像,才能制作MaxCompute自定义镜像。

      • 使用dataworks-maxcompute:py3.11-ubuntu20.04 作为基础镜像构建的DataWorks自定义镜像,可以在DataWorksNotebook、通用PythonShell节点中使用MaxFrame作业开发。

    • 网络设置:请选择ACR实例配置的专有网络,以确保后续构建镜像时,个人开发环境实例可正常将镜像推送至ACR实例。

配置镜像相关环境

请参照以下步骤,在您的个人开发环境实例终端中安装MaxCompute开发需要使用的第三方依赖。本文将以 jieba 为例进行说明。

  1. 单击Data Studio页面顶部的个人开发环境·请选择,单击进入在创建个人开发环境实例中创建的个人开发环境实例。

  2. 单击Data Studio底部工具栏左侧的image图标,进入终端命令执行框。

  3. 在个人开发环境终端中依次执行以下命令,下载并验证第三方依赖jieba是否安装成功。

    ## 安装三方依赖
    pip install jieba;
    
    ## 查看第三方依赖
    pip show jieba;

保存自定义镜像

请按照以下步骤,将个人开发环境制作为DataWorks镜像,并选择同步创建MaxCompute镜像。系统会自动将生成的镜像上传至同账号下的ACR实例中。

  1. 进入个人开发环境实例管理页面。

    1. 单击顶部原个人开发环境·请选择位置,单击您所创建的个人开发环境实例名称。

    2. 在弹窗中选择管理环境,进入个人开发环境实例页面。

  2. 进入制作镜像页面。

    1. 在个人开发环境实例页找到您所创建的个人开发环境实例。

    2. 单击实例右侧操作栏中的制作镜像

  3. 请参照以下内容配置镜像,配置完成后点击确认

    参数

    说明

    镜像名称

    自定义DataWorks镜像名称,若镜像同步至MaxCompute,此处定义的名称即为MaxCompute镜像名称。(例如:image_jieba)。

    镜像实例

    请选择标准版及以上版本的ACR实例,创建ACR实例详情请参见创建企业版实例

    说明

    标准版及以上版本的ACR实例可用于构建MaxCompute自定义镜像。

    命名空间

    请选择ACR实例的命名空间,创建详情请参见创建命名空间

    镜像仓库

    请选择ACR实例的镜像仓库,创建详情请参见创建镜像仓库

    镜像版本

    自定义镜像版本。

    同步至MaxCompute

    本案例请选择。选择同步至MaxCompute后,镜像将在DataWorks镜像发布时,同步构建为MaxCompute镜像。

    说明

    选项与您选择的镜像实例有关,实例规格标准版及以上版本的ACR镜像实例是可选择的,其他默认不可选。

    任务类型

    请选择当前创建的DataWorks镜像可用的任务类型。本示例可选择将镜像用于Notebook开发。

    • Notebook

    • Python

    • Shell

  4. 确认镜像保存状态。

    您可在镜像实例列表页面,找到上述个人开发环境的镜像列,查看镜像保存状态。

  5. 单击确认,进行制作镜像。

  6. 单击个人开发环境实例右侧的image图标,勾选展示镜像列。

  7. 等待镜像制作完成。鼠标悬浮到保存成功右侧的image图标上,在弹窗中单击这里,进入镜像管理页。

    image

发布自定义镜像

待个人开发环境实例制作的镜像在Data Studio保存成功后,请按照以下步骤,完成自定义镜像发布操作,此操作会将通过ACR镜像实例创建的镜像同步至DataWorksMaxCompute,生成DataWorks自定义镜像和MaxCompute自定义镜像。

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域。

  2. 在左侧导航栏中找到镜像管理 > 自定义镜像页签,对目标镜像进行测试,待目标镜像测试成功后,对目标镜像进行发布

    说明
    • 测试自定义镜像时,测试资源组请选择Serverless资源组。

    • 测试发布选择的Serverless资源组绑定的VPC需与阿里云镜像容器服务中配置的VPC一致。

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

  3. 刷新页面,确认镜像列表中您所发布的镜像发布状态变为已发布

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

确认MaxCompute镜像状态

DataWorks镜像发布完成后,会同步创建MaxCompute镜像,待DataWorks控制台镜像管理 > 自定义镜像页签中的镜像状态变为已发布状态后,您可前往MaxCompute控制台,根据添加自定义镜像至MaxCompute步骤查看您所创建成功的MaxCompute自定义镜像。

使用MaxCompute自定义镜像

注意事项

  • 使用MaxFrame进行开发需要镜像中有MaxFrame服务。若要在DataWorks运行MaxCompute自定义镜像,要求该镜像是基于Python 3.11环境构建。

  • DataWorks使用MaxCompute自定义镜像进行MaxFrame作业开发,请确保任务运行在有MaxFrame运行环境的DataWorks镜像中。具体如下:

    • Notebook节点:请选择官方镜像dataworks-notebook:py3.11-ubuntu22.04,或基于该官方镜像或dataworks-maxcompute:py3.11-ubuntu20.04镜像构建的DataWorks自定义镜像。

    • PyODPS 3节点:请选择官方镜像dataworks_pyodps_py311_task_pod,或基于该官方镜像构建的DataWorks自定义镜像。

    • Python节点:请选择基于dataworks-maxcompute:py3.11-ubuntu20.04镜像创建带有MaxFrame服务的个人开发环境实例,并保存为支持Python任务类型的DataWorks自定义镜像

    • 其他节点:请确保DataWorks自定义镜像中存在MaxFrame运行环境,并且构建环境为Python 3.11

进入数据开发

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

  2. Data Studio页面左侧导航栏单击image按钮,进入数据开发页面。

Notebook节点使用

以下以Notebook节点为例,说明如何在MaxFrame中使用MaxCompute自定义镜像,本示例以使用MaxCompute自定义镜像中的 jieba 包为例进行说明。具体操作如下:

  1. 新建Notebook节点。

    1. 单击顶部个人开发环境·请选择,选择已创建的个人开发环境实例。

    2. 单击项目目录右侧的image,选择新建节点 > Notebook,进入新建节点对话框。

    3. 新建节点对话框中输入节点名称,单击确认,进入节点编辑页。

  2. 编辑Notebook节点代码。

    # -*- coding: utf-8 -*-
    from odps import ODPS
    from maxframe.session import new_session
    import maxframe.dataframe as md  # 确保正确导入maxframe.dataframe模块
    from maxframe import config
    
    # 准备数据集
    test_data = [
        "离离原上草"
    ]
    # 定义函数,使用MaxCompute自定义镜像中的jieba包处理数据:
    # 使用MaxCompute自定义镜像
    def image_test():
        config.options.sql.settings = {
            "odps.session.image": "image_jieba"  # 本示例MaxCompute镜像名称为image_jieba,您可前往maxCompute控制台查看镜像名称。
        }
        def process(row):
            import jieba
            result = jieba.cut(row, cut_all=False)
            return "/".join(result)
        # 建立MaxFrame连接
        odps = %odps
        session = new_session(odps) 
        # 打印logview以便查看执行详情
        logview = session.get_logview_address()
        print("logview:", logview)
        # 创建MaxFrame DataFrame
        # 将本地测试数据(如 ["离离原上草"])封装为MaxFrameDataFrame对象。
        df = md.DataFrame(test_data, columns=["raw_text"])
        # 应用分词函数处理DataFrame对象数据
        df["processed_text"] = df["raw_text"].map(process, dtype='object')
        print("打印",df.execute().fetch())
    image_test()
    print("Data processing completed!")
  3. 单击节点编辑页左侧的image图标,在弹框中选择Python3.11版本的内核,运行节点并查看日志信息。

PyODPS 3节点使用

以下以PyODPS 3节点为例,说明如何在MaxFrame中使用MaxCompute自定义镜像,本示例以使用MaxCompute自定义镜像中的 jieba 包为例进行说明。具体操作如下:

  1. 新建PyODPS 3节点。

    1. 单击项目目录右侧的image,选择新建节点 > MaxCompute > PyODPS 3节点,进入新建节点对话框。

    2. 新建节点对话框中输入节点名称,单击确认,进入节点编辑页。

  2. 编辑PyODPS 3节点代码。

    # -*- coding: utf-8 -*-
    from odps import ODPS, options
    from odps.df import DataFrame
    import pandas as pd
    # 表数据准备
    options.sql.settings = {"odps.isolation.session.enable": True}
    # 创建测试表
    table = o.create_table('jieba_work_tb', 'col string', if_not_exists=True)
    # 添加实例数据
    instance = o.run_sql("insert into table jieba_work_tb values ('离离原上草')")
    instance.wait_for_success()
    # 定义函数,使用MaxCompute自定义镜像中的jieba包处理数据:
    def image_test():
        def process(row):
            import jieba
            result = jieba.cut(row, cut_all=False)
            return "/".join(result)
        #  将表封装为DataFrame对象。
        df = o.get_table("jieba_work_tb").to_df()
        # 应用分词函数处理DataFrame对象数据
        df = df.col.map(process).execute(image='image_jieba') # 本示例MaxCompute镜像名称为image_jieba,您可前往maxCompute控制台查看镜像名称。
        print("打印",df)
    image_test()
    print("Data processing completed!")
  3. 配置PyODPS 3节点。

    单击节点编辑页面右侧的调试配置,参考以下参数信息配置节点内容。

    参数

    说明

    计算资源

    选择您所绑定的MaxCompute计算资源。

    资源组

    选择您所绑定的Serverless资源组。

    镜像

    选择dataworks_pyodps_py311_task_pod:prod_20241210

  4. 单击节点编辑页上方工具栏中的image图标,运行节点。