pnodeRun

语法

pnodeRun(function, [nodes], [addNodeAlias=true])

参数

function 调用的本地函数(不能使用引号)。它可以是一个没有定义参数的函数,或者是没有参数的封装了初始函数和参数的部分应用。它可以是内置函数或用户自定义函数。

nodes 节点的别名。如果没有指定,系统会调用集群中所有活数据节点/计算节点。

addNodeAlias 是否在结果中加入节点的别名,默认值是true。如果返回的结果已经包含节点的别名,可设置为false。

详情

在集群所有数据节点/计算节点上并行调用本地函数,然后合并结果。

例子

例1. 函数 getChunksMeta 不指定参数。

$ pnodeRun(getChunksMeta,,false);

site

chunkId

path

dfsPath

type

flag

size

version

state

versionList

local8848

bd13090e-7177-01a7-4ac4-840e1b977dcf

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190605/GOOG

/compo/20190605/GOOG

1

0

0

1

0

cid : 40,pt2=>40:6729; #

local8848

b4935730-6372-b2a1-4f24-6c323037e576

e:data/CHUNKS/compo/20190605/AAPL

/compo/20190605/AAPL

1

0

0

1

0

cid : 40,pt2=>40:6613; #

local8848

f8ee72c9-dad3-f49e-430e-5ddb3c61ae18

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190604/MSFT

/compo/20190604/MSFT

1

0

0

1

0

cid : 40,pt2=>40:6664; #

local8848

08e26b5a-dfac-799f-4979-0dd3902eae6e

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190604/GOOG

/compo/20190604/GOOG

1

0

0

1

0

cid : 40,pt2=>40:6635; #

local8848

f9e53a3d-af3e-018d-4bfa-a2b4980f3561

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190604/AAPL

/compo/20190604/AAPL

1

0

0

1

0

cid : 40,pt2=>40:6783; #

local8848

417e49e9-5c61-cf9e-4b21-4b35f8e57273

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190601/MSFT

/compo/20190601/MSFT

1

0

0

1

0

cid : 40,pt2=>40:6602; #

local8848

3ee64942-1d72-bea7-4bc1-f720132d9288

D:130DolphinDB_Win64_Vserverlocal8848storage/CHUNKS/compo/20190602/AAPL

/compo/20190602/AAPL

1

0

0

1

0

cid : 40,pt2=>40:6749; #

例2. 在下例中,函数 sum 和参数1..10被封装成了部分应用 sum{1..10}

$ pnodeRun(sum{1..10}, `nodeA`nodeB);

Node

Value

DFS_NODE2

55

DFS_NODE3

55

例3. pnodeRun 对于集群管理非常方便。例如,在一个集群中有4个节点:”DFS_NODE1”, “DFS_NODE2”, “DFS_NODE3” 和 “DFS_NODE4”。在每个节点上执行以下脚本:

def jobDemo(n){
    s = 0
    for (x in 1 : n) {
        s += sum(sin rand(1.0, 100000000)-0.5)
        print("iteration " + x + " " + s)
    }
    return s
};

submitJob("jobDemo1","job demo", jobDemo, 10);
submitJob("jobDemo2","job demo", jobDemo, 10);
submitJob("jobDemo3","job demo", jobDemo, 10);

查看集群中每个节点最近完成的两个批处理作业的状态:

$ pnodeRun(getRecentJobs{2});

Node

UserID

JobID

JobDesc

ReceivedTime

StartTime

EndTime

ErrorMsg

DFS_NODE1

root

jobDemo2

job demo

2017.11.16T13:04:38.841

2017.11.16T13:04:38.841

2017.11.16T13:04:51.660

DFS_NODE1

root

jobDemo3

job demo

2017.11.16T13:04:38.841

2017.11.16T13:04:38.843

2017.11.16T13:04:51.447

DFS_NODE2

root

jobDemo2

job demo

2017.11.16T13:04:56.431

2017.11.16T13:04:56.432

2017.11.16T13:05:11.992

DFS_NODE2

root

jobDemo3

job demo

2017.11.16T13:04:56.432

2017.11.16T13:04:56.434

2017.11.16T13:05:11.670

DFS_NODE3

root

jobDemo2

job demo

2017.11.16T13:05:08.418

2017.11.16T13:05:08.419

2017.11.16T13:05:29.176

DFS_NODE3

root

jobDemo3

job demo

2017.11.16T13:05:08.419

2017.11.16T13:05:08.421

2017.11.16T13:05:29.435

DFS_NODE4

root

jobDemo2

job demo

2017.11.16T13:05:16.324

2017.11.16T13:05:16.325

2017.11.16T13:05:34.729

DFS_NODE4

root

jobDemo3

job demo

2017.11.16T13:05:16.325

2017.11.16T13:05:16.328

2017.11.16T13:05:34.716

$ pnodeRun(getRecentJobs{2}, `DFS_NODE3`DFS_NODE4);

Node

UserID

JobID

JobDesc

ReceivedTime

StartTime

EndTime

ErrorMsg

DFS_NODE3

root

jobDemo2

job demo

2017.11.16T13:05:08.418

2017.11.16T13:05:08.419

2017.11.16T13:05:29.176

DFS_NODE3

root

jobDemo3

job demo

2017.11.16T13:05:08.419

2017.11.16T13:05:08.421

2017.11.16T13:05:29.435

DFS_NODE4

root

jobDemo2

job demo

2017.11.16T13:05:16.324

2017.11.16T13:05:16.325

2017.11.16T13:05:34.729

DFS_NODE4

root

jobDemo3

job demo

2017.11.16T13:05:16.325

2017.11.16T13:05:16.328

2017.11.16T13:05:34.716

pnodeRun 合并多个节点的结果时遵循以下规则:

(1) 如果 function 返回一个标量:

返回一个表,它具有两列:节点别名和函数结果。

紧接上面的例子:

$ pnodeRun(getJobReturn{`jobDemo1});

Node

Value

DFS_NODE3

2,123.5508

DFS_NODE2

(42,883.5404)

DFS_NODE1

3,337.4107

DFS_NODE4

(2,267.3681)

(2) 如果 function 返回一个向量:

返回一个矩阵。矩阵中的每一列是函数在节点上返回的结果。矩阵的列标签是节点。

(3) 如果 function 返回键-值形式的字典:

返回一个表,每行代表函数在一个节点上的结果。

(4) 如果 function 返回一个表:

返回一个表,它是多个节点上的表的合并。

(5) 如果 function 是一个命令(该命令不返回任何内容):

不返回任何内容。

(6) 对于其他情况:

返回一个字典。键是节点别名,值是函数的返回内容。