2017-04-08 6 views
2

Frage
Wie pyspark Python Arbeitsprozesse in Bezug auf CPU- und Speichernutzung zu überwachen.

Details
Nach this doc kann ein SPARK-Worker 1 oder mehrere Python-Prozesse enthalten.

Angenommen, wir haben pro Executor 40g Arbeitsspeicher zugewiesen, der auf einem Worker ausgeführt wird, der über bis zu 200g Arbeitsspeicher verfügt. Dann können wir gemäß dieser dokumentierten Einstellung "spark.python.worker.memory" die Menge an verfügbarem Speicher pro Python-Prozess einstellen.

vom spark.python.worker.memory Einstellung Beschreibung zitiert:SPARK: Pyspark: wie Python Arbeiter überwachen Prozesse

Speichermenge pro Python Arbeitsprozess während der Aggregation zu verwenden, in dem gleichen Format wie JVM Speicherketten (z.B. 512M, 2g). Wenn der bei der Aggregation verwendete Speicher diesen Wert überschreitet, werden die Daten auf Festplatten übertragen.

Nehmen wir an, dass wir spark.python.worker.memory auf 2g setzen.

Für mich stellen sich folgende Fragen:

  • Wie können wir wissen, wie viele Prozesse pyspark/Funke auf jeden Arbeiter/Testamentsvollstrecker Laichen?
  • Wie können wir überwachen, wie viel Speicher wir pro Prozess und insgesamt verbrauchen, um zu sehen, wie nahe wir an der "Executor 40g" Grenze sind, die wir festgelegt haben?
  • Wie können wir überwachen, wie viel wir auf Festplatten pro Prozess verschütten?
  • In allgemeinerer Weise, wie können wir optimieren oder pyspark Anwendungen mit spark.python.worker.memory Einstellung. Ist das nur eine Frage von Versuch/Irrtum? Wenn ja, wie kann der Benchmark/Monitor (ähnlich wie oben)



Warum .. gut wir einige Performance-Probleme schlagen, die für unsere Anwendung sehr spezifisch sind. Wir beobachten einige inkonsistente Fehler, die wir nicht reproduzieren können. Daher müssen wir die feineren Details dessen, was bei jeder Anwendung unserer Anwendung passiert, überwachen/verstehen.

Antwort

0

Gemäß dieser dokumentierten Einstellung: "spark.python.worker.memory" können wir die Menge an verfügbarem Speicher pro Python-Prozess festlegen.

Dies ist nicht wahr. Wie in der Dokumentation, die Sie verknüpft haben, erläutert wird, wird diese Einstellung verwendet, um das Aggregationsverhalten zu steuern, nicht den Python-Arbeitsspeicher im Allgemeinen.

Dieser Speicher berücksichtigt die Größe der lokalen Objekte oder Broadcast-Variablen, nur temporäre Strukturen, die für Aggregationen verwendet werden.

Woher wissen wir, wie viele Prozesse pyspark/spark bei jedem Arbeiter/Executor hervorkommt?

Python Worker können bis zu dem durch die Anzahl der verfügbaren Kerne festgelegten Limit generiert werden.Da Arbeiter während der Laufzeit gestartet oder getötet werden können, kann die tatsächliche Anzahl von Arbeitern außerhalb der Spitzenlast kleiner sein. Wie können wir überwachen, wie viel Speicher wir pro Prozess und insgesamt verbrauchen, um zu sehen, wie nah wir an der "Executor 40g" Grenze sind, die wir festgelegt haben?

Es gibt keine Spark spezifische Antwort. Sie können allgemeine Überwachungswerkzeuge oder das Modul resource von der Anwendung selbst verwenden.

Wie können wir überwachen, wie viel wir auf Festplatten pro Prozess verschütten?

Sie können Spark REST API verwenden, um einige Einblicke zu erhalten, aber im Allgemeinen sind PySpark Metriken etwas begrenzt.

Verwandte Themen