自定义算子使用说明

1、概述

平台支持自定义上传算子,以支持更复杂和灵活的数据治理流程,目前只支持使用 Python 编写的算子程序。
下面将以一个示例介绍算子的使用。

2、起名

描述此算子的名称,此处以 hello 为例

3、编码

编码后的结构如下所示

1
2
# ls
Dockerfile app.py packages.txt venv
  • Dockerfile 文件内容固定
1
2
3
4
5
6
7
8
9
10
11
12
FROM python:3.9-slim

WORKDIR /home/geovis

COPY app.py .
COPY packages.txt .

EXPOSE 5000

RUN pip install -r packages.txt -i https://pypi.tuna.tsinghua.edu.cn/simple && \
rm -rf /root/.cache
CMD ["python", "app.py"]
  • app.py 为算子主程序

平台只支持使用单个 py 文件,且此文件必须命名为 app.py,示例内容如下,算子暴露了一个 5000 端口,在 /hello 路由暴露了一个方法。

算子必须使用 5000 端口,且使用 0.0.0.0 暴露

算子必须有且仅有一个路由,用以编写算子处理逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Flask

app = Flask(__name__)


@app.route('/hello')
def hello_world(): # put application's code here
return 'Hello World!'


if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)

  • packages.txt 为依赖文件

此文件生成方式见 <生成依赖> 章节

1
2
3
4
5
6
7
8
click==8.1.3
Flask==2.1.2
importlib-metadata==4.11.4
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
Werkzeug==2.1.2
zipp==3.8.0
  • venv 为虚拟环境

建议使用虚拟环境初始化算子开发环境,其可以初始化出算子开发所需要的独立干净的环境,在生成依赖文件时也可以避免引入其他无用的依赖

4、 生成依赖

1
pip freeze -l > packages.txt

5、构建镜像

假设工作目录为 app

注意替换 hello 为正确的业务算子名称,只可为英文字母、数字和 - 的组合,且以英文字母开头

平台上传的算子名称不可重复

其中 hub.geovis.com.cn/library/algorithm- 为固定值,不可更改

本地需有 docker 环境

1
2
3
cd app
docker build -t hub.geovis.com.cn/library/algorithm-hello .
docker save hub.geovis.com.cn/library/algorithm-hello > algorithm-hello.tar

执行完成后将会在工作目录下生成一个名为 algorithm-xxx.tar 的文件,此处示例为 algorithm-hello.tar,此文件即是最终的算子镜像制品。

6、上传算子镜像

  • 界面输入算子名称(必填)、算子描述、路由、参数等信息
  • 点击上传按钮上传上一步导出的算子镜像制品文件,即 algorithm-xxx.tar
  • 点击确定按钮,后台将会异步加载镜像,并创建算子服务,后台返回 200 创建成功
  • 刷新算子管理界面的列表,后台返回算子信息以及运行状态