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

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

资源配置中的 Code-server 镜像 可以自定义,留空时使用平台默认开发环境镜像;GPU 数量用于申请开发环境的 NVIDIA GPU,默认是 0。开发环境镜像和资源独立于发布后 Ray 任务使用的镜像和资源。存储容量用于开发环境持久卷,需要为代码、Conda 环境和依赖预留空间。
查看详情、编辑、删除、开发任务启停以及日志查询
对列表中的开发任务记录,右侧包含 查看详情,编辑,删除,任务启停,查看日志,以及 进入IDE 按钮,对当前开发任务进行查看、编辑、启动停止以及日志查看等操作。
点击去开发按钮,进入任务 IDE编辑界面
对于启动后运行中的开发任务,点击去开发按钮可以进入其界面进行代码开发,包括Flink SQL、Spark SQL以及Python相关代码编写,并将编写完成的代码发布为审批任务。
进入任务 IDE界面后,选择/home/coder/work-dir目录进行代码的编辑。
创建Flink /Spark SQL并发布审批
在左侧树下,点击鼠标右键,创建一个名为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}
使用示例:
- 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 任务类型并完成相关配置。

选择运行集群
- 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 | 清理对象 |
|---|---|
DeleteCluster | RayCluster 及其 Pod |
DeleteWorkers | Worker Pod |
DeleteSelf | RayJob 及其关联资源,包括其管理的集群 |
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 任务相同。