Demistificiranje particioniranja v iskri



Ta spletni dnevnik vam pove vse, kar morate vedeti o particioniranju v Sparku, vrstah particij in o tem, kako izboljša hitrost izvajanja za transformacije, ki temeljijo na ključih.

Prispeval Prithviraj Bose

Spark’s Prožni porazdeljeni nabori podatkov (programska abstrakcija) se leno ocenijo in transformacije shranijo kot usmerjeni aciklični grafi (DAG). Torej bo vsako dejanje na RDD Spark ponovno izračunalo DAG. Tako se v Sparku doseže odpornost, ker če katero koli delovno vozlišče odpove, je treba DAG preprosto preračunati.





primer priklica oddaljene metode java

Je tudi obvezno za predpomnjenje (vztrajajo pri ustrezni ravni shranjevanja) RDD tako, da pogosta dejanja na RDD ne prisilijo Sparka, da ponovno izračuna DAG.Teme, zajete v tem blogu, so v bistvu potrebne za certificiranje Apache Spark in Scala. Teme, zajete v tem blogu, so v bistvu potrebne .

Zakaj uporabljati particijo?

Pri računalništvu v grozdih je osrednji izziv čim bolj zmanjšati omrežni promet. Ko so podatki usmerjeni v ključno vrednost, postane razdelitev nujna, ker je pri nadaljnjih preoblikovanjih RDD podatkov po omrežju precej premešanih. Če so podobni ključi ali obseg ključev shranjeni na isti particiji, je premeščanje čim manjše in obdelava postane bistveno hitra.



Transformacije, ki zahtevajo premeščanje podatkov med delovnimi vozlišči, imajo veliko koristi od razdelitve. Takšne preobrazbe so cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, kombinirajByKey in Poglej gor .

Pregrade so nastavljive, če RDD temelji na ključu in vrednosti.

Lastnosti particije

  1. Zapleti v isti particiji so zagotovljeni v isti napravi.
  2. Vsako vozlišče v gruči lahko vsebuje več kot eno particijo.
  3. Skupno število particij je mogoče konfigurirati, privzeto pa je nastavljeno na skupno število jeder na vseh izvršilnih vozliščih.

Vrste pregrad v Spark

Spark podpira dve vrsti particioniranja,

  • Hash particioniranje : Uporablja Java Object.hashCode metoda za določitev particije kot particija = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Razdelitev obsega : Uporablja obseg za distribucijo tipk, ki spadajo v obseg, na ustrezne particije. Ta metoda je primerna, če je v tipkah naravno urejanje in tipke niso negativne. Spodnji delček kode prikazuje uporabo razdelilnika obsega.

Primer kode

Oglejmo si primer, kako razdeliti podatke na delovna vozlišča. Na voljo je celotna Scala koda tukaj .

Tukaj je nekaj testnih podatkov 12 koordinat (v obliki korit),

Ustvari org.apache.spark.HashPartitioner velikosti 2, kjer bodo ključi razdeljeni na ti dve particiji na podlagi zgoščevalne kode ključev.

Nato lahko pregledamo pare in izvedemo različne transformacije, ki temeljijo na ključih foldByKey in reduceByKey.

Če povzamemo, particioniranje močno izboljša hitrost izvajanja za ključne transformacije.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje in se vam bomo javili.

Sorodne objave:

Zakaj bi se morali naučiti Spark po obvladovanju Hadoopa

zakaj potrebujemo serializacijo v javi

Apache Spark Vs Hadoop MapReduce