跳到主要内容

开发环境

点击左侧导航栏数智开发-开发环境按钮,进入开发环境管理界面,可以看到当前工作空间下的开发任务列表,在当前页面,可以创建、编辑开发任务、以及对当前开发任务的启停、日志查看和进入任务 IDE界面等操作。

创建开发任务​

点击创建开发任务按钮,在弹出任务配置页面。按要求依次输入名称、资源配置信息包括CPU、内存、存储等大小以及描述信息,完成后点击创建按钮,可以创建一个新开发任务信息。

资源配置中的 Code-server 镜像 可以自定义,留空时使用平台默认开发环境镜像;GPU 数量用于申请开发环境的 NVIDIA GPU,默认是 0。开发环境镜像和资源独立于发布后 Ray 任务使用的镜像和资源。存储容量用于开发环境持久卷,需要为代码、Conda 环境和依赖预留空间。

查看详情、编辑、删除、开发任务启停以及日志查询​

对列表中的开发任务记录,右侧包含 查看详情,编辑,删除,任务启停,查看日志,以及 进入IDE 按钮,对当前开发任务进行查看、编辑、启动停止以及日志查看等操作。

点击去开发按钮,进入任务 IDE编辑界面​

对于启动后运行中的开发任务,点击去开发按钮可以进入其界面进行代码开发,包括Flink SQL、Spark SQL以及Python相关代码编写,并将编写完成的代码发布为审批任务。

进入任务 IDE界面后,选择/home/coder/work-dir目录进行代码的编辑。

在左侧树下,点击鼠标右键,创建一个名为user-demo.sql的Flink/Spark SQL note,在创建成功后,可以在其中进行Flink/Spark SQL的编辑,并对其中的SQL进行运行

  • 点击Run on activate connection在弹出的SQL Tool Connection中选择lakesoul-flink-global/lakesoul-spark-global连接信息,可以执行当前SQL。

  • 选中要执行的代码,点击右键,选择Run Selected Query在弹出的SQL Tool Connection中选择lakesoul-flink-global/lakesoul-spark-global连接信息,可以执行当前选中的SQL。

  • 运行完成后,会在右侧输出当前SQL或者选中的SQL执行或的结果

  • 发布编写后的Flink/Spark SQL代码。点击右上角的任务配置按钮,可以对Flink流/批方式、Spark以批的方式发布上线审批,发布后可以对其进行流式或者批式的定时调度配置。

在任务配置面板,选择是否是新建任务还是更新已上线任务,选择对应的Flink/Spark SQL文件获取SQL内容,选择对应的Flink、Spark处理引擎以及如果是Flink引擎的话设置任务的流还是批运行模式,设置对应的资源信息,点击发布按钮可以将其发布到任务管理的审批任务界面。

开发 SQL 语句时, 可以使用 ${scheduleTime} 的方式, 获取当前任务的调度时间 timestamp.

用法: ${scheduleTime}

使用示例:

  1. SQL 中增加 ${scheduleTime}
insert into `lakesoul`.`test_cdc`.`test` values (8, FROM_UNIXTIME(${scheduleTime}/1000,'yyyy-MM-dd HH:mm:ss'), 'test-8', 'aa-8');

创建Python任务并发布审批​

在左侧树面板点击鼠标右键,创建一个名为user-note-1.py 或者user-note-1.ipynb的Python任务,在创建成功后,可以在其中进行Python相关任务的代码开发。

  • 运行编辑后的Python代码

    • 创建Python运行环境

      IDE内内置了conda命令,可以通过如下方式创建一个Python的虚拟运行环境,以便对开发项目相关依赖的隔离

      conda create -n lakesoul_venv python=3.10

      conda activate lakesoul_venv

      conda install -y -n lakesoul_venv -c conda-forge conda-pack
    • 在创建完环境后,点击界面右下角的环境选择,选择最新创建的运行环境

选中运行后环境,点击右上角的运行Python文件,可以执行当前Python代码,并可以查看输出结果

- 以Jupyter的方式运行Python代码

点击右上角的Select Kernel,在出现的Python环境选择列表选中对应的Python环境

点击Run ALL按钮或者对应的cell的Execute Cell按钮,执行其对应的代码

- 将编写后的Python代码,发布为审批任务,在审批后可以进行任务上线以定时调度方式运行

1. 审批上线时需要将当前的虚拟环境通过`conda pack -f -n lakesoul_venv -o lakesoul_venv.tar.gz`打包为tar文件,并通过上传包的功能,将其传到包文件管理。如果上线后的Python任务运行时,如果依赖环境出现缺失的情况可以通过`conda install`安装相关的依赖库。

    2. 点击右上角的**任务配置**按钮,可以对Python类型的任务发布进行配置

在任务配置面板,选择是否是新建任务还是更新已上线任务,选择对应的Python文件内容,选择Python处理引擎,选择Python运行依赖环境,可以选择已上传的环境依赖文件或者也可以点击右侧的上传包,将新的打包后的tar文件上传为新的包文件,然后设置对应的资源信息,点击发布按钮可以将其发布到任务管理的审批任务界面。

使用Python开发批调度任务时,可以使用--scheduleTime获取当前任务的调度时间戳,具体使用方法如下:

import argparse

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="PySpark Batch Task")
parser.add_argument("--scheduleTime", type=str, required=True, help="Set scheduler Time")

args = parser.parse_args()
currentDate = int(args.scheduleTime)
previousDate = datetime.fromtimestamp(currentDate / 1000, tz=pytz.timezone("Asia/Shanghai")) - timedelta(days=1) # 获取当前时间的前一天时间
preDate = previousDate.strftime("%Y%m%d")
print(preDate)

创建Ray Job任务并发布审批​

在左侧资源管理器的 /home/coder/work-dir 目录下创建 Python 文件,并编写 Ray、Daft 和 LakeSoul 相关代码。

点击界面右下角的 Python 运行环境,选择默认的 /home/coder/conda/envs/lakesoul_venv/bin/python 运行环境。

点击右上角的运行按钮,选择 Run Python File,运行当前 Python 文件,并在终端查看执行结果。

代码验证完成后,点击右上角的任务配置按钮,选择 Ray Job 任务类型并完成相关配置。

Ray Job 任务发布配置

选择运行集群​

  • RayJob-managed:由 RayJob 为任务创建集群,任务使用独立的 Head/Worker,资源与镜像在任务配置中设置。未显式配置清理策略时,平台默认在任务结束 1800 秒(30 分钟)后自动回收集群。
  • Standalone:选择当前工作空间中已就绪、未停止的集群。多个任务可以复用同一个集群。任务配置中的 Head/Worker、GPU 和自动伸缩参数只读展示当前集群配置;修改资源需要到集群管理页面操作,任务不会覆盖集群资源或镜像。

创建和管理 Standalone 集群的方法见 Ray Cluster 管理。绑定包含集群名称和 UID;删除后即使重建同名集群,也需要在任务配置中重新选择。切换回 RayJob-managed 时,需要核对 RayJob-managed 集群表单中的资源、镜像和清理配置。

资源与镜像​

  • Worker CPU 数 / Worker 内存大小:每个 Worker Pod 的 CPU 和内存资源。
  • GPU / Worker:每个 Worker 的 NVIDIA GPU 数量,0 表示不申请 GPU。当前平台使用 nvidia.com/gpu,该字段不用于申请 AMD GPU。GPU 任务仍需要 CPU 和内存。
  • Worker 自动扩容:关闭时按 Worker 数量创建固定规模;开启时 RayJob-managed 集群初始 Worker 数和下限为 0,根据任务负载扩缩容,最大 Worker 数控制上限。Head 不计入 Worker 数量。
  • Head CPU 数 / Head 内存大小:Head Pod 的资源。Head 内存建议从 4G 起配。
  • Ray 镜像: RayJob-managed 集群显式填写镜像时优先使用该镜像;留空时,GPU / Worker 大于 0 使用平台默认 GPU 镜像,否则使用默认 CPU 镜像。平台分别通过 compute_engine.ray_gpu_runtime 和 compute_engine.ray_runtime 配置默认值;对应默认值未配置时提交会报错。Standalone 集群使用自身镜像。

自定义 GPU 镜像需要包含适配的 Ray、CUDA 和任务依赖,集群节点也需要可分配的 NVIDIA GPU;仅填写 GPU 数量不会自动安装驱动。Ray 代码还需要声明任务或 Actor 的 GPU 资源需求。

项目文件与运行依赖​

  • Ray 工作目录包:可选,对应 Ray Working Directory(类型 7),只支持 .zip,用于项目模块和资源文件。平台会合并任务入口代码并生成每次运行的 working_dir;不选择工作目录包时也会生成入口包。
  • Python Archives:可选,对应 Python 环境包(类型 6),用于提供打包后的 Python 解释器和依赖,支持 .zip、.tar.gz。它不是项目工作目录包。归档根目录必须包含 bin/python 和 bin/activate,并且环境需要与集群的系统、架构及 Ray/Python 版本兼容。
  • Ray Runtime Env 配置:两种集群模式均可填写 YAML,配置任务级依赖与环境变量。working_dir 由平台生成,不允许手动填写;excludes 由平台在生成工作目录包时处理,不透传给 Ray,也不能排除平台生成的入口文件。

未选择 Python Archives 时,可以用以下配置补充依赖:

pip:
- pendulum==3.0.0
env_vars:
MY_ENV: test
excludes:
- .venv/
- __pycache__/
- "*.log"

选择 Python Archives 后,任务使用包内的 Python 环境。平台当前不支持同时通过 Runtime Env 的 pip、conda、uv、py_executable、container 或 image_uri 配置另一套运行环境;仍可使用 env_vars 设置业务环境变量,以及用 excludes 排除项目文件。这一限制仅在选择 Python Archives 时适用。

工作目录包和环境包的打包方法见 程序包管理。

RayJob 配置与清理策略​

这里填写平台支持的 RayJob 配置字段,不是完整的 Kubernetes YAML;不要包含 apiVersion、kind、metadata 或 spec。字段名区分大小写。支持 activeDeadlineSeconds、preRunningDeadlineSeconds、backoffLimit、submitterConfig.backoffLimit、shutdownAfterJobFinishes、ttlSecondsAfterFinished 和 deletionStrategy.deletionRules。

选择 Standalone 时:

  • shutdownAfterJobFinishes 只能省略或设为 false。
  • 禁止填写 ttlSecondsAfterFinished,即使值为 0 也不允许。
  • 禁止填写整个 deletionStrategy,包括 DeleteSelf、DeleteWorkers 和 DeleteNone。
  • 顶层 backoffLimit 只能省略或设为 0;需要重新运行时通过平台操作。

例如:

activeDeadlineSeconds: 3600
preRunningDeadlineSeconds: 600
backoffLimit: 0
shutdownAfterJobFinishes: false

选择 RayJob-managed 时,以下两套清理方式只能选一套。 未填写任何清理字段时,平台自动添加 shutdownAfterJobFinishes: true 和 ttlSecondsAfterFinished: 1800;仅填写超时、重试等非清理字段也会使用此默认值。显式填写任一清理字段时,使用用户配置,不补充默认清理字段。要关闭自动回收,可仅填写 shutdownAfterJobFinishes: false。

方式一:任务结束 1800 秒后回收集群资源(平台默认策略)。

shutdownAfterJobFinishes: true
ttlSecondsAfterFinished: 1800

ttlSecondsAfterFinished 大于 0 时,必须同时设置 shutdownAfterJobFinishes: true。

显式只填写 shutdownAfterJobFinishes: true 时,使用 KubeRay 默认 TTL 0,任务结束后不额外等待;使用 deletionStrategy 时不会注入上述默认字段。默认值在提交新 RayJob 时应用,不会修改已创建的 RayJob。

方式二:按规则清理,当前只支持非空的 deletionRules,不支持旧版 onSuccess / onFailure。使用前需要集群安装的 KubeRay CRD 和 Operator 支持此字段,并启用 RayJobDeletionPolicy。策略含义见 KubeRay 官方说明:

policy清理对象
DeleteClusterRayCluster 及其 Pod
DeleteWorkersWorker Pod
DeleteSelfRayJob 及其关联资源,包括其管理的集群
DeleteNone不执行删除
deletionStrategy:
deletionRules:
- policy: DeleteCluster
condition:
jobStatus: SUCCEEDED
ttlSeconds: 800
- policy: DeleteCluster
condition:
jobStatus: FAILED
ttlSeconds: 3600

condition.ttlSeconds 表示从满足该条终态条件开始等待多少秒,必须是非负整数。每条规则必须且只能选择 jobStatus(SUCCEEDED 或 FAILED)或者 jobDeploymentStatus: Failed 作为条件。使用 deletionStrategy 时,顶层不能再出现 shutdownAfterJobFinishes 或 ttlSecondsAfterFinished,即使填 false / 0 也不允许。

发布和编辑任务时,配置冲突会在表单中提示;后端在保存与提交时也会校验。切换集群模式后,需要同步移除新模式不允许的字段。

点击发布后,任务进入 生产任务-发布审批,审批通过后即可上线运行。批任务按平台调度配置执行;使用 --scheduleTime 获取调度时间戳的方法与 Python 任务相同。