Samouczek przesyłania strumieniowego Apache Spark dla początkujących: praca, architektura i funkcje

Opublikowany: 2020-02-27

Obecnie żyjemy w świecie, w którym ogromne ilości danych są generowane co sekundę w szybkim tempie. Dane te mogą dostarczyć znaczących i użytecznych wyników, jeśli zostaną dokładnie przeanalizowane. Może również we właściwym czasie oferować rozwiązania dla wielu branż.

Są one bardzo przydatne w branżach takich jak usługi turystyczne, handel detaliczny, media, finanse i opieka zdrowotna. Wiele innych czołowych firm przyjęło analizę danych, taką jak śledzenie interakcji klienta z różnymi rodzajami produktów, wykonywane przez Amazon na swojej platformie lub otrzymywanie przez widzów spersonalizowanych rekomendacji w czasie rzeczywistym, które zapewnia Netflix.

Może być używany przez każdą firmę, która korzysta z dużej ilości danych i może je analizować na swoją korzyść, aby usprawnić cały proces w swojej firmie oraz zwiększyć satysfakcję klientów i doświadczenia użytkowników. Lepsze doświadczenia użytkowników i satysfakcja klientów zapewniają organizacji korzyści w dłuższej perspektywie w celu rozszerzenia działalności i osiągnięcia zysku.

Spis treści

Co to jest przesyłanie strumieniowe?

Strumieniowe przesyłanie danych to metoda, w której informacje są przesyłane w postaci ciągłego i stałego strumienia. Wraz z rozwojem Internetu rosną również technologie przesyłania strumieniowego.

Co to jest strumieniowanie Spark?

Gdy dane stale przybywają w sekwencji niezwiązanych, nazywa się to strumieniem danych. Dane wejściowe płyną stabilnie i są dzielone strumieniowo. Dalsze przetwarzanie danych następuje po podzieleniu ich na odrębne jednostki. Analiza danych i przetwarzanie danych z małym opóźnieniem nazywa się przetwarzaniem strumieniowym.

W 2013 roku Apache Spark został dodany z funkcją Spark Streaming. Istnieje wiele źródeł, z których może nastąpić pozyskiwanie danych, takich jak TCP Sockets, Amazon Kinesis, Apache Flume i Kafka. Za pomocą wyrafinowanych algorytmów odbywa się przetwarzanie danych. Do wyrażenia przetwarzania używane są funkcje wysokiego poziomu, takie jak okno, łączenie, zmniejszanie i mapowanie. Pulpity nawigacyjne na żywo, bazy danych i systemy plików służą do przesyłania przetworzonych danych do systemów plików.

Działanie strumienia

Poniżej znajdują się wewnętrzne działania. Przesyłanie strumieniowe Spark dzieli strumienie danych wejściowych na żywo na partie. Spark Engine służy do przetwarzania tych partii, aby w rezultacie wygenerować końcowe partie strumienia.

Dane w strumieniu są podzielone na małe partie i są reprezentowane przez Apache Spark Discretized Stream (Spark DStream). Spark RDD służy do tworzenia DStreams i jest to podstawowa abstrakcja danych platformy Spark. Dowolne składniki Apache Spark, takie jak Spark SQL i Spark MLib, można łatwo zintegrować z funkcją Spark Streaming.

Spark Streaming pomaga w skalowaniu strumieni danych na żywo. Jest to jedno z rozszerzeń podstawowego Spark API. Umożliwia również przetwarzanie strumienia odpornego na błędy i wysokiej przepustowości. Użycie Spark Streaming umożliwia przetwarzanie i przesyłanie strumieniowe danych na żywo w czasie rzeczywistym. Największe czołowe firmy na świecie korzystają z usług Spark Streaming, takich jak Pinterest, Netflix i Uber.

Spark Streaming zapewnia również analizę danych w czasie rzeczywistym. Przetwarzanie danych na żywo i szybkie odbywa się na jednej platformie Spark Streaming.

Przeczytaj także architekturę Apache Spark

Dlaczego Spark Streaming?

Spark Streaming może być używany do przesyłania strumieniowego danych w czasie rzeczywistym z różnych źródeł, takich jak Facebook, giełda i systemy geograficzne, oraz do przeprowadzania zaawansowanych analiz, aby zachęcić firmy.

Istnieje pięć istotnych aspektów Spark Streaming, które czynią go tak wyjątkowym, a są to:

1. Integracja

Można z nim łatwo zintegrować zaawansowane biblioteki, takie jak przetwarzanie wykresów, uczenie maszynowe, SQL.

2. Połączenie

Dane, które są przesyłane strumieniowo, mogą być wykonywane w połączeniu z interaktywnymi zapytaniami, a także statycznymi zestawami danych.

3. Równoważenie obciążenia

Spark Streaming ma doskonałe równoważenie obciążenia, co czyni go wyjątkowym.

4. Wykorzystanie zasobów

Spark Streaming wykorzystuje dostępne zasoby w bardzo optymalny sposób.

5. Wyzdrowienie z maruderów i niepowodzeń

Spark Streaming może szybko odzyskać sprawność po wszelkiego rodzaju awariach lub marudera.

Potrzeba przesyłania strumieniowego w Apache Spark

Model operatora ciągłego jest wykorzystywany przy projektowaniu systemu do przetwarzania strumieni tradycyjnie do przetwarzania danych. Działanie systemu wygląda następująco:

  1. Źródła danych służą do przesyłania strumieniowego danych. Różne rodzaje źródeł danych to urządzenia IoT, dane telemetryczne systemu, dzienniki na żywo i wiele innych. Te dane strumieniowe są przetwarzane przez systemy pozyskiwania danych, takie jak Amazon Kinesis, Apache Kafka i wiele innych.
  2. W klastrze przetwarzanie równoległe odbywa się na danych.
  3. Do przekazywania wyników wykorzystywane są dalsze systemy, takie jak Kafka, Cassandra, HBase.

Zestaw węzłów roboczych uruchamia kilka operatorów ciągłych. Przetwarzanie rekordów danych przesyłanych strumieniowo odbywa się pojedynczo. Dokumenty są następnie przekazywane kolejnym operatorom w przygotowaniu.

Operatorzy źródła są przyzwyczajeni do odbierania danych z systemów przetwarzania. Operatorzy zlewów są przyzwyczajeni do przekazywania danych wyjściowych do dalszego systemu.

Niektóre operatory są ciągłe. To naturalny i prosty model. Jeśli chodzi o analitykę złożonych danych w czasie rzeczywistym, która odbywa się na dużą skalę, tradycyjna architektura staje przed pewnymi wyzwaniami we współczesnym świecie, a są to:

Szybkie odzyskiwanie po awarii

W dzisiejszym systemie awariom szybko towarzyszy i koryguje odzyskiwanie utraconych informacji poprzez obliczanie brakujących informacji w węzłach równoległych. Dzięki temu odzyskiwanie jest jeszcze szybsze w porównaniu z tradycyjnymi systemami.

System równoważenia obciążenia

Load balancer pomaga alokować zasoby i dane między węzłem w bardziej wydajny sposób, dzięki czemu żaden zasób nie czeka ani nic nie robi, ale dane są równomiernie rozłożone w węzłach.

Ujednolicenie obciążeń interaktywnych, wsadowych i strumieniowych

Można również wchodzić w interakcje z danymi przesyłanymi strumieniowo, wykonując zapytania do danych przesyłanych strumieniowo. Można go również łączyć ze statycznymi zestawami danych. Nie można wykonywać zapytań ad-hoc przy użyciu nowych operatorów, ponieważ nie jest on przeznaczony dla operatorów ciągłych. Zapytania interaktywne, przesyłane strumieniowo i wsadowe można łączyć za pomocą jednego mechanizmu.

Zapytania SQL i analizy z ML

Tworzenie systemów ze wspólnymi poleceniami bazodanowymi ułatwiło życie programistów we współpracy z innymi systemami. Społeczność szeroko akceptuje zapytania SQL. System udostępnia moduł i biblioteki do uczenia maszynowego, które można wykorzystać do zaawansowanych celów analitycznych.

Przegląd strumieniowania Spark

Spark Streaming wykorzystuje zestaw RDD, który służy do przetwarzania danych w czasie rzeczywistym. Dlatego Spark Streaming jest powszechnie używany do przetwarzania strumienia danych w czasie rzeczywistym. Spark Streaming zapewnia odporne na błędy i wysokoprzepustowe przetwarzanie strumieni danych na żywo. Jest to dodatkowa funkcja, która jest dostarczana z interfejsem API Core Spark.

Funkcje przesyłania strumieniowego Spark

  1. Analiza biznesowa : Za pomocą Spark Streaming można również poznać zachowanie odbiorców. Te uczenie się może być później wykorzystane w podejmowaniu decyzji w przedsiębiorstwach.
  2. Integracja: przetwarzanie w czasie rzeczywistym i wsadowe jest zintegrowane ze Spark
  3. Tolerancja na awarie – Unikalną zdolnością Sparka jest to, że może skutecznie odzyskać sprawność po awarii.
  4. Szybkość: Niskie opóźnienie jest osiągane przez Spark
  5. Skalowanie: węzły można łatwo skalować do setek za pomocą Sparka.

Podstawy przesyłania strumieniowego Spark

1. Kontekst strumieniowania

W Spark strumień danych jest zużywany i zarządzany przez kontekst przesyłania strumieniowego. Tworzy obiekt Receiver, który jest wytwarzany przez zarejestrowanie strumienia wejściowego. W związku z tym to główna funkcjonalność Sparka staje się krytycznym punktem wejścia do systemu, ponieważ zapewnia wiele kontekstów, które zapewniają domyślny przepływ pracy dla różnych źródeł, takich jak Akka Actor, Twitter i ZeroMQ.

Przeczytaj: Rola Apache Spark w Big Data i dlaczego jest wyjątkowa

Obiekt kontekstu iskry reprezentuje połączenie z klastrem iskry. Tam, gdzie obiekt Spark Streaming jest tworzony przez obiekt StreamingContext, akumulatory, RDD i zmienne emisji można również utworzyć jako obiekt SparkContex.

2. Punkty kontrolne, zmienne transmisji i akumulatory

Punkty kontrolne

Checkpoint działa podobnie do Checkpoints, który przechowuje stan systemów tak samo jak w grach. Gdzie w tym przypadku Checkpoints pomaga zmniejszyć utratę zasobów i sprawić, że system będzie bardziej odporny na awarie. Metodologia punktów kontrolnych jest lepszym sposobem śledzenia i zapisywania stanów systemu, tak aby w momencie odzyskiwania można go było łatwo wycofać.

Zmienne transmisji

Zamiast dostarczać pełną kopię zadań do węzłów sieci, zawsze przechwytuje zmienną tylko do odczytu, która jest odpowiedzialna za potwierdzenie obecności węzłów innego zadania, a tym samym zmniejszenie kosztów transferu i obliczeń przez poszczególne węzły. Dzięki temu może wydajniej zapewniać znaczący zestaw danych wejściowych. Wykorzystuje również zaawansowane algorytmy do dystrybucji zmiennej rozgłoszeniowej do różnych węzłów w sieci; w ten sposób zmniejsza się koszt komunikacji.

Akumulatory

Akumulatory to zmienne, które można dostosować do różnych celów. Ale istnieją również już zdefiniowane akumulatory, takie jak akumulatory licznikowe i sumujące. Istnieją również akumulatory śledzące, które śledzą każdy węzeł, a także można do niego dodać kilka dodatkowych funkcji. Akumulatory numeryczne obsługują wiele funkcji cyfrowych, które obsługuje również Spark. Na żądanie użytkownika można również tworzyć własne akumulatory.

DStream

DStream oznacza strumień dyskretny. Spark Streaming oferuje niezbędną abstrakcję o nazwie Discretized Stream (DStream). DStream to dane, które są przesyłane strumieniowo w sposób ciągły. Ze źródła danych odbierany jest DStream. Można go również uzyskać ze strumienia przetworzonych danych. Transformacja strumienia wejściowego generuje przetworzony strumień danych.

Po określonym czasie dane są zawarte w RDD. Niekończąca się seria RDD reprezentuje DStream.

Buforowanie

Deweloperzy mogą używać DStream do buforowania danych strumienia w pamięci. Jest to przydatne, jeśli dane są obliczane wiele razy w DStream. Można to osiągnąć za pomocą metody persist() na DStream.

Powielanie danych ma na celu zapewnienie bezpieczeństwa posiadania odpornego systemu, który może wytrzymać i awarię w systemie, dzięki czemu ma zdolność tolerowania błędów w systemie (takich jak Kafka, Sockets, Flume itp.)

Przewaga i architektura Spark Streaming

Przetwarzanie jednego strumienia danych na raz może być czasami uciążliwe; dlatego Spark Streaming dyskretyzuje dane na małe podpartie, którymi można łatwo zarządzać. Dzieje się tak, ponieważ pracownicy Spark otrzymują bufory danych równolegle akceptowane przez odbiornik Spark Streaming. I stąd cały system równolegle uruchamia partie, a następnie akumuluje wyniki końcowe. Następnie te krótkie zadania są przetwarzane partiami przez silnik Spark, a wyniki są dostarczane do innych systemów.

W architekturze Spark Streaming obliczenia nie są statycznie przydzielane i ładowane do węzła, ale na podstawie lokalizacji danych i dostępności zasobów. Pozwala to na skrócenie czasu ładowania w porównaniu z poprzednimi tradycyjnymi systemami. Stąd zastosowanie zasady lokalności danych, ułatwia również detekcję usterek i ich naprawę.

Węzły danych w Spark są zwykle reprezentowane przez RDD, czyli zestaw danych dystrybucji elastycznej.

Cele Spark Streaming

Poniżej przedstawiono Cele osiągnięte przez architekturę Spark.

1. Dynamiczne równoważenie obciążenia

Jest to jedna z podstawowych funkcji Spark Streaming, w której strumienie danych są dynamicznie przydzielane przez moduł równoważenia obciążenia, który odpowiada za alokację danych i obliczanie zasobów przy użyciu określonych w nim zdefiniowanych reguł. Głównym celem równoważenia obciążenia jest wydajne zrównoważenie obciążenia między pracownikami i równoległe ustawienie wszystkiego, aby nie było marnowania dostępnych zasobów. A także odpowiedzialny za dynamiczne przydzielanie zasobów do węzłów roboczych w systemie.

2. Awaria i powrót do zdrowia

Podobnie jak w tradycyjnym systemie, gdy wystąpi awaria działania, cały system musi przeliczyć tę część, aby odzyskać utracone informacje. Ale problem pojawia się, gdy jeden węzeł obsługuje całe to odzyskiwanie i sprawia, że ​​cały system czeka na jego zakończenie. Podczas gdy w Spark utracone informacje są obliczane przez inne wolne węzły i przywracają system do śledzenia bez dodatkowego oczekiwania, jak w tradycyjnych metodach.

A także nieudane zadanie jest rozłożone równomiernie na wszystkie węzły w systemie, aby przeliczyć i przywrócić je z awarii szybciej niż metodą tradycyjną.

3. Partie i interaktywne zapytanie

Zestaw RDD w Spark są wywoływane jako DStream w Spark, co zapewnia relację między obciążeniami przesyłania strumieniowego i partiami. Te partie są przechowywane w pamięci Sparka, co zapewnia wydajny sposób wykonywania zapytań o obecne w niej dane.

Najlepszą częścią Sparka jest to, że zawiera szeroką gamę bibliotek, z których można korzystać, gdy jest to wymagane przez system Spark. Kilka nazw bibliotek to MLlib do uczenia maszynowego, SQL do zapytań o dane, GraphX ​​i Data Frame, podczas gdy Dataframe i pytania mogą być konwertowane na równoważne instrukcje SQL przez DStreams.

4. Wydajność

Ponieważ system iskier wykorzystuje równoległe rozłożenie zadania, które poprawia jego przepustowość, a tym samym wykorzystuje silnik iskier, który jest w stanie osiągnąć niskie opóźnienie, nawet do kilku 100 milisekund.

Jak działa Spark Streaming?

Dane w strumieniu są podzielone na małe partie, które są nazywane DStreams w Spark Streaming. Jest to sekwencja wewnętrznych RDD. Interfejsy Spark API są używane przez RDDS do przetwarzania danych, w wyniku czego przesyłki są zwracane. Interfejs API Spark Streaming jest dostępny w językach Python, Java i Scala. W niedawno wprowadzonym interfejsie API Pythona w Spark 1.2 brakuje wielu funkcji.

Obliczenia stanowe są nazywane stanem, który jest utrzymywany przez Spark Streaming na podstawie danych przychodzących w strumieniu. Dane, które przepływają w strumieniu, są przetwarzane w ramach czasowych. Ten przedział czasowy ma określić programista i zezwala na to Spark Streaming. Okno czasowe to przedział czasowy, w którym praca powinna zostać zakończona. Okno czasowe jest aktualizowane w przedziale czasowym, który jest również znany jako przedział czasowy w oknie.

Źródła strumieniowania Spark

Obiekt odbiornika, który jest powiązany z wejściowym DStream, przechowuje odebrane dane w Sparks Memory do przetwarzania.

Wbudowane strumieniowanie ma dwie kategorie:

1. Źródło podstawowe

Źródła dostępne w Streaming API, np. Socket Connection i File System.

2. Zaawansowane źródło

Zaawansowany poziom źródeł to Kinesis, Flume & Kafka itp.

Operacje strumieniowe

Istnieją dwa typy operacji obsługiwane przez Spark RDDS i są to:-

1. Operacje wyjściowe w Apache Spark

Operacje wyjściowe służą do wypychania danych DStream do systemu zewnętrznego, takiego jak system plików lub baza danych. Operacje wyjściowe umożliwiają wykorzystanie przekształconych danych przez systemy zewnętrzne. Wszystkie transformacje DStreams są faktycznie wykonywane przez wyzwalanie, które jest wykonywane przez systemy zewnętrzne.

Oto bieżące operacje wyjściowe:

foreachRDD(func), [suffix]), saveAsHadoopFiles(prefix, [suffix]), saveAsObjectFiles(prefix, [suffix])”prefix-TIME_IN_MS[.suffix]”, saveAsTextFiles(prefix, print()

RDD leniwie wykonują operacje wyjściowe. Wewnątrz DStream Operations of Output podejmowane są działania RDD w celu przetworzenia otrzymanych danych. Wykonywanie operacji wyjściowych odbywa się pojedynczo. Aplikacje Spark definiują kolejność wykonywania operacji wyjściowych.

2. Spark Transformacja

Transformacja Spark zmienia również dane z DStream, ponieważ RDD obsługują je w Spark. Podobnie jak Spark RDD, wiele zmian jest obsługiwanych przez DStream.

Oto najczęstsze operacje transformacji:

Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, ReduceByKey(func, [numTasks]), countByValue(), Reduce(), union(otherStream ), count(), repartition(numPartitions), filter(), flatMap(), map().

Wniosek

W dzisiejszym świecie opartym na danych narzędzia do przechowywania i analizy danych okazały się kluczowym czynnikiem w analityce biznesowej i rozwoju. Big Data oraz związane z nimi narzędzia i technologie cieszą się rosnącym popytem. W związku z tym Apache Spark ma świetny rynek i oferuje wspaniałe funkcje klientom i firmom.

Jeśli chcesz dowiedzieć się więcej o Big Data, sprawdź nasz program PG Diploma in Software Development Specialization in Big Data, który jest przeznaczony dla pracujących profesjonalistów i zawiera ponad 7 studiów przypadków i projektów, obejmuje 14 języków programowania i narzędzi, praktyczne praktyczne warsztaty, ponad 400 godzin rygorystycznej pomocy w nauce i pośrednictwie pracy w najlepszych firmach.

Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Poprowadź rewolucję technologiczną opartą na danych

400+ godzin nauki. 14 języków i narzędzi. Status absolwenta IIIT-B.
Zaawansowany program certyfikacji w Big Data z IIIT Bangalore