2012-04-12 6 views
0

Früher habe ich meine Hadoop Job mit folgendemMeasure Hadoop Job Zeit mit Jobcontrol

long start = new Date().getTime(); 
boolean status = job.waitForCompletion(true);    
long end = new Date().getTime(); 

Auf diese Weise starten ich die Zeit von der Arbeit genommen messen konnte, wenn es direkt in meinem Code endet.

Jetzt muss ich die Jobcontrol verwenden, um Abhängigkeiten zwischen meinen Jobs ausdrücken:

JobControl jobControl = new JobControl("MyJob"); 
jobControl.addJob(job1); 
jobControl.addJob(job2); 
job3.addDependingJob(job2); 
jobControl.addJob(job3); 

jobControl.run(); 

jedoch einmal jobControl.run() ausgeführt worden ist, nie der Code weiter geht, so kann ich keinen Code enthalten abfragen auf der jobControl.getState() für den Abschluss des Auftrags.

Wie kann ich die Zeit messen, die ein Auftrag mit JobControl benötigt?

Antwort

1

JobControl hat keine nützliche Funktion, mit der Sie diese Informationen abrufen und abrufen können. Sie haben einige (möglicherweise schmerzhaft) Optionen, um zu versuchen:

  • starten JobControl.run() in einem separaten Thread, und in der Haupt-Thread, abfragen, die JobControl.getXXXJobs() Methoden zu verfolgen, wenn Arbeitsplätze Zustand
  • Aussehen in den Job End Notification URL hook verwenden, aber Dazu müssen Sie einen 'Server' in Ihrem Client starten, um die Benachrichtigungsereignisse zu erhalten, und dann versuchen, vom Ende des Auftrags abzuarbeiten.
  • Erweitern Sie die Objekte JobControl und jobcontrol.Job, um zu verfolgen, wenn ein Job den Status ändert und Methoden hinzufügt Abfrage der Start-/Endzeiten