Apache Spark: ReduceByKey vs GroupByKey – różnice i porównanie

Apache Spark: ReduceByKey vs GroupByKey – różnice i porównanie

W tym poście spórbuję przedstawić Ci główną różnice pomiędzy metodami ReduceByKey i GroupByKey i dlaczego powinieneś unikać tej drugiej. A dlaczego? Odpowiedź kryję się pod pojęciem “shuffe“.

Shuffle

W środowisku gormadzenia danch przetwarzania równoległego tj. Haddop ważne jest, aby podczas obliczeń “wymiana” danych pomiędzy nodami była jak najmniejsza. “Wymiana danych” to nic innego jak ruch sieciowy pomiędzy maszynami. Dodatkowo za każdym razem dane muszą być serializowane i deserializowane. Im mniej danych przesyłamy tym mniej danych serializujemy deserializujemy. Każdy z tych kroków niesie za sobą zużycie mocy obliczeniowe, pamięci i co najważniejsze i jednocześnie najgorsze – czasu.

Przyjrzyjmy się poniższym dwóm analizom, aby na przykładzie zobaczyć co różni te dwie metody i dlaczego jedna z nich jest lepsza.

ReduceByKey

Zaczniemy od metody ReduceByKey, czyli tej “lepszej”. Zielone prostokąty przedstawiają poszczególne nody w klastrze.

Przeanalizujmy node 1, czyli pierwszy od lewej. Mamy tam trzy pary danych (big,1), (big,2) i (data,1). Chcemy zliczyć ile razy występuje każde słowo. Widzimy, żę na nodzie “lokalnie” zostały obliczone sumy dla każdego słowa (big,2) (data,1). Możemy inaczej powiedzieć, żę operacja “reduce” została najpierw wykonana na każdym nodzie bazując na swojej lokalnej porcji danych, zanim dane wysłane zostały do nodów, gdzie odbędzie się ostateczna faza “reduce“, dzięki której otrzymamy wynik.

Dzięki wykonaniu operacji reduce lokalnie ograniczmy ilość danych, która “krąży” pomiedzy nodami w klastrze. Dodatkowo zmniejszamy ilość danych poddaych procesowi Serializacji i Deserializacji.

GroupByKey

Teraz przyjrzyjmy się co się dzieje w przypadku, gdy używamy metody GroupByKey. Jak widać na poniższym rysunku nie występuje faza reduce. W wyniku czego wymiana danych pomiędzy nodami jest większa. Dodatkowo pamiętajmy o procesie Serializacji i Deserializacji, który w tym przypadku musi być wykonany na wiekszej ilości danych.

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

0 0 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments