DolphinDB作业管理概述
本页介绍 DolphinDB 中作业(Job)的定义,并按同步作业与异步作业进行分类概览。
Source: https://dolphindb.cn/blogs/56
What this page covers
- 作业(Job)的定义与分类(同步/异步)。
- 同步/交互式作业的来源与优先级倾向。
- 异步作业的类型与优先级倾向。
- 分区表查询与分布式计算的子任务分解与汇总。
- Worker 与 Executor 的执行分工与典型场景。
- 基于优先级的调度策略、并行度与优先级设置规则。
- 分区副本容错与计算存储耦合、数据共享机制。
技能认证特训营第二期报名活动
页面顶部包含活动报名提示与链接信息。
- 提供一个限时报名链接。
DolphinDB作业管理概述(标题与作者/日期)
本节给出文章的标题、作者署名与发布日期。
- 发布日期为 2021-08-05。
- 作者署名为 Junxi。
作业(Job)定义与分类概览
本节定义 Job 为基本执行单位,并按同步/异步进行分类。
- 作业(Job)可理解为一段 DolphinDB 脚本代码的一次执行。
- Job 按是否阻塞分为同步作业与异步作业。
同步作业(Interactive Job)
本节说明同步/交互式作业的来源,并描述系统对其优先级的倾向。
- 同步作业也称为交互式作业(Interactive Job)。
- 交互式作业可来自 Web notebook。
- 交互式作业可来自 DolphinDB GUI、命令行界面或各语言 API。
- 同步作业通常对实时性要求较高。
- 执行过程中会自动给予同步/交互式作业较高优先级以更快获得计算资源。
异步作业
本节说明异步作业的类型,以及其对优先级与反馈实时性的特点。
- 异步作业是在 DolphinDB 后台执行的作业。
- 异步作业包括通过 submitJob 或 submitJobEx 提交的批处理作业。
- 异步作业包括通过 scheduleJob 提交的定时作业。
- 异步作业包括 Streaming 作业。
- 异步作业一般对结果实时反馈要求较低,且需要长期执行。
- 系统一般给予异步作业较低优先级。
子任务(Subtask)与并行/分布式执行
本节解释 Job 在分区表查询与分布式计算中如何分解为子任务并行执行,并在完成后汇总结果。
- 当 Job 包含分区表查询计算任务(如 SQL 查询)时,可能分解为多个子任务。
- 子任务可发送到不同节点并行执行。
- 子任务完成后会合并结果以继续执行原 Job。
- DolphinDB 的分布式计算也会产生子任务。
- Job 也可以理解成一系列的子任务。
Worker 与 Executor 执行模型
本节描述 P2P 架构下 Data Node、Worker 与 Executor 的职责分工与典型执行场景。
- DolphinDB 是 P2P 架构系统,每个 Data Node 角色相同。
- 每个 Data Node 都可执行用户提交的 Job。
- Worker 负责 Job 内部执行调度与结果汇集等职责。
- 子任务可由 Data Node 上的 Worker 或 Executor 线程负责执行。
- 未分区表查询的 Job 将由 Worker 线程执行。
- 单机分区表查询的 Job 可能由多个 Executor 线程并行执行子任务。
- DFS 分区表查询的 Job 可能分发到其他 Node 的 Worker 上执行。
将计算发送到数据所在节点以减少网络开销
本节阐述子任务尽量在数据所在 Data Node 执行,以减少网络传输开销,并说明分发依据。
- 为最大化性能,会将子任务发送到数据所在 Data Node 上执行。
- 该策略用于减少网络传输开销。
- DFS 分区表子任务分发会参考分区模式与分区所在 Data Node。
- 分布式计算子任务分发会参考数据源信息并发送到相应数据源 Data Node。
Job 调度(总览)
本节作为 Job 调度主题的结构入口,指向优先级、调度策略、并行度与优先级设置等内容。
- 包含 Job 优先级的说明主题。
- 包含 Job 调度策略的说明主题。
- 包含 Job 并行度(parallelism)的说明主题。
- 包含优先级动态变化与优先级设置规则的说明主题。
Job 优先级(范围、默认值与类型调整)
本节说明优先级范围、数值含义、默认优先级及其按 Job 类型调整。
- Job 优先级取值范围为 0-9。
- 优先级数值越高,优先级越高。
- 优先级高的 Job 会更及时获得计算资源。
- 每个 Job 一般默认有 default priority,取值为 4。
- 默认优先级会根据 Job 类型调整。
Job 调度策略(多级反馈队列与轮转)
本节说明使用多级反馈队列调度,并在同优先级内采用轮转分配。
- Job 调度基于优先级使用多级反馈队列。
- 系统维护 10 个队列,对应 10 个优先级。
- 系统优先分配线程资源给高优先级 Job。
- 同优先级 Job 以 round robin 方式分配线程资源。
- 高优先级队列为空时才处理低优先级队列。
Job 并行度(parallelism)
本节解释 parallelism 的含义、默认值,并给出对调度轮次影响的示例。
- parallelism 表示一个 Data Node 上最多同时使用的线程数量上限。
- parallelism 默认取值为 2。
- 示例:parallelism=2 且有 100 个子任务时,每轮仅分配 2 个线程计算。
- 示例:在上述条件下需要 50 轮调度完成整个 Job。
Job 优先级的动态变化(防饥饿)
本节描述时间片结束后的动态降级与回跳机制,用于缓解饥饿问题。
- 时间片执行完毕后,若存在更低优先级 Job,则自动降低一级优先级。
- 到达最低优先级后,会回到初始优先级。
- 该机制用于解决或缓解饥饿问题。
设置 Job 的优先级(不同提交方式)
本节说明不同提交方式下的优先级设置规则与限制。
- console、web notebook、API 提交的 interactive job 优先级取值为 min(4,用户最高优先级)。
- 可通过改变用户自身优先级值影响 interactive job 的优先级。
- submitJob 提交的 batch job 默认优先级为 4。
- submitJobEx 可用于为 batch job 指定优先级。
- 定时任务优先级无法改变,默认为 4。
计算容错(分区副本与重试)
本节描述基于分区副本冗余的容错与重试机制,并提及可通过参数调整冗余度。
- DolphinDB database 的分布式计算具有一定容错性,主要得益于分区副本冗余存储。
- 若节点故障或副本数据校验错误,Job Scheduler 会发现故障。
- 发生故障时会选择该分区的另一个副本节点重新执行子任务。
- 可通过设置 dfsReplicationFactor 调整冗余度。
计算与存储耦合以及作业之间的数据共享
本节解释计算存储耦合的动机,并描述作业间共享分区副本与将计算发送到数据节点以降低开销的方案。
- DolphinDB 的计算尽量靠近存储,并采取计算与存储耦合架构。
- 计算与存储分离的场景中,应用之间不共享存储可能带来数据冗余与内存浪费。
- 在部分部署环境中,网络传输可能成为性能瓶颈。
- 分区存储到 DFS 后,每个分区副本归属特定节点。
- 同一节点上的分区副本在内存中只存在一份。
- 多个 Job 子任务涉及同一分区副本时可共享读取以减少内存浪费。
- Job 可根据 DFS 分区信息分解并发送子任务到分区所在节点执行。
- 将计算发送到数据节点相当于发送代码,可减少网络开销。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| DolphinDB作业管理概述 | publication_date | 2021-08-05 | high |
| DolphinDB作业管理概述 | author | Junxi | high |
| DolphinDB | job_definition | 作业(Job)是最基本的执行单位,可理解为一段 DolphinDB 脚本代码在系统中的一次执行。 | high |
| DolphinDB | job_types | Job 根据阻塞与否分为同步作业与异步作业。 | high |
| 同步作业 | alias | 同步作业也称为交互式作业(Interactive Job)。 | high |
| 同步作业 | realtime_requirement | 对实时性要求较高。 | medium |
| DolphinDB | interactive_job_priority_policy | 执行过程中会自动给予同步/交互式作业较高优先级,以更快获得计算资源。 | medium |
| 同步/交互式作业来源 | sources | Web notebook;DolphinDB GUI;DolphinDB 命令行界面;通过 DolphinDB 提供的各编程语言 API 接口。 | high |
| 异步作业 | definition | 异步作业是在 DolphinDB 后台执行的作业。 | high |
| 异步作业类型 | includes | 通过 submitJob 或 submitJobEx 提交的批处理作业;通过 scheduleJob 提交的定时作业;Streaming 作业。 | high |
| 异步作业 | realtime_requirement | 一般对结果的实时反馈要求较低,且需要长期执行。 | medium |
| DolphinDB | async_job_priority_policy | 一般会给予异步作业较低的优先级。 | medium |
| 子任务 | created_when | 当 Job 包含分区表查询计算任务(如 SQL 查询)时会分解成多个子任务发送到不同节点并行执行,待子任务完成后合并结果继续执行原 Job。 | high |
| 子任务 | also_created_by | DolphinDB 的分布式计算也会产生子任务。 | high |
| Job | interpretation | Job 也可以理解成一系列的子任务。 | high |
| DolphinDB | architecture | 是 P2P 架构系统,每个 Data Node 角色相同,都可执行用户提交的 Job。 | high |
| Worker | role | Data Node 上负责 Job 内部执行调度:处理用户提交的 Job、执行简单计算、任务分解与分发、汇集最终结果。 | high |
| 子任务执行线程 | executors | Job 分解出的子任务分发到集群 Data Node 上,由 Data Node 上的 Worker 或 Executor 线程负责执行。 | high |
| 未分区表查询 | execution | 当表未分区时,对其查询的 Job 将由 Worker 线程执行。 | high |
| 单机分区表查询 | execution | 当表被分区存放在单机上时,查询 Job 可能分解为多个子任务,由该节点上多个 Executor 线程并行执行。 | high |
| DFS 分区表查询 | execution | 当表被分区存储在 DFS 时,查询 Job 可能分解为多个子任务并分发到其他 Node 的 Worker 上执行,实现分布式计算。 | high |
| DolphinDB | data_locality_policy | 为最大化性能,会将子任务发送到数据所在 Data Node 上执行,以减少网络传输开销。 | medium |
| DFS 分区表子任务分发依据 | basis | Worker 会根据分区模式以及分区当前所在 Data Node 进行任务分解与分发。 | high |
| 分布式计算子任务分发依据 | basis | Worker 会根据数据源信息,将子任务发送到相应数据源 Data Node 执行。 | high |
| Job 优先级 | range | 优先级取值范围为 0-9,取值越高优先级越高。 | high |
| DolphinDB | priority_resource_policy | 优先级高的 Job 会更及时获得计算资源。 | medium |
| Job 默认优先级 | default_priority | 每个 Job 一般默认有 default priority,取值为 4,并会根据 Job 类型调整。 | high |
| Job 调度策略 | scheduler_type | 基于优先级使用多级反馈队列调度。 | high |
| 优先级队列数量 | queue_count | 系统维护 10 个队列,对应 10 个优先级。 | high |
| 线程资源分配原则 | policy | 系统总是优先分配线程资源给高优先级 Job;同优先级 Job 以 round robin 方式分配;高优先级队列为空时才处理低优先级队列。 | high |
| Job 并行度 parallelism | definition | 表示在一个 Data Node 上最多同时用多少个线程执行 Job 产生的并行任务。 | high |
| Job 并行度 parallelism | default_value | 默认取值为 2(文中称可认为是一种时间片单位)。 | high |
| 并行度示例 | scheduling_rounds_example | 若 parallelism=2 且产生 100 个并行子任务,被调度时系统仅分配 2 个线程计算子任务,因此需要 50 轮调度完成整个 Job。 | high |
| 优先级动态变化机制 | anti_starvation | 时间片执行完毕后,若存在比其低优先级的 Job,则自动降低一级优先级;到达最低点后回到初始优先级,以解决饥饿问题。 | high |
| 交互式作业优先级设置 | rule | console、web notebook、API 提交的 interactive job 的优先级取值为 min(4,一个可调节的用户最高优先级),可通过改变用户自身优先级值调整。 | medium |
| 批处理作业优先级设置 | rule | 通过 submitJob 提交的 batch job 系统给予 default priority=4;也可用 submitJobEx 指定优先级。 | high |
| 定时任务优先级设置 | rule | 定时任务优先级无法改变,默认为 4。 | high |
| DolphinDB database 分布式计算 | fault_tolerance_basis | 具有一定容错性,主要得益于分区副本冗余存储。 | high |
| Job Scheduler 故障处理 | behavior_on_failure | 子任务发送到分区副本节点后,若节点故障或副本数据校验错误(副本损坏),Job Scheduler(某个 Data Node 的 worker 线程)会发现故障并选择该分区的另一个副本节点重新执行子任务。 | high |
| dfsReplicationFactor 参数 | purpose | 用户可通过设置 dfsReplicationFactor 调整冗余度。 | high |
| DolphinDB | compute_near_storage | DolphinDB 的计算尽量靠近存储,并采取计算与存储耦合架构。 | medium |
| 计算与存储分离(Spark+Hive) | stated_issue_data_redundancy | 应用程序之间不共享存储;N 个 Spark 应用从 Hive 读同一表需要将数据加载到各自内存形成 N 份,导致内存浪费并提高多用户场景 IT 成本。 | medium |
| 数据传输 | stated_issue_copy_latency | 尽管 RDMA、NVMe 提升数据中心网络,但部署环境可能不具备,网络传输会成为性能瓶颈。 | medium |
| 作业之间共享数据(针对内存浪费) | mechanism | 分区存储到 DFS 后,每个分区副本归属特定节点;同一节点上的分区副本在内存中只存在一份;多个 Job 子任务涉及同一分区副本时可共享读取以减少内存浪费。 | high |
| 将计算发送到数据节点(针对拷贝延迟) | mechanism | Job 根据 DFS 分区信息分解为多个子任务并发送到分区所在节点执行;发送计算相当于发送代码,从而减少网络开销。 | high |
| 限时报名链接 | url | https://www.qingsuyun.com/h5/e/217471/5/ | high |