Demistificazione del partizionamento in Spark



Questo blog ti dice tutto ciò che devi sapere sul partizionamento in Spark, sui tipi di partizione e su come migliora la velocità di esecuzione per le trasformazioni basate su chiavi.

Contributo di Prithviraj Bose

Spark's Dataset distribuiti resilienti (l'astrazione di programmazione) vengono valutate pigramente e le trasformazioni vengono memorizzate come grafi aciclici diretti (DAG). Quindi ogni azione sull'RDD farà sì che Spark ricalcoli il DAG. Questo è il modo in cui si ottiene la resilienza in Spark perché se un nodo di lavoro non riesce, il DAG deve solo essere ricalcolato.





È anche obbligatorio da memorizzare nella cache (persistere con un livello di archiviazione appropriato) l'RDD in modo tale che le azioni frequenti sull'RDD non costringano Spark a ricalcolare il DAG.Gli argomenti trattati in questo blog sono essenzialmente necessari per Apache Spark e Scala Certification. Gli argomenti trattati in questo blog sono essenzialmente necessari per .

Perché utilizzare un partizionatore?

Nel cluster computing, la sfida centrale è ridurre al minimo il traffico di rete. Quando i dati sono orientati al valore-chiave, il partizionamento diventa fondamentale perché per le trasformazioni successive sull'RDD, c'è una discreta quantità di mescolamento dei dati attraverso la rete. Se chiavi o intervalli di chiavi simili sono archiviati nella stessa partizione, il mescolamento viene ridotto al minimo e l'elaborazione diventa sostanzialmente veloce.



Le trasformazioni che richiedono lo smistamento dei dati tra i nodi di lavoro traggono grandi vantaggi dal partizionamento. Tali trasformazioni lo sono cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combinationByKey e consultare .

Le partizioni sono configurabili a condizione che RDD sia basato su valori-chiave.

Proprietà della partizione

  1. È garantito che le tuple nella stessa partizione si trovano nella stessa macchina.
  2. Ogni nodo in un cluster può contenere più di una partizione.
  3. Il numero totale di partizioni è configurabile, per impostazione predefinita è impostato sul numero totale di core su tutti i nodi esecutore.

Tipi di partizionamento in Spark

Spark supporta due tipi di partizionamento,

  • Partizionamento hash : Utilizza Java Object.hashCode metodo per determinare la partizione come partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Partizionamento dell'intervallo : Utilizza un intervallo per distribuire alle rispettive partizioni le chiavi che rientrano in un intervallo. Questo metodo è adatto dove c'è un ordine naturale nelle chiavi e le chiavi non sono negative. Lo snippet di codice seguente mostra l'utilizzo di range partitioner.

Esempio di codice

Vediamo un esempio su come suddividere i dati tra i nodi di lavoro. Il codice Scala completo è disponibile Qui .

Ecco alcuni dati di prova di 12 coordinate (come tuple),

Creare un org.apache.spark.HashPartitioner di dimensione 2, dove le chiavi verranno partizionate su queste due partizioni in base al codice hash delle chiavi.

Quindi possiamo ispezionare le coppie ed eseguire varie trasformazioni basate su chiavi come foldByKey e reduceByKey.

Riassumendo, il partizionamento migliora notevolmente la velocità di esecuzione per le trasformazioni basate su chiavi.

php print_r array

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.

Post correlati:

Perché dovresti imparare Spark dopo aver padroneggiato Hadoop

Apache Spark Vs Hadoop MapReduce