2017-04-20 3 views
1

Wie kann ich die h2o Startup Timeout beim Starten eines H2O-Servers über R erhöhen? Ich habe einen multinode AWS EC2 Cluster, wo ich einen separaten h2o Server auf jedem Knoten starte. Nach dem Start können einige EC2-Knoten ein wenig langsam sein und ich würde lieber das Zeitlimit erhöhen, als den h2o Initialisierungscode auf diesen Knoten erneut auszuführen.Erhöhen h2o.init timeout

Was ich derzeit tue, ist entlang der Linien von

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") 
} 

Langsam Knoten einen Fehler bei h2o.clusterStatus() werfen, wenn h2o.init(nthreads=-1) ein Timeout erzeugt.

BTW: Ich verwende h2o v 3.10.4.4 und ich bin auf Ubuntu 16.04.

+0

Ist es Ihr Ziel, mehrere H2O-Cluster laufen zu lassen (einen auf jedem Knoten)? Oder nur ein einzelner H2O-Cluster über mehrere Knoten hinweg? Normalerweise sehen wir Leute, die Letzteres tun (wie hier beschrieben: https://github.com/h2oai/h2o-3/tree/master/ec2), also bin ich nur neugierig. –

+0

Momentan hätte ich gerne einen H2O-Cluster pro Knoten. Ich habe den CV- und Hyper-Parameter-Suchalgorithmus selbst implementiert - so dass ein h2o-Server pro Knoten im Moment für mich am besten funktioniert. – cryo111

+0

Ok, verstanden. Könnten Sie einfach einen 'Sys.sleep (10)' vor Ihrem 'h2o.init()' Aufruf hinzufügen, um zwischen dem Start des Worker Node und dem Start des H2O Clusters etwas Zeit zu investieren, oder fehle ich hier etwas? –

Antwort

2

Also schaute ich auf den h2o Quellcode auf Github und es scheint nicht, als ob es eine ist timeout Argument (weder in R noch in dem zugrunde liegenden java Code). Es gibt ein java Argument namens session_timeout, aber ich denke nicht, dass dies für mein Problem gilt.

Also, was ich tat, ist dies:

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) 
} 

nicht sehr schön, aber es macht den Job.

0

Wenn Sie versuchen, einen Cluster von mehreren H2O Knoten zu bilden (zB Cluster von 3 H 2 O-Knoten mit einem Knoten pro Maschine), und Sie für eine bestimmte Zeit warten möchten, dann können Sie es in Java-Code versuchen - water.H2O.waitForCloudSize(3, 50 * 1000/*ms*/); I Angenommen, in R sollte auch der entsprechende Parameter verfügbar sein.

+0

Ich habe dies über die 'R'-Schnittstelle nicht sichtbar gemacht. – cryo111

Verwandte Themen