Demistyfikujące partycjonowanie w Spark



Ten blog zawiera wszystko, co musisz wiedzieć o partycjonowaniu w Spark, typach partycji i tym, jak poprawia szybkość wykonywania transformacji opartych na kluczach.

Nadesłane przez Prithviraj Bose

Spark’s Odporne rozproszone zestawy danych (abstrakcja programowania) są oceniane leniwie, a transformacje są zapisywane jako skierowane grafy acykliczne (DAG). Więc każda akcja na RDD spowoduje, że Spark ponownie obliczy DAG. W ten sposób uzyskuje się odporność w Spark, ponieważ jeśli którykolwiek węzeł roboczy ulegnie awarii, wówczas DAG musi zostać ponownie obliczony.





To jest również obowiązkowe do pamięci podręcznej (utrzymuj odpowiedni poziom pamięci) RDD tak, że częste działania na RDD nie zmuszają Sparka do ponownego obliczenia DAG.Tematy omówione na tym blogu są zasadniczo wymagane do certyfikacji Apache Spark i Scala. Tematy omówione na tym blogu są zasadniczo wymagane dla .

Dlaczego warto korzystać z partycji?

W obliczeniach klastrowych głównym wyzwaniem jest zminimalizowanie ruchu sieciowego. Gdy dane są zorientowane na klucz-wartość, partycjonowanie staje się konieczne, ponieważ przy kolejnych transformacjach RDD występuje spora ilość przetasowanych danych w sieci. Jeśli podobne klucze lub zakres kluczy są przechowywane w tej samej partycji, tasowanie jest zminimalizowane, a przetwarzanie staje się zasadniczo szybkie.



Transformacje, które wymagają tasowania danych między węzłami roboczymi, są bardzo korzystne na partycjonowaniu. Takie przemiany są cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, assignByKey, connectByKey i wyszukiwanie .

Partycje można konfigurować pod warunkiem, że RDD jest oparty na klucz-wartość.

Właściwości partycji

  1. Krotki na tej samej partycji na pewno znajdują się na tej samej maszynie.
  2. Każdy węzeł w klastrze może zawierać więcej niż jedną partycję.
  3. Całkowita liczba partycji jest konfigurowalna, domyślnie jest ustawiona na całkowitą liczbę rdzeni na wszystkich węzłach wykonawczych.

Rodzaje partycjonowania w Spark

Spark obsługuje dwa typy partycjonowania,

  • Hash Partitioning : Używa języka Java Object.hashCode metoda określenia partycji jako Partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Podział zakresu : Używa zakresu, aby rozdzielić na odpowiednie partycje klucze należące do zakresu. Ta metoda jest odpowiednia, gdy w kluczach występuje naturalny porządek, a klucze są nieujemne. Poniższy fragment kodu pokazuje użycie partycjonera zakresu.

Przykład kodu

Zobaczmy przykład podziału danych na węzły robocze. Dostępny jest pełny kod Scala tutaj .

Oto kilka danych testowych 12 współrzędnych (w postaci krotek),

Stworzyć org.apache.spark.HashPartitioner o rozmiarze 2, gdzie klucze zostaną podzielone na te dwie partycje w oparciu o kod skrótu kluczy.

Następnie możemy sprawdzić pary i wykonać różne transformacje oparte na kluczach, takie jak foldByKey i redukujByKey.

Podsumowując, partycjonowanie znacznie poprawia szybkość wykonywania transformacji opartych na kluczach.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą.

Powiązane posty:

jak używać przycinania w java

Dlaczego powinieneś nauczyć się Spark'a po opanowaniu Hadoop

Apache Spark Vs Hadoop MapReduce