2014-11-28 2 views
38

Ich bin verwirrt über den Umgang mit Executor-Speicher und Treiberspeicher in Spark.Wie mit Executor-Speicher und Treiberspeicher in Spark umzugehen?

sind Meine Umgebungseinstellungen wie folgt:

  • Speicher 128 G, 16 CPU für 9 VM
  • Centos
  • Hadoop 2.5.0-cdh5.2.0
  • Funken 1.1.0

Eingangsdateninformation:

  • 3,5 GB Datendatei von HDFS

Für einfache Entwicklung, ausgeführt ich meinen Python-Code im Standalone-Cluster-Modus (8 Arbeiter, 20 Kerne, 45,3 G-Speicher) mit spark-submit. Jetzt möchte ich Executor-Speicher oder Treiberspeicher für Performance-Tuning festlegen.

Vom Spark documentation, die Definition für Exekutor Speicher

Speichermenge pro Exekutor Verfahren zu verwenden, in dem gleichen Format wie JVM Speicherketten (z.B. 512M, 2g).

Wie wäre es mit Treiberspeicher?

Antwort

70

Der Arbeitsspeicher, den Sie dem Treiber zuweisen müssen, hängt vom Job ab.

Wenn der Job basiert rein auf Transformationen und endet auf einiger verteilten Ausgangsaktion wie rdd.saveAsTextFile, rdd.saveToCassandra, ... dann wird der Speicherbedarf des Fahrers sehr gering sein. Ein paar 100 MB werden ausreichen. Der Treiber ist auch für die Bereitstellung von Dateien und das Sammeln von Messdaten verantwortlich, ist jedoch nicht an der Datenverarbeitung beteiligt.

Wenn der Job erfordert, dass der Fahrer an der Berechnung beteiligt ist, wie z. Einige ML Algo, die Ergebnisse materialisieren und in der nächsten Iteration ausstrahlen müssen, dann hängt Ihre Arbeit von der Menge der Daten ab, die den Treiber passieren. Operationen wie .collect, .take und takeSample liefern Daten an den Treiber und daher benötigt der Treiber genügend Speicher, um solche Daten zuzuweisen.

z.B. Wenn Sie einen rdd von 3 GB im Cluster haben und val myresultArray = rdd.collect anrufen, benötigen Sie 3 GB Speicher im Treiber, um diese Daten zu speichern, sowie zusätzlichen Platz für die im ersten Absatz erwähnten Funktionen.

4

In einer Spark-Anwendung ist der Treiber für die Aufgabenplanung verantwortlich und der Executor ist für die Ausführung der konkreten Aufgaben in Ihrem Job verantwortlich.

Wenn Sie mit MapReduce vertraut sind, Ihre Karte Aufgaben & reduzieren Aufgaben alle in Executor ausgeführt werden (in Spark, werden sie ShuffleMapTasks & ResultTasks genannt), und auch, was RDD Sie Cache wollen, ist auch in Testamentsvollstreckers JVM Heap & Scheibe.

Also ich denke, ein paar GBs werden nur für Ihren Treiber OK sein.