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
-
运行job2,耗时4001.389 ms
-
运行job3,耗时9013.098ms
如果是启动单节点服务器,运行时间会是9秒,就是5+4,并没有体现出并行计算的价值。
-
运行job3,耗时5013.098ms
启动集群服务器,运行时间会是5秒,并行计算。(也就是所谓的分布式计算)
-
启动集群服务器
参考《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
-
配置gui
启动集群后,直接启动GUI会报错,因为GUI默认是连接到原来地址端口的server,即localhost:8848。此时需要新增server。
server --> add server添加配置集群时的Host和Port。
-
运行程序
此时应该是5s多一点,就是并行两个任务的长时间那个的时间。
不过这有个前提是需要配置至少3个数据节点,但社区试用版最多只能配置2个,所以没法真实测试,只是得到一个官方理论值。
-
-
submitJob提交批处理作业
submitJob(job_id, jobDesc, function, args...)
参数 意义 备注 job_id 作业地ID 字符串类型 jobDesc 用于描述作业 字符串 function 要发送给远程节点地本地函数 这是函数名,因此不能用单引号、双引号 args 函数地参数 如果函数没有参数,可以不指定 把批处理作业提交到本地节点并且返回作业的ID,重复提交会生成不同的ID;(只是提交过去,并没有实际运行)
如果要把批处理作业提交到远程节点,需要用submitJob中的rpc或remoteRun函数。
-
getJobReturn取得批处理作业返回的对象
getJobReturn(job_id, [blocking=false])
参数 意义 备注 job_id 批处理作业的ID 字符串 blocking 表示是否采用阻塞模式 false:默认,在批处理作业没有完成的情况下,函数会抛出异常。
true:直到批处理作业完成后,函数才会返回值。取得批处理作业返回的对象。
上一篇: 理解DolphinDB流数据处理框架
下一篇: 即时通讯--socketio