2016-04-11 12 views
0

So in Spark, wenn eine Anwendung gestartet wird, dann eine RDD mit dem Dataset für die Anwendung (z. B. Word-Dataset für WordCount) erstellt wird.RDD und Partition in Apache Spark

Bisher, was ich verstehe, ist, dass RDD eine Sammlung jener Worte in Wordcount ist und die Operationen, die (zB Karte, reduceByKey, etc ...) zu jenem Datensatz durchgeführt wurden

jedoch afaik, Funke hat auch HadoopPartition (oder im Allgemeinen: Partition), die von jedem Executor aus HDFS gelesen wird. Und ich glaube, dass ein RDD in Treiber auch alle diese Partitionen enthält.

Also, was wird unter Executoren in Spark aufgeteilt? Erhält jeder Executor diese Unterdatenmenge als eine einzelne RDD, die im Treiber weniger Daten enthält als RDD oder behandelt jeder Executor nur diese Partitionen und liest sie direkt aus HDFS? Wann werden die Partitionen erstellt? Auf der RDD-Erstellung?

Antwort

0

Partitionen sind konfigurierbar, vorausgesetzt die RDD basiert auf Schlüsselwerten.

Es gibt 3 Hauptpartition Eigentum:

  1. Tupeln in der gleichen Partition sind garantiert in der gleichen Maschine.
  2. Jeder Knoten in einem Cluster kann mehr als eine Partition enthalten.
  3. Die Gesamtzahl der Partitionen ist konfigurierbar, standardmäßig wird auf die Gesamtzahl der Kerne auf allen Executor-Knoten festgelegt.

Funken unterstützt zwei Arten der Partitionierung:

  1. Hash-Partitionierung
  2. Bereichspartitionierung

Wenn Funken eine Datei von HDFS liest, erstellt es eine einzelne Partition für einen einzigen Eingang Split . Die Eingabeaufteilung wird durch das Hadoop InputFormat festgelegt, das zum Lesen dieser Datei verwendet wird. Wenn Sie rdd.repartition (x) aufrufen, würde es eine Mischung der Daten von N Partitionen, die Sie in rdd haben, zu x Partitionen durchführen, die Sie haben möchten, die Partitionierung würde auf Round Robin Basis erfolgen.

Bitte sehen Sie mehr Details here und here