并行处理报错:端口无法打开
Error in parallel processing: port cannot be open
我 运行 在一个 linux 集群中同时以批处理模式运行不同的 R 脚本,以估计不同数据集中的模型(当我 运行 它在Mac)。这些脚本完全相同,只是它们使用的数据集不同。当我这样做时,我收到以下消息。
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
cannot open the connection
Calls: makePSOCKcluster -> newPSOCKnode -> socketConnection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
port 11426 cannot be opened
这是一个可重现的例子。创建两个文件,tmp1.R 和 tmp2.R,以及 tmp.sh,内容为:
文件 tmp1.R 和 tmp2.R 的内容:
library(dclone)
l <- list(1:100,1:100,1:100,1:100)
cl <- makePSOCKcluster(4)
parLapply(cl, X=l, fun=function(x) {Sys.sleep(2); sum(x); })
stopCluster(cl)
tmp.sh 文件的内容:
#!/bin/sh
R CMD BATCH tmp1.R &
R CMD BATCH tmp2.R &
将执行列表中的第一个文件。第二个将出现上面的错误。有谁知道如何解决它并且仍然 运行 所有脚本都自动一次自动执行而无需任何手动干预?
PS: 我已经阅读了所有其他类似的问题,none 有一个可重现的例子或上面问题的答案。
您无需启动多个集群即可 运行 多个数据集上的相同代码。只需将正确的数据发送到每个节点即可。
# make 4 distinct datasets
df1 <- mtcars[1:8,]
df2 <- mtcars[9:16,]
df3 <- mtcars[17:24,]
df4 <- mtcars[25:32,]
# make the cluster
cl <- makeCluster(4)
clusterApply(cl, list(df1, df2, df3, df4), function(df) {
# do stuff with df
# each node will use a different subset of data
lm(mpg ~ disp + wt, df)
})
如果您希望数据在每个节点上持久化,以便您可以将其用于后续分析:
clusterApply(cl, list(df1, df2, df3, df4), function(df) {
assign("df", df, globalenv())
NULL
})
这会在每个节点上创建一个 df
数据框,该数据框对于该节点来说是唯一的。
我 运行 在一个 linux 集群中同时以批处理模式运行不同的 R 脚本,以估计不同数据集中的模型(当我 运行 它在Mac)。这些脚本完全相同,只是它们使用的数据集不同。当我这样做时,我收到以下消息。
Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
cannot open the connection
Calls: makePSOCKcluster -> newPSOCKnode -> socketConnection
In addition: Warning message:
In socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, :
port 11426 cannot be opened
这是一个可重现的例子。创建两个文件,tmp1.R 和 tmp2.R,以及 tmp.sh,内容为:
文件 tmp1.R 和 tmp2.R 的内容:
library(dclone)
l <- list(1:100,1:100,1:100,1:100)
cl <- makePSOCKcluster(4)
parLapply(cl, X=l, fun=function(x) {Sys.sleep(2); sum(x); })
stopCluster(cl)
tmp.sh 文件的内容:
#!/bin/sh
R CMD BATCH tmp1.R &
R CMD BATCH tmp2.R &
将执行列表中的第一个文件。第二个将出现上面的错误。有谁知道如何解决它并且仍然 运行 所有脚本都自动一次自动执行而无需任何手动干预?
PS: 我已经阅读了所有其他类似的问题,none 有一个可重现的例子或上面问题的答案。
您无需启动多个集群即可 运行 多个数据集上的相同代码。只需将正确的数据发送到每个节点即可。
# make 4 distinct datasets
df1 <- mtcars[1:8,]
df2 <- mtcars[9:16,]
df3 <- mtcars[17:24,]
df4 <- mtcars[25:32,]
# make the cluster
cl <- makeCluster(4)
clusterApply(cl, list(df1, df2, df3, df4), function(df) {
# do stuff with df
# each node will use a different subset of data
lm(mpg ~ disp + wt, df)
})
如果您希望数据在每个节点上持久化,以便您可以将其用于后续分析:
clusterApply(cl, list(df1, df2, df3, df4), function(df) {
assign("df", df, globalenv())
NULL
})
这会在每个节点上创建一个 df
数据框,该数据框对于该节点来说是唯一的。