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.