Despărțirea partiționării în Spark



Acest blog vă spune tot ce trebuie să știți despre partiționarea în Spark, tipurile de partiții și cum îmbunătățește viteza de execuție pentru transformările bazate pe cheie.

Contribuție de Prithviraj Bose

Spark’s Seturi de date distribuite rezistente (abstractizarea programării) sunt evaluate leneș și transformările sunt stocate ca grafice aciclice direcționate (DAG). Deci, fiecare acțiune pe RDD va face ca Spark să recalculeze DAG. Acesta este modul în care rezistența este atinsă în Spark, deoarece dacă un nod lucrător eșuează, atunci DAG trebuie doar recomputat.





Este, de asemenea obligatoriu pentru cache (persistă cu un nivel de stocare adecvat) RDD astfel încât acțiunile frecvente asupra RDD să nu-l oblige pe Spark să recalculeze DAG-ul.Subiectele tratate în acest blog sunt necesare în esență pentru certificarea Apache Spark și Scala. Subiectele tratate în acest blog sunt, în esență, necesare .

De ce să folosiți un partiționar?

În calculul cluster, provocarea centrală este de a minimiza traficul de rețea. Când datele sunt orientate către valoare-cheie, partiționarea devine imperativă, deoarece pentru transformările ulterioare pe RDD, există o cantitate echitabilă de amestecare de date în rețea. Dacă tastele similare sau gama de taste sunt stocate în aceeași partiție, amestecarea este redusă la minimum și procesarea devine substanțial rapidă.



Transformările care necesită amestecarea datelor între nodurile lucrătorilor beneficiază foarte mult de partiționare. Astfel de transformări sunt cogrup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey și privește în sus .

Partițiile sunt configurabile cu condiția ca RDD să fie bazat pe cheie-valoare.

Proprietățile partiției

  1. Tuplurile din aceeași partiție sunt garantate să fie în aceeași mașină.
  2. Fiecare nod dintr-un cluster poate conține mai multe partiții.
  3. Numărul total de partiții este configurabil, în mod implicit este setat la numărul total de nuclee de pe toate nodurile executorului.

Tipuri de partiționare în Spark

Spark acceptă două tipuri de partiționare,

java convertește dublu în întreg
  • Partiționare Hash : Folosește Java’s Object.hashCode metoda de determinare a partiției ca partiție = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Partiționarea intervalului : Folosește un interval pentru a distribui către partițiile respective cheile care se încadrează într-un interval. Această metodă este potrivită în cazul în care există o ordonare naturală în taste și tastele sunt non negative. Fragmentul de cod de mai jos arată utilizarea partiționarului de gamă.

Exemplu de cod

Să vedem un exemplu despre cum să partiționăm datele între nodurile lucrătorului. Codul Scala complet este disponibil Aici .

Iată câteva date de testare a 12 coordonate (sub formă de tupluri),

roluri și responsabilități de dezvoltator hadoop

Creaza un org.apache.spark.HashPartitioner de dimensiunea 2, unde tastele vor fi partiționate pe aceste două partiții pe baza codului hash al tastelor.

Apoi putem inspecta perechile și putem face diverse transformări bazate pe cheie, cum ar fi foldByKey și reduceByKey.

Rezumând, partiționarea îmbunătățește foarte mult viteza de execuție pentru transformările bazate pe cheie.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.

Postări asemănatoare:

De ce ar trebui să înveți Spark după ce stăpânești Hadoop

java system.exit (0)

Apache Spark Vs Hadoop MapReduce