文档首页/ 数据湖探索 DLI/ 用户指南/ DLI常用管理操作/ 使用自定义镜像增强作业运行环境
更新时间:2024-11-07 GMT+08:00

使用自定义镜像增强作业运行环境

自定义镜像应用场景

通过下载DLI提供的基础镜像再按需制作自定义镜像,将作业运行需要的依赖(文件、jar包或者软件)、私有能力等内置到自定义镜像中,以此改变Spark作业和Flink作业的容器运行环境,增强作业的功能、性能。

例如,在自定义镜像中加入机器学习相关的Python包或者C库,可以通过这种方式帮助用户实现功能扩展。

用户使用自定义镜像功能需要具备Docker相关的基础知识。

使用限制

  • 创建自定义镜像必须使用DLI提供的基础镜像。
  • 不能随意修改基础镜像中DLI相关组件及目录。
  • 仅支持Spark jar作业、Flink jar作业,即jar包作业。

使用流程

图1 自定义镜像使用流程
  1. 获取DLI基础镜像。
  2. 使用Dockerfile将作业运行需要的依赖(文件、jar包或者软件)打包到镜像中,生成自定义镜像。
  3. 将镜像发布到SWR(容器镜像服务)中。
  4. 在DLI服务作业编辑页面选择自己生成的镜像,运行作业。
  5. 查看作业执行情况。

获取DLI基础镜像

表1 获取DLI基础镜像

镜像类型

架构

URL

general镜像

X86

swr.ap-southeast-3.myhuaweicloud.com/dli-public/spark_notebook-x86_64:3.3.1-2.3.7.1720240419835647952528832.202404250955

general镜像

ARM

swr.ap-southeast-3.myhuaweicloud.com/dli-public/spark_notebook-aarch64:3.3.1-2.3.7.1720240419835647952528832.202404250955

notebook镜像

X86

swr.ap-southeast-3.myhuaweicloud.com/dli-public/spark_general-x86_64:3.3.1-2.3.7.1720240419835647952528832.202404250955

notebook镜像

ARM

swr.ap-southeast-3.myhuaweicloud.com/dli-public/spark_general-aarch64:3.3.1-2.3.7.1720240419835647952528832.202404250955

创建自定义镜像

以tensorflow为例,说明如何将tensorflow打包进镜像,生成安装了tensorflow的自定义镜像,在DLI作业中使用该镜像运行作业。

  1. 准备容器环境。

    请参考安装容器引擎文档中的“安装容器引擎”章节。

  2. 使用root用户登录1容器镜像环境,执行以下命令获取DLI的基础镜像。

    本示例使用Spark基础镜像为例,使用docker pull方式下载基础镜像到1中的容器镜像环境。

    docker pull 基础镜像下载地址

    基础镜像下载地址参考使用自定义镜像增强作业运行环境

    示例,Spark基础镜像下载:
    docker pull swr.xxx/dli-public/spark_general-x86_64:3.3.1-2.3.7.1720240419835647952528832.202404250955

  3. 连接容器镜像服务。

    1. 登录SWR管理控制台。
    2. 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。
    3. 在安装容器引擎的虚拟机中执行上一步复制的登录指令。

  4. 创建容器镜像组织。如果已创建组织则本步骤可以忽略。

    1. 登录SWR管理控制台。
    2. 选择左侧导航栏的“组织管理”,单击页面右上角的“创建组织”。
    3. 填写组织名称,单击“确定”。

  5. 编写Dockerfile文件。

    vi Dockerfile

    具体内容参考如下,将tensorflow打包进镜像:

    ARG BASE_IMG=swr.xxx/dli-public/spark_general-x86_64:3.3.1-2.3.7.1720240419835647952528832.202404250955//请替换基础镜像的URL
    
    FROM ${BASE_IMG} as builder
    USER omm //注意要使用omm用户执行。
    RUN set -ex && \
        mkdir -p /home/omm/.pip && \
        pip3 install tensorflow==1.13.1 \
        --user --no-cache-dir  --trusted-host pypi.cloudartifact.dgg.dragon.tools.huawei.com \
        -i https://pypi.cloudartifact.dgg.dragon.tools.huawei.com/artifactory/api/pypi/cbu-pypi-public/simple
    内容拷贝到基础镜像中
    USER omm

    其中,主要包含了以下步骤:

    1. 设置pip的可用仓库地址。
    2. 使用pip3安装tensorflow算法包。
    3. 将安装了算法包的临时镜像builder里的内容复制到基础镜像中(这一步主要是为了减小镜像体积),用于生成最终的自定义镜像。

  6. 利用Dockerfile生成自定义镜像。

    镜像打包命令格式:
    docker build -t [自定义组织名称]/[自定义镜像名称]:[自定义镜像版本] --build-arg BASE_IMG=[DLI基础镜像地址] -f Dockerfile . 

    DLI基础镜像地址为获取DLI基础镜像中的镜像地址。

    示例:
    docker build -t mydli/spark:2.4 --build-arg BASE_IMG=swr.xxx/dli-public/spark_general-x86_64:3.3.1-2.3.7.1720240419835647952528832.202404250955 -f Dockerfile .

  7. 给自定义镜像打标签。

    docker tag 6中的[自定义组织名称]/[自定义镜像名称]:[自定义镜像版本] [镜像仓库地址]/[组织名称]/[自定义镜像名称:自定义版本名称]

    示例:
    docker tag mydli/spark:2.4 swr.xxx/testdli0617/spark:2.4.5.tensorflow

  8. 上传自定义镜像。

    docker push [镜像仓库地址]/[组织名称]/[自定义镜像名称:自定义版本名称]

    上述命令中的“[镜像仓库地址]/[组织名称]/[自定义镜像名称:自定义版本名称]”保持和7一致。

    示例:
    docker push swr.xxx/testdli0617/spark:2.4.5.tensorflow

  9. 在DLI服务中提交Spark或者Flink jar作业时选择自定义镜像。

    • 打开管理控制台的Spark作业或者Flink作业编辑页面,在自定义镜像列表中选择已上传并共享的镜像,运行作业,即可使用自定义镜像运行作业。
      如果选择的镜像不是共享镜像,自定义镜像处会提示该镜像未授权,则需要授权后才可以使用。具体可以参考图3,提示处单击“立即授权”即可,填写其他作业执行参数后,再执行作业。
      图2 在DLI Spark作业编辑页面,选择自定义镜像
      图3 Spark作业镜像授权操作
      图4 在DLI Flink jar作业编辑页面,选择自定义镜像
    • 在使用API时,在作业参数中指定image参数,即可使用自定义镜像运行作业。Spark作业请参考《创建批处理作业》,Flink jar作业请参考《创建Flink Jar作业》。