2016-07-11 20 views
-2

Ich habe gerade einen 7-Knoten-Funke-Cluster mit jedem Arbeiter mit 8 GB Speicher und 4 Kernen erstellt. Es ist kein riesiger Cluster, aber scheitert mit "GC Overhead Limit überschritten" für nur 10 GB Daten für eine einfache terasort.Bietet Databricks empfohlene Spark-Parameter für einen bestimmten Cluster und Datensatz?

Ich möchte wissen, wie ich diese grundlegenden Parameter für ein Funke-Cluster entscheide, so dass der Job nicht fehlschlägt, wenn die Datengröße wächst.

  1. num von Exekutoren
  2. num von Partitionen
  3. Parallelität
  4. Testamentsvollstrecker Kerne
  5. Testamentsvollstrecker Speicher

ich nichts dagegen, Job langsam laufen, wenn nicht richtig konfiguriert sondern verarbeitet sterben wegen des Mangels an Speicher ist eine große rote Fahne.

Antwort

0

Einige Informationen wie Spark-Version, Eingabeformat (Text, Parkett, Ork), Komprimierung usw. würde sicherlich helfen.

Aber kurz gesagt, das Folgende ist in der Regel die Daumenregel.

  1. num-Executors - Dies ist die Gesamtzahl der Executoren, die Ihr gesamter Cluster für diesen Job bereitstellt. Executor kann eine oder mehrere Aufgaben enthalten. Man würde denken, dass ein Knoten = ein Executor ist. Es ist besser, mehr als einen Executor pro Knoten zu haben. Mehr dazu später in der Antwort.
  2. Executor-Cores - Dies ist die Gesamtzahl der Kerne (Tasks) pro Executor. In Ihrem Fall ist der Startpunkt 4 Kern pro Executor (d. H. Pro Knoten).
  3. Executor-Speicher - Gesamtspeicher pro Executor. Dies wird von allen Aufgaben oder Kernen im Executor gemeinsam genutzt.

Wahrscheinlich Konfiguration (aber weniger wirksam) num-Vollstrecker = 7, Exekutor-Kern = 4, Exekutor-memory = 8g In diesem Fall wird ein Exekutor von 4 Aufgaben geteilt. Wenn einer von ihnen fehlschlägt, wird der gesamte Executor als fehlgeschlagen markiert.

bessere Konfiguration num-Vollstrecker = 14 (2 pro Knoten), Exekutor-Kern = 2 (2 pro Exekutor), Exekutor-memory = 3g (3 g pro Vollstrecker, 2g zum Rest der Prozesse zu verlassen)

Bitte beachten Sie, dass 1 Kern pro Executor auch nicht gut ist, da die Executor-Startzeit in diesem Fall zu viel ist.

In diesem Fall teilen Sie die Ressourcen auf, um zu vermeiden, dass der gesamte Executor beendet wird.

Parallelität Dies hängt vom Format Ihrer Eingabedaten ab.