理解定时任务(scheduleJob)与批处理作业 in DolphinDB

  • Overview

    关于如何查看两者各自的运行情况,有些许重复,需要理清。

  • 定时任务

  • 物理层面机理

    定时作业用一个函数来表示,通过scheduleJob函数提交,并按设定时间在后台运行。

    作业创建后,作业相关定义信息序列化保存到数据节点的磁盘文件<homeDir>/sysmgmt/jobEditlog.meta

    节点重启后,系统会反序列化并加载定时作业;

    定时作业每次运行的结果会保存到节点磁盘上,通过getJobMessagegetJobReturn查看每个作业的运行日志和返回值;

    homeDir可以通过getHomeDir()查看,此参数是在dolphindb.cfg中配置的。

  • 定时作业的序列化

    持久化信息包括:创建用户、作业ID、描述信息、其实信息、作业频率、作业定义(貌似就是定义时候的函数);

    持久化信息保存路径:<homeDir>/sysmgmt/jobEditlog.meta

    作业是用一个函数来表示,可以调用其他函数、全局对象,比如共享变量(序列化时用名称来表示);反序列化时,共享表对象必须存在,否则会失败;

    作业函数分为两类:

    • 经过编译的函数的序列化
    • 脚本函数的序列化
  • 创建定时任务

    scheduleJob

    返回定时作业的作业ID, 通过getRecentJobs查看最近完成的定时任务,

    执行定时任务生成的信息保存在jobId.msg文件中,通过getJobMessage查看

    如果定时任务会返回值,它会保存在jobId.object文件中,通过getJobReturn查看

    jobId.msgjobId.object保存在*<homeDir>/batchJobs*文件夹中;

    定时任务作业ID:

    scheduleJob返回的作业ID(比如ValueJobId),在当日可以通过getJobmessagegetJobReturn查看,到了次日,也就是后续定时运行时,不再通过ValueJobId这个值来查看,而是要自动生成ValueJobId+日期作为当日的jobId输给getJobMessage(ValueJobId20210412)

    这一点文档中没能很好的说明(20210412),相信后续会改好的。

    getRecentJobs函数返回的jobId是最标准的

  • 查看定时任务

    getScheduleJobs

    查看所有定时任务,返回一个表格其中包含jobId

    但是其jobId不一定准确,参见上节描述,getRecentJob返回的jobID才是正确的;

  • 删除定时任务

    deleteScheduledJob :

    这里删除输入的jobIdgetScheduledJobs返回的jobId

  • 定时作业的权限

    用户创建定时作业时以什么身份登录,执行定时作业时就以这个身份运行;

  • 作业管理

    作业(job)是DolphinDB中最基本的执行单位,可以理解为一段DolphinDB脚本代码在系统中的一次执行;

    根据阻塞与否可分为同步作业和异步作业:

  • 同步作业(交互式作业interactive job)

    同步作业会阻塞当前连接,在当前作业返回之前客户端不能再发送新的作业,包括下列提交方式:

    1. DolphinDB GUI
    2. DolphinDB Console 界面
    3. DolphinDB Terminal
    4. VSCode插件
    5. DolphinDB提供的各个编程语言API接口
    6. Web Notebook

    用户能同时发送的同步作业数量取决于当前节点的最大连接数(maxConnections);

    一个节点能同时执行的同步作业数取决于worker数量(workerNum)和web worker数量(webWorkerNum);

    系统接收同步作业后先进入队列,然后分配给worker或web worker执行;

    getConsoleJobs		// 同步作业查询
    cancelConsoleJob	// 同步作业取消
    
  • 异步作业()

    异步作业是在DolphinDB后台执行的作业,这类任务一般对结果的实时反馈要求较低,且需要长期执行,包括:

    1. submitJobsubmitJobEx提交的批处理作业

      // 批处理作业的创建
      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添加三条信息

    2. scheduleJob提交的定时作业;

    3. 流数据作业;

  • 其他概念

    子任务;worker;executor;作业调度;作业优先级;作业并行度;计算容错;数据与计算均衡;

    DolphinDB不采用计算存储分离,而是计算尽量靠近存储,即计算与存储耦合的架构;

  • References

  1. Tutorials_CN: DolphinDB定时作业
  2. Tutorials_CN: 作业管理
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值