Apache Spark RDD ReduceByKey vs RDD GroupByKey – różnice i porównanie – proste i porównanie w 5 min!

You are currently viewing Apache Spark RDD ReduceByKey vs RDD GroupByKey – różnice i porównanie – proste i porównanie w 5 min!
Share This Post, Help Others, And Earn My Heartfelt Appreciation! :)
4.8
(333)

W tym poście spróbuję przedstawić Ci główną różnice pomiędzy metodami Apache Spark RDD ReduceByKey vs RDD GroupByKey i dlaczego powinieneś unikać tej drugiej. A dlaczego? Odpowiedź kryję się pod pojęciem shuffle.

Shuffle w Apache Spark RDD ReduceByKey vs RDD GroupByKey

W środowisku gromadzenia danych przetwarzania równoległego tj. https://hadoop.apache.org/ 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. (Apache Spark RDD ReduceByKey vs RDD GroupByKey)

RDD 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, że na nodzie lokalnie zostały obliczone sumy dla każdego słowa (big,2) (data,1). Możemy inaczej powiedzieć, że 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. (Apache Spark RDD ReduceByKey vs RDD GroupByKey)

Dzięki wykonaniu operacji reduce lokalnie ograniczmy ilość danych, która „krąży” pomiędzy nodami w klastrze. Dodatkowo zmniejszamy ilość danych, które zostały Serializowane i Deserialozowene.

Apache Spark RDD ReduceByKey vs RDD GroupByKey - różnice i porównanie

RDD GroupByKey

Teraz przyjrzyjmy się co się dzieje w przypadku, gdy używamy metody RDD 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 większej ilości danych. (Apache Spark RDD ReduceByKey vs RDD GroupByKey)

Apache Spark RDD ReduceByKey vs RDD GroupByKey - różnice i porównanie

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

How useful was this post?

Click on a star to rate it!

Average rating 4.8 / 5. Vote count: 333

No votes so far! Be the first to rate this post.

Subscribe
Powiadom o
guest
0 Comments
Inline Feedbacks
View all comments