2016-03-04 12 views
18

In Pyspark, posso creare un RDD da una lista e decidere quante partizioni di avere:numero di partizioni in RDD e prestazioni in Spark

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

Come funziona il numero di partizioni decido di partizionare il mio RDD influenza la prestazione? E come questo dipende dal numero di core della mia macchina?

+1

Consiglio vivamente questo [collegamento] (http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/). Passare alla sezione "Tuning Parallelism". Diventa piuttosto complicato, ma è certamente approfondito. –

risposta

24

L'effetto primario sarebbe specificando troppo pochi partizioni o lontano troppe partizioni.

Troppe partizioni Non verranno utilizzati tutti i core disponibili nel cluster.

Troppe partizioni Ci sarà un sovraccarico eccessivo nella gestione di molte piccole attività.

Tra i due il primo è di gran lunga più incisivo sulle prestazioni. Pianificare troppe piccole attività è un impatto relativamente piccolo a questo punto per i conteggi delle partizioni inferiori a 1000. Se si dispone dell'ordine di decine di migliaia di partizioni, la scintilla diventa molto lenta.

+1

Infatti. Ho un lavoro particolare che ha esaurito la memoria quando c'erano 2 milioni di grandi oggetti JSON suddivisi in partizioni 25K. Quando coalesce a 320, il lavoro viene eseguito in meno di un minuto. Questo sembra uno dei modi più semplici per migliorare le prestazioni. –

+0

Contro troppe partizioni: più recuperi, più ricerche disco. Il driver deve tracciare lo stato per attività. Fonte: slide 53, https://www.slideshare.net/Hadoop_Summit/why-your-spark-is-failing – ruhong

19

Per aggiungere all'eccellente risposta di javadba, ricordo che i documenti consigliano di impostare il numero di partizioni su 3 o 4 volte il numero di core CPU nel cluster in modo che il lavoro venga distribuito in modo più uniforme tra i core della CPU disponibili. Vale a dire, se hai solo 1 partizione per core CPU nel cluster, dovrai aspettare che venga completata l'attività più lunga, ma se avessi rotto ulteriormente, il carico di lavoro sarebbe stato bilanciato in modo più uniforme con attività di esecuzione rapida e lenta. .

+1

Puoi fornire un riferimento a dove il numero raccomandato di partizioni è descritto nei documenti, per favore? – sversch

+0

@sversch Questo [post di blog hakernoon] (https://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4) potrebbe aiutarti a decidere il numero ottimale di partizioni. –

+0

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

Problemi correlati