22
33OpenMLDB 针对线上线下的特征工程全流程,在不同阶段提供了不同的执行模式。尤其在生产环境下所使用的集群版,针对不同阶段做了较为复杂的执行模式的划分。本文集中说明在集群版 OpenMLDB 中,从特征开发到上线的全流程,及其相应的执行模式。
44
5- :::{note}
6-
7- 本文所述内容均以 OpenMLDB 最新发布的版本 v0.5.0 版本为准,部分功能的支持在持续迭代开发中,欢迎关注。
8- :::
95
106## 1. OpenMLDB 使用流程概览
117
128### 1.1 特征工程开发上线全流程
139
14- 我们首先对基于 OpenMLDB 的特征工程的开发和上线全流程做总结概述,以下为使用的典型流程 :
10+ 以下为使用OpenMLDB进行特征工程的开发和上线的典型流程 :
1511
16121 . 离线数据导入:导入离线数据用于离线特征工程开发和调试。
17- 2 . 离线开发:开发特征工程脚本,调试到效果满意为止。注意在这个步骤里会牵涉到机器学习模型的联合调试(比如 XGBoost, LightGBM 等),本篇文章内容主要集中于 OpenMLDB 相关部分的特征工程开发 。
13+ 2 . 离线开发:开发特征工程脚本,调试到效果满意为止。注意在这个步骤里会牵涉到机器学习模型的联合调试(比如 XGBoost, LightGBM 等),本篇文章内容主要集中于与 OpenMLDB 相关的特征工程开发 。
18143 . 特征方案部署:得到满意的特征脚本以后,部署上线。
19154 . 冷启动在线数据导入:在正式上线之前需要导入在线存储引擎的必需的窗口内数据。比如特征方案是对于过去三个月内的数据做特征聚合计算,那么冷启动就需要导入之前三个月的数据。
20164 . 实时数据接入:系统上线以后,随着时间推移,需要汇入最新数据来维持窗口计算逻辑,因此需要进行实时数据接入。
21175 . 在线数据预览(可选):可以通过支持的 SQL 命令进行线上数据的预览检查。
22- 6 . 实时请求服务:方案部署,并且数据正确接入以后,即得到一个可以相应在线请求的实时特征计算服务 。
18+ 6 . 实时请求服务:方案部署且数据正确接入后,即得到一个可以响应在线请求的实时特征计算服务 。
2319
2420### 1.2 集群版执行模式概览
2521
2622由于离线和线上场景的操作数据对象不同,其底层的存储和计算节点亦不同。因此,OpenMLDB 设置了几种不同的执行模式来支持完成以上步骤。以下表格总结了各个步骤所使用的执行模式,稍后将会详细介绍关于执行模式的重要概念。
2723
2824
29- | 步骤 | 执行模式 | 开发工具 | 说明 |
30- | ----------------------- | -------- | -------------------------- | ------------------------------------------------------------ |
31- | 1. 离线数据导入 | 离线模式 | CLI | - ` LOAD DATA ` 命令 <br /> |
32- | 2. 离线特征开发 | 离线模式 | CLI | - 支持 OpenMLDB 所有的 SQL 语法<br />- 部分 SQL (如 ` SELECT ` )非阻塞式异步运行方式 |
33- | 3. 特征方案部署 | 离线模式 | CLI | - ` DEPLOY ` 命令 |
34- | 4. 冷启动在线数据导入 | 在线模式 | CLI,导入工具 | - CLI 使用 ` LOAD DATA ` 命令<br />- 也可使用独立导入工具 ` openmldb-import ` |
35- | 5. 实时数据接入 | 在线模式 | REST APIs, Java/Python SDK | - 第三方数据源调用 OpenMLDB 的相关数据插入 API,引入实时数据 |
36- | 6. 在线数据预览(可选) | 在线模式 | CLI, Java/Python SDK | - 目前仅支持 ` SELECT ` 列 、表达式、以及单行处理函数用于数据预览<br />- 不支持 ` LAST JOIN ` , ` GROUP BY ` , ` HAVING ` , ` WINDOW ` 等复杂计算<br /> |
37- | 7. 实时特征计算 | 请求模式 | REST APIs, Java/Python SDK | - 支持 OpenMLDB 所有的 SQL 语法<br />- REST APIs 以及 Java SDK 支持单行或者批请求<br />- Python SDK 仅支持单行请求 |
25+ | 步骤 | 执行模式 | 开发工具 | 说明 |
26+ | ----------------------- | -------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
27+ | 1. 离线数据导入 | 离线模式 | CLI | - ` LOAD DATA ` command <br /> |
28+ | 2. 离线特征开发 | 离线模式 | CLI | - 支持 OpenMLDB 所有的 SQL 语法<br />- 部分 SQL (如 ` SELECT ` )非阻塞式异步运行方式 |
29+ | 3. 特征方案部署 | 离线模式 | CLI | - ` DEPLOY ` 命令 |
30+ | 4. 冷启动在线数据导入 | 在线模式 | CLI,导入工具 | - CLI 使用 ` LOAD DATA ` 命令<br />- 也可使用独立导入工具 ` openmldb-import ` |
31+ | 5. 实时数据接入 | 在线模式 | connector, REST APIs, Java/Python SDK | - 第三方数据源调用 OpenMLDB 的相关数据插入 API(connector) ,引入实时数据< br />- 或使用Java/Python SDK工具,在对请求行的计算完成后,插入主表 |
32+ | 6. 在线数据预览(可选) | 在线模式 | CLI, Java/Python SDK | - 目前仅支持对列进行 ` SELECT ` 操作 、表达式、以及单行处理函数用于数据预览<br />- 不支持 ` LAST JOIN ` , ` GROUP BY ` , ` HAVING ` , ` WINDOW ` 等复杂计算<br /> |
33+ | 7. 实时特征计算 | 请求模式 | REST APIs, Java/Python SDK | - 支持 OpenMLDB 所有的 SQL 语法<br />- REST APIs 以及 Java SDK 支持单行或者批请求<br />- Python SDK 仅支持单行请求 |
3834
3935从以上的总结表格上可以看到,执行模式分为 ` 离线模式 ` ,` 在线模式 ` ,以及` 请求模式 ` 。在后面的章节中,我们将对这几种模式展开详细介绍。下图总结示意了全流程开发和对应的执行模式。
4036
4137![ image-20220310170024349] ( images/modes-flow.png )
4238
4339### 1.3 单机版执行模式说明
4440
45- 虽然本文集中讲解集群版,但是有必要也简单介绍单机版的执行模式。单机版的执行模式相对简单,主要其离线数据和在线数据的存储和计算节点统一 ,因此单机版并不区分离线模式和在线模式。即我们可以直观的理解为,在 CLI 下,单机版并没有执行模式的概念,任何可以支持的 SQL 语法均可以在 CLI 下直接运行。因此,单机版特别适合用来快速试用或者实验学习 SQL 使用。 在实时特征计算阶段,单机版和集群版一样,依然运行于在线请求模式下。
41+ 虽然本文集中讲解集群版,但是有必要也简单介绍单机版的执行模式。单机版的执行模式相对简单,其离线数据和在线数据的存储和计算节点统一 ,因此单机版并不区分离线模式和在线模式。即我们可以直观的理解为,在 CLI 下,单机版并没有执行模式的概念,任何OpenMLDB支持的 SQL 语法均可以在 CLI 下直接运行。因此,单机版特别适合用于快速试用或进行 SQL 实践。但是, 在实时特征计算阶段,单机版和集群版一样,依然运行于在线请求模式下。
4642
4743:::{note}
48- 如果你只是在非生产环境想试用 OpenMLDB,或者学习实验相关 SQL, 强烈建议使用单机版,可以更加快捷方便的部署体验。
44+ 如果仅在非生产环境试用 OpenMLDB或进行SQL学习实践, 强烈建议使用单机版,可以获得更快捷方便的部署体验
4945:::
5046
5147## 2. 离线模式
5248
53- 按照之前总结 ,集群版的离线数据导入、离线特征开发、特征方案部署上线均在离线模式下执行。离线模式是针对离线数据进行管理和计算,所涉及到的计算节点是由 [ 针对特征工程优化的 OpenMLDB Spark 发行版] ( http ://docs-cn. openmldb.ai/2620858 ) 所支持,存储节点支持 HDFS 等常见存储系统。
49+ 如前所述 ,集群版的离线数据导入、离线特征开发、特征方案部署上线均在离线模式下执行。离线模式的作用是对离线数据进行管理和计算。涉及的计算节点由 [ 针对特征工程优化的 OpenMLDB Spark 发行版] ( https ://openmldb.ai/docs/zh/main/tutorial/openmldbspark_distribution.html ) 支持,存储节点支持使用 HDFS 等常见存储系统。
5450
5551离线模式有以下主要特点:
5652
5753- 离线模式支持所有 OpenMLDB 提供的 SQL 语法,包括扩展优化的 ` LAST JOIN ` , ` WINDOW UNION ` 等复杂 SQL 语法。
58- - 离线模式的部分 SQL 运行是基于非阻塞式的异步执行 ,包括 ` LOAD DATA ` , ` SELECT ` , 以及` SELECT INTO ` 命令。
59- - 非阻塞式执行的 SQL 执行是由内部的 TaskManager 进行管理,可以通过 ` SHOW JOBS ` , ` SHOW JOB ` , ` STOP JOB ` 命令进行查看和管理。
54+ - 离线模式中,部分 SQL 命令以基于非阻塞式的异步方式执行 ,包括 ` LOAD DATA ` , ` SELECT ` , 以及` SELECT INTO ` 命令。
55+ - 非阻塞式执行的 SQL 由内部的 TaskManager 进行管理,可以通过 ` SHOW JOBS ` , ` SHOW JOB ` , ` STOP JOB ` 命令进行查看和管理。
6056
6157:::{tip}
62- 和很多关系型数据库系统不同,` SELECT ` 在离线模式下为异步执行 。因此在离线特征开发阶段,强烈建议使用 ` SELECT INTO ` 语句进行开发调试,可以将结果导出到文件,方便进行查看 。
58+ 和很多关系型数据库系统不同,` SELECT ` 命令在离线模式下为异步执行 。因此在离线特征开发阶段,强烈建议使用 ` SELECT INTO ` 语句进行开发调试,可以将结果导出到文件,方便查看 。
6359:::
6460
65- 特征方案部署的命令( ` DEPLOY ` ) 亦在离线模式下执行。其部署规范对于 SQL 还有一定的限制,详细可以参阅 [ OpenMLDB SQL上线规范和要求] ( http ://docs-cn. openmldb.ai/2620917 ) 。
61+ 用于特征方案部署的命令 ` DEPLOY ` 亦在离线模式下执行。其部署规范对于 SQL 还有一定的限制,详细可以参阅 [ OpenMLDB SQL上线规范和要求] ( https ://openmldb.ai/docs/zh/main/reference/sql/deployment_manage/ONLINE_SERVING_REQUIREMENTS.html ) 。
6662
67- 离线模式可以通过以下形式设置 :
63+ 离线模式可以通过以下方式设置 :
6864
6965- CLI: ` SET @@execute_mode='offline' ` ;CLI 启动以后的默认模式也为离线模式。
7066- REST APIs, Java/Python SDK:不支持离线模式
7167
7268## 3. 在线模式
7369
74- 冷启动在线数据导入、实时数据接入、以及在线数据预览在在线模式下执行。在线模式主要是针对线上数据进行管理和预览,线上数据的存储和计算是由 tablet server 支持。
70+ 冷启动在线数据导入、实时数据接入、以及在线数据预览在在线模式下执行。在线模式的作用是针对线上数据进行管理和预览。线上数据的存储和计算由 tablet server 支持。
7571
7672在线模式有以下主要特点:
7773
@@ -89,17 +85,18 @@ OpenMLDB 针对线上线下的特征工程全流程,在不同阶段提供了
8985
9086请求模式需要三个输入:
9187
92- - SQL 特征脚本,即为特征部署上线过程中所使用的 SQL 脚本,其规定了做特征抽取的计算逻辑。
93- - 在线数据,即为冷启动导入或者实时接入的线上数据,一般其为配合 SQL 的窗口计算的最新数据。比如 SQL 脚本的聚合函数会定义一个最近三个月的时间窗口,那么在线存储就需要保留相应的最新三个月数据。
94- - 实时请求行(a request row),包含了当前正在发生的实时行为,用于实时特征抽取,比如反欺诈场景下的刷卡信息,或者是推荐场景下的搜索关键字等。
88+ - SQL 特征脚本,即为特征部署上线过程中所使用的 SQL 脚本,规定了做特征抽取的计算逻辑。
89+ - 在线数据,即为冷启动导入或者实时接入的线上数据。一般为配合 SQL 的窗口计算的最新数据。比如 SQL 脚本的聚合函数会定义一个最近三个月的时间窗口,那么在线存储就需要保留相应的最新三个月数据。
90+ - 实时请求行(a request row),包含了当前正在发生的实时行为,用于实时特征抽取。比如反欺诈场景下的刷卡信息,或者是推荐场景下的搜索关键字等。
91+
9592
96- 基于这三个输入 ,对于每一个实时请求行,请求模式都会返回一条特征抽取的结果。其计算逻辑为:请求行会依据 SQL 脚本的逻辑(如 ` PARTITION BY ` , ` ORDER BY ` 等), 被虚拟的插入在线数据表格的正确位置中,然后只针对该行进行特征聚合计算,返回唯一对应的抽取结果。下图直观的解释了在线请求模式的运算过程。
93+ 基于上述输入 ,对于每一个实时请求行,请求模式都会返回一条特征抽取的结果。其计算逻辑为:请求行会依据 SQL 脚本的逻辑(如 ` PARTITION BY ` , ` ORDER BY ` 等)被虚拟的插入在线数据表格的正确位置中,然后只针对该行进行特征聚合计算,返回唯一对应的抽取结果。下图直观的解释了在线请求模式的运算过程。
9794
9895![ modes-request] ( images/modes-request.png )
9996
10097请求模式通过以下形式支持:
10198
10299- CLI:不支持
103- - REST APIs:支持单行或者多行 request rows 的请求,详见:[ REST APIs] ( http ://docs-cn. openmldb.ai/2620875 )
104- - Java SDK:支持单行或者多行 request rows 的请求,详见:[ Java SDK 快速上手] ( http ://docs-cn. openmldb.ai/2620853 )
105- - Python SDK:仅支持单行的 request row 请求,详见:[ Python SDK 快速上手] ( http ://docs-cn. openmldb.ai/2620854 )
100+ - REST APIs:支持单行或者多行 request rows 的请求,详见:[ REST APIs] ( https ://openmldb.ai/docs/zh/main/quickstart/rest_api.html )
101+ - Java SDK:支持单行或者多行 request rows 的请求,详见:[ Java SDK 快速上手] ( https ://openmldb.ai/docs/zh/main/quickstart/java_sdk.html )
102+ - Python SDK:仅支持单行的 request row 请求,详见:[ Python SDK 快速上手] ( https ://openmldb.ai/docs/zh/main/quickstart/python_sdk.html )
0 commit comments