欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DolphinDB使用案例9:批处理依赖

程序员文章站 2022-03-21 09:01:23
...
  • 批处理

    批处理作业的结果有可能取决于其他批处理作业的结果。

    DolphinDB会根据批处理作业脚本来判断作业之间的依赖关系,所以不需要显示地使用作业ID来指定依赖关系。

  • 批处理案例

  • 构建函数
    def job1(x){
    	sleep(5000)
    return x.sum()
    }
    
    def job2(y){
    	sleep(4000)
    	return y.sum()
    }
    def job3(x,y){
    	job1ld = submitJob("job1", "", job1{x})
    	job2ld = submitJob("job2", "", job2{y})
    	job1result = getJobReturn(job1ld, true)
    	job2result = getJobReturn(job2ld, true)
    	return job1result + job2result
    }
    x = [1,2,3]
    y = [1,2,3,4]
    
  • 运行job1,耗时5000.697ms

    DolphinDB使用案例9:批处理依赖

  • 运行job2,耗时4001.389 ms

    DolphinDB使用案例9:批处理依赖

  • 运行job3,耗时9013.098ms

    DolphinDB使用案例9:批处理依赖

    如果是启动单节点服务器,运行时间会是9秒,就是5+4,并没有体现出并行计算的价值。

  • 运行job3,耗时5013.098ms

    启动集群服务器,运行时间会是5秒,并行计算。(也就是所谓的分布式计算)

    1. 启动集群服务器

      参考《DolphinDB 单物理节点集群部署》,如果已经部署好,只需要在server文件夹下运行下述命令:

      # 启动代理节点
      dolphindb.exe -mode agent -home data -config config/agent.cfg -logFile log/agent.log
      # 启动控制节点
      dolphindb.exe -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes
      
    2. 配置gui

      启动集群后,直接启动GUI会报错,因为GUI默认是连接到原来地址端口的server,即localhost:8848。此时需要新增server。

      server --> add server添加配置集群时的Host和Port。

    3. 运行程序

      此时应该是5s多一点,就是并行两个任务的长时间那个的时间。

      不过这有个前提是需要配置至少3个数据节点,但社区试用版最多只能配置2个,所以没法真实测试,只是得到一个官方理论值。

  • submitJob提交批处理作业

    submitJob(job_id, jobDesc, function, args...)
    
    参数 意义 备注
    job_id 作业地ID 字符串类型
    jobDesc 用于描述作业 字符串
    function 要发送给远程节点地本地函数 这是函数名,因此不能用单引号、双引号
    args 函数地参数 如果函数没有参数,可以不指定

    把批处理作业提交到本地节点并且返回作业的ID,重复提交会生成不同的ID;(只是提交过去,并没有实际运行)

    DolphinDB使用案例9:批处理依赖

    如果要把批处理作业提交到远程节点,需要用submitJob中的rpcremoteRun函数。

  • getJobReturn取得批处理作业返回的对象

    getJobReturn(job_id, [blocking=false])
    
    参数 意义 备注
    job_id 批处理作业的ID 字符串
    blocking 表示是否采用阻塞模式 false:默认,在批处理作业没有完成的情况下,函数会抛出异常。
    true:直到批处理作业完成后,函数才会返回值。

    取得批处理作业返回的对象。