Demisztifikáló particionálás a Sparkban



Ez a blog mindent elárul, amit tudnia kell a Spark partícióról, a partíciótípusokról és arról, hogy miként javítja a kulcsalapú átalakítások végrehajtásának sebességét.

Közreműködött: Prithviraj Bose

Szikra Rugalmas elosztott adatkészletek (a programozási absztrakciót) lustán értékeljük, és a transzformációkat irányított aciklusos grafikonokként (DAG) tároljuk. Tehát az RDD minden cselekedete arra készteti a Sparkot, hogy újraszámolja a DAG-t. Így érhető el a rugalmasság a Sparkban, mert ha valamelyik dolgozói csomópont meghibásodik, akkor a DAG-ot csak újra kell számítani.





Ez is kötelező a gyorsítótárba (megfelelő tárolási szint mellett továbbra is fennáll) az RDD-t úgy, hogy az RDD-vel kapcsolatos gyakori műveletek nem kényszerítik a Sparkot a DAG újraszámítására.Az ebben a blogban szereplő témák alapvetően szükségesek az Apache Spark és a Scala tanúsításhoz. Az ebben a blogban szereplő témák alapvetően szükségesek .

Miért használjon particionálót?

A fürtszámítás során a központi kihívás a hálózati forgalom minimalizálása. Ha az adatok kulcsérték-orientáltak, akkor a particionálás elengedhetetlenné válik, mert az RDD későbbi átalakításaihoz megfelelő mennyiségű adatkeverés történik a hálózaton keresztül. Ha hasonló kulcsokat vagy kulcstartományokat tárolnak ugyanabban a partícióban, akkor a keverés minimalizálódik, és a feldolgozás lényegesen gyors lesz.



Azok a transzformációk, amelyek megkövetelik az adatok keverését a dolgozói csomópontokon, nagy hasznot húznak a particionálásból. Az ilyen átalakulások cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reducByKey, combByKey és Nézz fel .

A partíciók konfigurálhatók, feltéve, hogy az RDD kulcsérték-alapú.

A partíció tulajdonságai

  1. Garantáltan ugyanabban a partícióban lévő tömbök ugyanabban a gépben vannak.
  2. A fürt minden csomópontja egynél több partíciót tartalmazhat.
  3. A partíciók teljes száma konfigurálható, alapértelmezés szerint ez az összes végrehajtó csomópont magjának teljes számára van beállítva.

A particionálás típusai a Sparkban

A Spark kétféle particionálást támogat,

  • Hash particionálás : Java-t használ Object.hashCode módszer a partíció as meghatározására partíció = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Tartomány particionálása : Tartományt használ arra, hogy a tartományba eső kulcsokat a megfelelő partíciókra terjessze. Ez a módszer akkor megfelelő, ha a billentyűkben természetes sorrend van, és a billentyűk nem negatívak. Az alábbi kódrészlet bemutatja a tartomány particionáló használatát.

Kódpélda

Lássunk egy példát arra, hogyan kell particionálni az adatokat a munkavállalói csomópontokon. A teljes Scala kód elérhető itt .

Íme néhány tesztadat 12 koordinátáról (mint sorrend),

Hozzon létre egy org.apache.spark.HashPartitioner 2-es méretű, ahol a kulcsokat e két partíción át particionálják a kulcsok hash-kódja alapján.

Ezután megvizsgálhatjuk a párokat, és különféle kulcsalapú transzformációkat hajthatunk végre foldByKey és reducByKey.

Összefoglalva, a particionálás nagyban megnöveli a kulcsalapú transzformációk végrehajtásának sebességét.

Van egy kérdésünk? Kérjük, említse meg a megjegyzések részben, és kapcsolatba lépünk Önnel.

Kapcsolódó hozzászólások:

java hogyan lehet kilépni a programból

Miért érdemes megtanulnia a Spark-ot a Hadoop elsajátítása után?

Apache Spark Vs Hadoop MapReduce