2016-05-17 8 views

Antwort

1

Wenn Sie genaue Messungen benötigen - können Sie btrace verwenden, fügen Sie es als Java-Agent zu Ihren Aufgaben über mapreduce.{map,reduce}.java.opts hinzu - und schreiben Sie dann ein Skript, das misst, was Sie wollen. Ein Beispiel für btrace-Skripte ist here.

Auch gibt es HTrace - die auch hilfreich sein könnten.

+0

Ich habe HTrace funktioniert, hast du es benutzt? Ich frage mich, wie ich die Informationen abgrenzen kann, die ich brauche. – AlexandruC

1

Eine grobe Schätzung könnte benutzerdefinierte Zähler werden zu schaffen. Sowohl für den Mapper als auch für den Reducer können Sie den Zeitstempel sammeln, wenn der Mapper (oder Reducer) mit der Verarbeitung beginnt und wenn er endet. Von Start-und Zeitstempel endet, berechnen und fügen Sie benutzerdefinierte Zähler, fügen d.h Mapper zu MAPPER_RUNNING_TIME und Reduzierungen in den REDUCER_RUNNING_TIME (oder einen beliebigen Namen möchten Sie es geben). Wenn die Ausführung abgeschlossen ist, subtrahieren Sie den aggregierten Wert Ihrer Zähler von MILLIS_MAPS bzw. MILLIS_REDUCES. Sie könnten in Hadoop-Quellcode suchen müssen jedoch bestätigen, wenn die Inszenierung Zeit ist oder nicht in MILLIS_MAPS und MILLIS_REDUCES enthalten wird. Bei dieser Schätzung müssen Sie berücksichtigen, dass die Tasks gleichzeitig ausgeführt werden, sodass die Zeit eher insgesamt ist (oder für alle Mapper und Reducer aggregiert).

Ich habe nicht persönlich getan, aber ich denke, diese Lösung könnte funktionieren, wenn Sie besser finden.

+0

Ihre vorgeschlagene Lösung klingt gut. Ich habe festgestellt, dass MILLIS_MAPS = Gesamtzeit für alle Karten (ms). Ich frage mich, ob dies auch Warteschlangen Wartezeit beinhaltet. Was würde diese Inszenierung bedeuten? – AlexandruC

+0

@AlexandruC. Leider kann ich Ihnen nicht weiterhelfen, denn ich müsste den Quellcode durchgehen und suchen, wie er berechnet wird, was sehr zeitaufwendig sein kann. – Serhiy

+0

Sie müssen das nicht tun. Ich werde es tun. – AlexandruC

Verwandte Themen