-
Overview
关于如何查看两者各自的运行情况,有些许重复,需要理清。
-
定时任务
-
物理层面机理
定时作业用一个函数来表示,通过
scheduleJob
函数提交,并按设定时间在后台运行。作业创建后,作业相关定义信息序列化保存到数据节点的磁盘文件
<homeDir>/sysmgmt/jobEditlog.meta
;节点重启后,系统会反序列化并加载定时作业;
定时作业每次运行的结果会保存到节点磁盘上,通过
getJobMessage
和getJobReturn
查看每个作业的运行日志和返回值;homeDir可以通过
getHomeDir()
查看,此参数是在dolphindb.cfg中配置的。 -
定时作业的序列化
持久化信息包括:创建用户、作业ID、描述信息、其实信息、作业频率、作业定义(貌似就是定义时候的函数);
持久化信息保存路径:
<homeDir>/sysmgmt/jobEditlog.meta
作业是用一个函数来表示,可以调用其他函数、全局对象,比如共享变量(序列化时用名称来表示);反序列化时,共享表对象必须存在,否则会失败;
作业函数分为两类:
- 经过编译的函数的序列化
- 脚本函数的序列化
-
创建定时任务
scheduleJob
:返回定时作业的作业ID, 通过
getRecentJobs
查看最近完成的定时任务,执行定时任务生成的信息保存在jobId.msg文件中,通过
getJobMessage
查看如果定时任务会返回值,它会保存在jobId.object文件中,通过
getJobReturn
查看jobId.msg和jobId.object保存在*
<homeDir>/batchJobs
*文件夹中;定时任务作业ID:
scheduleJob
返回的作业ID(比如ValueJobId
),在当日可以通过getJobmessage或getJobReturn查看,到了次日,也就是后续定时运行时,不再通过ValueJobId这个值来查看,而是要自动生成ValueJobId+日期
作为当日的jobId输给getJobMessage(ValueJobId20210412)
这一点文档中没能很好的说明(20210412),相信后续会改好的。
getRecentJobs
函数返回的jobId是最标准的 -
查看定时任务
getScheduleJobs
:查看所有定时任务,返回一个表格其中包含jobId,
但是其jobId不一定准确,参见上节描述,
getRecentJob
返回的jobID才是正确的; -
删除定时任务
deleteScheduledJob
:这里删除输入的jobId是
getScheduledJobs
返回的jobId -
定时作业的权限
用户创建定时作业时以什么身份登录,执行定时作业时就以这个身份运行;
-
作业管理
作业(job)是DolphinDB中最基本的执行单位,可以理解为一段DolphinDB脚本代码在系统中的一次执行;
根据阻塞与否可分为同步作业和异步作业:
-
同步作业(交互式作业interactive job)
同步作业会阻塞当前连接,在当前作业返回之前客户端不能再发送新的作业,包括下列提交方式:
- DolphinDB GUI
- DolphinDB Console 界面
- DolphinDB Terminal
- VSCode插件
- DolphinDB提供的各个编程语言API接口
- Web Notebook
用户能同时发送的同步作业数量取决于当前节点的最大连接数(maxConnections);
一个节点能同时执行的同步作业数取决于worker数量(workerNum)和web worker数量(webWorkerNum);
系统接收同步作业后先进入队列,然后分配给worker或web worker执行;
getConsoleJobs // 同步作业查询 cancelConsoleJob // 同步作业取消
-
异步作业()
异步作业是在DolphinDB后台执行的作业,这类任务一般对结果的实时反馈要求较低,且需要长期执行,包括:
-
submitJob
或submitJobEx
提交的批处理作业;// 批处理作业的创建 submitJob() submitJobEx() // 可以指定作业的priority, parallelism // 批处理作业的查询 getRecentJobs() // 查询多个作业状态信息 getJobStatus() // 查询一个特定的作业状态信息 // 批处理作业产生job_id.msg, job_id.obj分别储存中间消息和返回对象 getJobMessage() // 查看批处理作业的中间消息 getJobReturn() // 查看批处理作业到返回对象 // 批处理作业的取消 cancelJob() // 取消并非立即生效
批处理作业工作线程数上限由maxBatchJobWorker设置;
批处理作业工作线程在闲置超过60s会自动销毁;
如果
getRecentJobs
返回结果中startTime为空,表示作业在排队等待执行;---------------------------------------------endTime为空,表示作业还在执行中;
批处理作业的输出结果保存在磁盘上batchJobDir(默认是
<homeDir>/batchJobs
);每个批处理作业产生两个文件:
job_id.msg
&job_id.obj
;当系统接收、开始、完成批处理作业时,每个批处理作业会向
/batchJob.log
添加三条信息 -
scheduleJob
提交的定时作业; -
流数据作业;
-
-
其他概念
子任务;worker;executor;作业调度;作业优先级;作业并行度;计算容错;数据与计算均衡;
DolphinDB不采用计算存储分离,而是计算尽量靠近存储,即计算与存储耦合的架构;
-
References
- Tutorials_CN: DolphinDB定时作业
- Tutorials_CN: 作业管理
更多推荐
理解定时任务(scheduleJob)与批处理作业 in DolphinDB
发布评论