2016-04-21 7 views
1

Ich versuche ein Java-Programm zu starten, das WEKA libraries auf einem cluster verwendet.Wie speichere ich den Status eines Java-Programms und hole es später auf?

Dieser Cluster gibt nach 12 Stunden übermittelte Jobs aus, und ich kann diese Tatsache nicht ändern, da ich Student bin und nicht für den Cluster verantwortlich bin.

Ich möchte den Status meiner JVM speichern und neu laden. Grundsätzlich schließen Sie das Programm für eine gewisse Zeit und nehmen Sie dort weiter, wo ich aufgehört habe.

Ist das möglich?

Ich glaube nicht, dass ich den Status der Variablen in den WEKA-Objekten selbst in eine Datei mit OOS (einfach) ausgeben und neu laden kann, weil ich die WEKA-Bibliotheken verwende, und das wäre extrem kompliziert um den Code für diese maschinellen Lernprogramme neu zu schreiben. (obwohl das vielleicht das ist, was ich tun muss)

Ich habe versucht, eine Bibliothek namens javaflow zu verwenden, die ich vom Lesen dachte, könnte dies erreichen, aber ich kann es nicht zum Laufen bringen. Sie versuchen, wann seine Zählung Beispiel zu tun, bin ich mit diesem Fehler erfüllt:

Apr 20, 2016 9:15:12 PM org.apache.commons.javaflow.bytecode.StackRecorder execute 
SEVERE: stack corruption. Is class test_javaflow.MyRunnable instrumented for javaflow? 
java.lang.IllegalStateException: stack corruption. Is class test_javaflow.MyRunnable instrumented for javaflow? 
    at org.apache.commons.javaflow.bytecode.StackRecorder.execute(StackRecorder.java:102) 
    at org.apache.commons.javaflow.Continuation.continueWith(Continuation.java:170) 
    at org.apache.commons.javaflow.Continuation.startWith(Continuation.java:129) 
    at org.apache.commons.javaflow.Continuation.startWith(Continuation.java:102) 
    at test_javaflow.Test_Javaflow.main(Test_Javaflow.java:16) 

googeln diesen Fehler kommen mit ein paar Seiten, um etwas im Zusammenhang genannt Jaspersoft, die ich ziemlich sicher bin, ist nicht das, was ich suche zum.

+0

Haben Sie versucht, die JVM auf einer virtuellen Maschine auszuführen? Als Virtualisierungswerkzeuge wie Vmware und VirtualBox bieten Sie eine Lösung, um den Zustand der gesamten Maschine zu speichern. Sie können den Computer ausführen und den Status speichern, dann laden Sie ihn ein paar Tage später so wie er ist. – 11thdimension

+0

Vielleicht dupliziert mit http://stackoverflow.com/questions/611134/can-the-jvm-provide-snapshot-persistence. –

+0

Ich habe es noch nicht versucht, es auf einer virtuellen Maschine auszuführen. Ich nehme an, das ist möglich. Ich muss den Verantwortlichen des Clusters fragen. –

Antwort

0

Schauen Sie sich den Checkpoint-Befehl von docker an. Es bietet die Möglichkeit, den aktuellen Status eines Andockcontainers zu speichern und anschließend fortzusetzen. Ich benutze es für eine ähnliche Verwendung - ein JVM-basiertes System. In meinem Fall benutze ich es, weil die Initialisierung sehr lange dauert. Mit einem Checkpoint kann ich den Container mehrmals in einem bekannten Zustand neu starten.

Verwandte Themen