自動システムを使用して、makeClusterを使用して36台のCPUを搭載したマシン上の35ノードのクラスタを開くRスクリプトを起動します。 (AWS c4.8xlarge日付UbuntuとRまで実行)makeClusterは接続エラー処理戦略を開けませんか?
n.nodes = 35
cl <- makeCluster(n.nodes,
outfile = "debug.txt")
DEBUG.TXTに書き込まれるように、次のエラーは、PIDとポート番号は、セッション特有である
starting worker pid=2017 on localhost:11823 at 21:15:57.390
Error in socketConnection(master, port = port, blocking = TRUE, open = "a+b", :
cannot open the connection
Calls: <Anonymous> ... doTryCatch -> recvData -> makeSOCKmaster -> socketConnection
In addition: Warning message:
In socketConnection(master, port = port, blocking = TRUE, open = "a+b", :
localhost:11823 cannot be opened
Execution halted
やや定期的に表示され。このエラーが発生すると、プログラムは続行できません。
質問1:これが起こったことを認識し、クラスタを再度作成しようとするエラー処理方法がありますか?
注:以下は
attempt=0
while(dim(showConnections())[1] < n.nodes && attempt<=25){ # 25 chancees to create n.nodes connections
print(attempt)
closeAllConnections() # Close any open connections
portnum = round(runif(1,11000,11998)) # Randomly Choose a Port
tryCatch({ # Try to create the cluster
evalWithTimeout({
cl <- makeCluster(n.nodes,
outfile = "debug.txt",
port=portnum)
},timeout = 120) # Give it two minutes and then stop trying
},TimeoutException = function(x) {print(paste("Failed to Create Cluster",portnum))}) # If it fails, print the portnum it tried
attempt=attempt+1 # Update attempt
Sys.sleep(2) # Take a breather
}
質問2は動作しません:を自動的にクラスタを作る再試行する方法がない場合、ポートは試みる前に開くことができるかどうかを確認する方法がありますmakeClusterを実行するには?
注:このシステムは完全自動化/自己完結型でなければなりません。それは、エラーを認識し、問題を処理/修正し、手動による介入なしに処理を進める必要があります。