2017-04-20 82 views
1

如何通過R啓動h2o服務器時增加h2o啓動超時? 我有一個多節點AWS EC2集羣,我在每個節點上啓動一個單獨的h2o服務器。啓動後,一些EC2節點可能會有點慢,我寧願增加超時,而不是在這些節點上重新運行h2o初始化代碼。增加h2o.init超時

什麼我目前做的沿

library(doParallel) 
library(foreach) 

workers=parallel::makePSOCKcluster(workerIPs,master=masterIP) 
registerDoParallel(workers) 

foreach(i=seq_along(workers),.inorder=FALSE,.multicombine=TRUE) %dopar% { 
    library(h2o) 
    h2o.init(nthreads=-1) 
    paste0(capture.output(h2o.clusterStatus()),collapse="\n") 
} 

慢節點的線條將在h2o.clusterStatus()拋出一個錯誤,如果h2o.init(nthreads=-1)產生超時。

順便說一句:我使用h2o v 3.10.4.4,我在Ubuntu 16.04上。

+0

您的目標是運行幾個H2O羣集(每個節點上有一個)?或者多個節點上只有一個H2O集羣?通常我們看到人們在做後者(如此處所述:https://github.com/h2oai/h2o-3/tree/master/ec2),所以我只是好奇。 –

+0

目前,我想每個節點有一個H2O羣集。我自己實現了CV和超參數搜索算法 - 因此,每個節點的一臺h2o服務器目前對我來說最適合。 – cryo111

+0

好吧,明白了。你可以在'h2o.init()'調用之前添加一個'Sys.sleep(10)',以便在啓動工作節點和啓動H2O集羣之間花費一些時間,或者我在這裏丟失了什麼? –

回答

2

所以,我看着在GitHub上h2o源代碼,它似乎並不彷彿有一個timeout參數(無論是在R也不在底層java代碼)。有一個java參數叫做session_timeout,但我不認爲這適用於我的問題。

因此,我所做的是:

foreach(i=seq_along(workers),.inorder=FALSE,.multicombine=TRUE) %dopar% { 
    library(h2o) 
    startCounter=1 
    startCounterMax=3 
    while(inherits(clusterStatus<-try({ 
     h2o.init(nthreads=-1) 
     capture.output(h2o.clusterStatus()) 
    },silent=TRUE),"try-error")&(startCounter<=startCounterMax)) { 
    startCounter=startCounter+1 
    } 
    if (startCounter>startCounterMax) stop("Failed to start h2o server for ", 
             startCounterMax," successive times") 

    return(clusterStatus) 
} 

不怎麼樣,但它的工作。

0

如果你想形成幾個H2O節點的集羣(比如用一臺機器一個節點3個H2O節點羣集)要等待一個指定的時間,然後你可以嘗試在Java代碼 - water.H2O.waitForCloudSize(3, 50 * 1000/*ms*/); 我假設在R中應該有對應的參數。

+0

我沒有看到這個通過'R'界面暴露出來。 – cryo111