callx(spl,...;hs ;rspl)

阅读(594) 标签: 分机计算, 网格文件, reduce,

描述:

向分机序列分配执行脚本的作业,返回每个作业的返回值构成的序列。

语法:

callx(spl,…;hs; rspl)

备注:

向分机序列hs分配作业执行spl脚本文件,继承任务空间;返回每个作业的返回值构成的序列。

作业异常结束时自动重新分配(跳过已分配的分机),若无可分配分机则任务失败。默认按顺序分配(第 i 个作业分配至 hs.m@r (i)),所有分机达到最大作业数时暂停分配,待有分机释放资源后继续,直至全部分配完成。

该函数仅适用于企业版。

参数:

spl

.dfx/.splx格式的脚本文件,可使用绝对路径或相对路径。

相对路径为工具 - 选项 - 环境菜单下的寻址路径,第三方应用程序中集成使用时,寻址路径为raqsoftConfig.xml文件中配置的splPath节点值。

传递给.dfx/.splx的参数值。该参数格式一般为序列,需要给.dfx/.splx传递几个参数,则有几个序列成员。

在并行计算时,将按照该参数的序列长度将计算任务拆分为多个子任务,将序列的每一个成员,作为.dfx/.splx的参数值传递到各自的子任务中。

hs

服务器序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"

hsIP省略表示当前物理机上的其他进程,IP和端口同时省略即":"表示当前进程。

rspl

rspl是含有两个参数的splx脚本文件,用于指定 reduce 动作脚本 rspl可省略。

两个参数分别表示当前累积值和当前返回值,rspl返回值将作为新的累积值,初始累积值为null

该参数的作用是,通过在rspl脚本文件中自定义逻辑,将各分机执行的多个子任务返回值合并成序列,序列成员根据hs排序。

选项:

@a

随机分配。

@l

只有一个作业也分配给所有可用分机,任意一个计算完成,则中断其它任务。

示例:

test.splx为分机部署文件,分机序列为["192.168.31.165:8281","192.168.31.39:8281"]

(一)  单个参数

test.splx文件内容如下:

 

A

1

=connect("demo").query("select * from SCORES  where SUBJECT=?",arg1)

2

return A1, A1.(SCORE)

reduce.splx文件内容如下:

  

A

 

1

=a|b

ab 分别为reduce.splx中的参数,a表示当前累计值(初始值为 null),b表示当前返回值(即当前分机执行脚本后返回的结果),通过“|”将当前分机中的返回值拼接起来,当前分机中所有子任务都处理完毕后,将所有子任务的的返回值合并成序列返回。

  

  

A

 

1

=["192.168.31.165:8281","192.168.31.39:8281"]

分机序列。

2

=callx("test.splx",["English","Math","PE"];A1)

按次序分配作业,返回每个作业的返回值构成的序列:

3

=callx("test.splx",["English","Math","PE"];A1;"reduce.splx")

按次序分配作业,执行reduce动作,返回每个分机的返回值构成的序列:

4

=callx@a("test.splx",["English","Math","PE"];A1;"reduce.splx")

使用@a选项,随机分配作业:

5

=callx@1("test.splx",["English","Math","PE"];A1)

使用@1选项,任何一个作业完成,中断其他任务:

6

=callx("test.splx",["English","Math","PE"];":8281")

在本机的8281端口中执行脚本。

7

=callx("test.splx",["English","Math","PE"];":")

在当前进程中执行脚本。

(二)多个参数

reduce.splx同上,test.splx文件内容如下:

 

A

1

=connect("demo")

2

=A1.query("select * from EMPLOYEE where EID in (?) and GENDER=?",arg1,arg2)

3

=A1.close()

4

return A2

 

 

A

 

1

=["192.168.31.165:8281","192.168.31.39:8281"]

分机序列。

2

=callx("test.splx",[1,20,6,14,5],"F";["192.168.31.165:8281"])

向一台分机传递两个参数,其中参数[6,F]查询数据为空:

3

=callx("test.splx",[1,20,6,14,5],"F";A1;"reduce.splx")

向多台分机传递两个参数,依次分配作业,即[1,F][6,F][5,F]分配给分机"192.168.31.165:8281"[20,F][14,F]分配给分机"192.168.31.39:8281"

4

=callx("test.splx",[[1,20,6,14,5],[22,33,44]],"F";A1)

向多台分机传递多个参数,当接收的同一参数值相同时可用单值形式传递,即[ [1,20,6,14,5],F ] 传递给分机"192.168.31.165:8281"[[22,33,44],F]传递给分机"192.168.31.39:8281"

5

=callx("test.splx",[[1,20,6,14,5],[22,33,44]],["F","M"];A1)

多个节点机接收到的同一参数值不同时以序列形式传递,即[ [1,20,6,14,5],F ] 传递给分机"192.168.31.165:8281"[[22,33,44],M]传递给分机"192.168.31.39:8281"