Demistificiranje particioniranja u Iskri

Ovaj vam blog govori sve što trebate znati o particioniranju u Sparku, vrstama particija i kako to poboljšava brzinu izvršavanja za transformacije temeljene na ključu.

Doprinos Prithviraj Bose

Spark’s Otporni distribuirani skupovi podataka (apstrakcija programiranja) lijeno se procjenjuju, a transformacije se pohranjuju u usmjerenim acikličkim grafikonima (DAG). Dakle, svaka akcija na RDD natjerat će Spark da preračuna DAG. Na ovaj se način u Sparku postiže elastičnost, jer ako bilo koji radnički čvor zakaže, DAG samo treba ponovno izračunati.





Također je obavezno za predmemoriranje (nastavi s odgovarajućom razinom pohrane) RDD-a tako da česte akcije na RDD-u ne prisiljavaju Spark-a da preračuna DAG.Teme obrađene na ovom blogu u osnovi su potrebne za certificiranje Apache Spark i Scala. Teme obrađene na ovom blogu su u osnovi potrebne za .

Zašto koristiti particiju?

U klaster računanju središnji je izazov minimizirati mrežni promet. Kad su podaci orijentirani na ključ / vrijednost, particioniranje postaje imperativ jer za naknadne transformacije na RDD-u postoji prilična količina miješanja podataka u mreži. Ako su slični ključevi ili raspon ključeva pohranjeni na istoj particiji, tada je miješanje na minimum, a obrada postaje bitno brza.



Transformacije koje zahtijevaju miješanje podataka kroz radne čvorove uvelike imaju koristi od particioniranja. Takve transformacije su cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combByKey i Pogledaj .

Particije se mogu konfigurirati pod uvjetom da se RDD temelji na ključu / vrijednosti.

Svojstva particije

  1. Zavjese u istoj particiji zajamčeno su u istom stroju.
  2. Svaki čvor u klasteru može sadržavati više od jedne particije.
  3. Ukupan broj particija može se konfigurirati, prema zadanim postavkama postavljen je na ukupan broj jezgri na svim izvršnim čvorovima.

Vrste particija u Spark-u

Spark podržava dvije vrste particija,

što je sinkronizacija u javi
  • Hash particioniranje : Koristi Java Object.hashCode metoda za određivanje particije kao particija = ključ.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Podjela raspona : Koristi raspon za distribuciju tipki koje spadaju u raspon na odgovarajuće particije. Ova je metoda prikladna ako postoji prirodan poredak u tipkama, a tipke nisu negativne. Ispod isječak koda prikazuje upotrebu particionera raspona.

Primjer koda

Pogledajmo primjer kako podijeliti podatke između radničkih čvorova. Dostupan je puni Scala kod ovdje .

Evo nekoliko testnih podataka od 12 koordinata (u obliku korijena),

podatkovni okvir u selenu

Izradite org.apache.spark.HashPartitioner veličine 2, gdje će ključevi biti podijeljeni na ove dvije particije na temelju hash koda ključeva.

Tada možemo pregledati parove i napraviti razne transformacije na temelju ključa poput foldByKey i reduceByKey.

Rezimirajući, particioniranje uvelike poboljšava brzinu izvršavanja za ključne transformacije.

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.

Vezane objave:

python def __init __ (samo)

Zašto biste trebali naučiti Spark nakon svladavanja Hadoopa

Apache Spark vs Hadoop MapReduce