2017-01-21 4 views
0

Wir haben laufen Funken Jobs auf Dataproc Cluster mit Garn - wir haben auch ein Wrapper-Programm in Python, die für den Status des Auftrags Konstante Polling tut und wir überwachen den Auftragsstatus aus Garnen - wie folgt dargestellt:Garnstatus vom Dataproc-Client - warum ist es immer ein Listenobjekt?

dataproc = discovery.build('dataproc', 'v1', credentials=credentials) 
job_id = '8873a82c-6201-48d4-8ad3-d8f236ef9c49' 
projectId='dev-111111' 
REGION = 'global' 

result = dataproc.projects().regions().jobs().get(projectId=projectId,region=REGION,jobId=job_id).execute() 

print result['yarnApplications'][0]['state'] 

here

Das obige "Ergebnis" ist ein JSON-Objekt und innerhalb des JSON-Objekts gibt es ein Feld namens "yarnApplications", das ein Listenobjekt ist, dessen erstes und einziges Element den Jobstatus enthält wir sind interessiert an.

Frage i s - warum dieses "yarnApplications" -Objekt immer ein Listenobjekt ist, auch wenn nur ein Garnauftrag läuft? Wir haben Situationen gesehen, in denen Garn mehrere Versuche unternimmt, einen Job zu starten - wird das Feld "yarnApplications" in dieser Situation mehrere Elemente enthalten?

Auch ist es, dass garantiert - wenn wir nur einen Job läuft auf Garn haben „yarnApplications“ Liste Objekt nur ein Element enthalten?

Wir verstehen, dass dies nur eine Beta-Version für Dataproc Client ist - aber als wir Produktionssystem läuft auf sie haben würde jede Eingabe und Vorschläge so zu schätzen wissen.

Dank

Antwort

1

Per der Dataproc API job definition enthalten Arbeitsplätze eine „Sammlung“ von YarnApplications, und diese Definition im Allgemeinen kann es Art auf den Runtime-Inhalte auf Basis nicht ändern. Zum Beispiel die Java-Schnittstelle für Job.getYarnApplications()returns a java.util.List, unabhängig davon, ob die Liste nur ein Element oder null oder viele hat.

Diese API-Definition wurde entwickelt, um verschiedene Auftragsarten aufnehmen, die mehrere Garnanwendungen pro Auftrag einreichen, so hat Hive oder Schwein. In einigen Fällen senden Hadoop-JAR-Dateien auch mehrere Jobs, beispielsweise wenn das Treiberprogramm ein Apache Crunch-Programm ist oder Sie Gridmix ausführen.

Sie sind in der Tat garantiert, dass, wenn Sie nur einen Job in GARN ausgeführt haben, dann ist das Listenobjekt ein Element nur enthalten wird; Die YARN-Anwendungen in der Liste sind nur diejenigen, die durch den gegebenen Jobaufruf erzeugt wurden. Selbst wenn Sie mehrere Dataproc-Jobs zur gleichen Zeit ausführen, während jeweils mehrere gleichzeitige YARN-Anwendungen gesendet werden, enthält jeder Job nur die bestimmte (n) YARN-Anwendung (en), die der Job selbst gesendet hat.

+0

Vielen Dank Dennis, ich freue mich über Ihren Kommentar. du Eine Frage - Sie erwähnt, dass „Sie sind in der Tat garantiert, dass, wenn Sie nur einen Job in GARN läuft ...“ - ist dies aus Dokumentation irgendwo oder Ihre Beobachtungen? Wenn es aus einer Dokumentation stammt, können Sie es bitte teilen? Danke noch einmal! –

+0

In der Situation, die Sie beschrieben haben, wo "Garn mehrere Versuche macht", in YARN, die unter einer einzigen YARN-Anwendungs-ID bleibt, und die mehreren Versuche sind darin aufgeführt; "yarn applications -list -appStates ALL" würde immer nur die eine Anwendungs-ID für alle Versuche zurückgeben. Dataproc verspricht also nichts Besonderes, wenn nur eine einzige YARN-Anwendung auftaucht, wenn nur eine Anwendung läuft. Stattdessen verfolgt Dataproc YARN-Anwendungen mithilfe von Jobid-Tags. Wenn das Treiberprogramm selbst erneut versucht, YARN-Anwendungen auszugeben, zeigt Dataproc tatsächlich mehrere Apps in einem Job an. –

+0

Die Dokumentation für jetzt befindet sich nur innerhalb der [Jobressourcendefinition] (https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.jobs#resource-job), tut dies aber nicht vertiefen Sie, wie sich Wiederholungsversuche auf die Anzahl der YARN-Anwendungen auswirken, die im Job aufgeführt sind. Dieses Verhalten kann sich bei verschiedenen Engines unterscheiden.Am Ende wird Dataprocs Liste von YARN-Anwendungen ähnliche Inhalte enthalten wie die Ausführung von "yarn application -list" im Cluster, aber gefiltert nach der jobid, die die Anwendung (en) hervorgebracht hat. –

Verwandte Themen