2016-03-04 5 views
18

In Pyspark, kann ich eine RDD aus einer Liste erstellen und entscheiden, wie viele Partitionen zu haben:Anzahl der Partitionen in RDD und Leistung in Spark-

sc = SparkContext() 
sc.parallelize(xrange(0, 10), 4) 

Wie funktioniert die Anzahl der Partitionen ich entscheiden, meine RDD zu partitionieren Beeinflusst die Leistung? Und wie hängt das von der Anzahl der Kern meiner Maschine ab?

+1

Ich empfehle diese [link] (http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/). Wechseln Sie zum Abschnitt "Tuning Parallelism". Es wird ziemlich kompliziert, aber es ist sicherlich in der Tiefe. –

Antwort

24

Der primäre Effekt wäre durch zu wenige Partitionen spezifizieren oder weit zu viele Partitionen.

Zu wenige Partitionen Sie werden nicht alle im Cluster verfügbaren Kerne verwenden.

Zu viele Partitionen Der Verwaltungsaufwand für viele kleine Aufgaben ist sehr hoch.

Zwischen den beiden ist die erste viel wirkungsvoller. Die Planung zu vieler kleiner Aufgaben ist an dieser Stelle eine relativ kleine Auswirkung für Partitionszählungen unter 1000. Wenn Sie in der Größenordnung von Zehntausenden von Partitionen sind, erhält function sehr langsam.

+1

In der Tat. Ich habe einen bestimmten Job, der früher nicht genügend Speicher hatte, als 2 Millionen große JSON-Objekte über 25K-Partitionen verteilt waren. Wenn ich auf 320 konvergiere, läuft der Job in weniger als einer Minute. Dies scheint einer der einfachsten Wege zu sein, die Leistung zu verbessern. –

+0

Nachteile von zu vielen Partitionen: Mehr Abrufe, mehr Festplattensuchen. Der Fahrer muss den Status pro Aufgabe verfolgen. Quelle: slide 53, https://www.slideshare.net/Hadoop_Summit/why-your-spark-job-is-failing – ruhong

19

Um die ausgezeichnete Antwort von javadba hinzuzufügen, erinnere ich mich daran, dass die Anzahl der Partitionen auf die drei- bis vierfache Anzahl der CPU-Kerne in Ihrem Cluster festgelegt wurde, damit die Arbeit gleichmäßig auf die verfügbaren CPU-Kerne verteilt wird. Das heißt, wenn Sie nur eine Partition pro CPU-Kern im Cluster haben, müssen Sie auf die Ausführung der am längsten laufenden Aufgabe warten, aber wenn Sie diese weiter reduziert hätten, wäre die Arbeitslast ausgewogener, während sich schnell und langsam ablaufende Aufgaben übertreffen .

+1

Können Sie bitte einen Verweis auf die empfohlene Anzahl von Partitionen in den Dokumenten angeben? – sversch

+0

@sversch Dieser [hakernoon Blogpost] (https://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4) könnte Ihnen bei der Entscheidung über die optimale Anzahl von Partitionen helfen. –

+0

@sversch, https://spark.apache.org/docs/latest/tuning.html –