Spark Streaming to rozszerzenie podstawowego interfejsu Spark API, które umożliwia skalowalne, wysokoprzepustowe i odporne na błędy przetwarzanie strumieni danych na żywo. Spark Streaming może służyć do przesyłania strumieniowego danych na żywo, a przetwarzanie może odbywać się w czasie rzeczywistym. Stale rosnąca baza użytkowników Spark Streaming składa się z popularnych nazwisk, takich jak Uber, Netflix i Pinterest.
Jeśli chodzi o analizę danych w czasie rzeczywistym, Spark Streaming zapewnia pojedynczą platformę do pozyskiwania danych w celu szybkiego przetwarzania na żywo i udowadnia twoje umiejętności w tym samym.Na tym blogu przedstawię wam tę nową ekscytującą domenę Spark Streaming i przejdziemy przez cały przypadek użycia, Analiza nastrojów na Twitterze przy użyciu przesyłania strumieniowego Spark.
Oto tematy, które zostaną omówione na tym blogu:
java, jak wyjść z programu
- Co to jest przesyłanie strumieniowe?
- Dlaczego Spark Streaming?
- Omówienie przesyłania strumieniowego Spark
- Funkcje przesyłania strumieniowego Spark
- Podstawy przesyłania strumieniowego Spark
5.1 Kontekst przesyłania strumieniowego
5.2 DStream
5.3 Buforowanie / trwałość
5.4 Akumulatory, zmienne transmisji i punkty kontrolne - Przykład zastosowania - analiza nastrojów na Twitterze
Co to jest przesyłanie strumieniowe?
Przesyłanie strumieniowe danych to technika przesyłania danych, dzięki której można je przetwarzać jako stały i ciągły strumień. Wraz z rozwojem Internetu technologie przesyłania strumieniowego stają się coraz ważniejsze.
Postać: Co to jest przesyłanie strumieniowe?
Dlaczego Spark Streaming?
Możemy używać Spark Streaming do przesyłania strumieniowego danych w czasie rzeczywistym z różnych źródeł, takich jak Twitter, giełda i systemy geograficzne, oraz przeprowadzać zaawansowane analizy, aby pomóc firmom.
Postać: Dlaczego Spark Streaming?
Omówienie przesyłania strumieniowego Spark
Spark Streaming służy do przetwarzania danych przesyłanych strumieniowo w czasie rzeczywistym. Jest to przydatne uzupełnienie podstawowego interfejsu Spark API. Spark Streaming umożliwia wysokoprzepustowe i odporne na błędy przetwarzanie strumieni danych na żywo.
Postać: Strumienie w usłudze Spark Streaming
Podstawową jednostką strumienia jest DStreamco jest w zasadzie serią RDD do przetwarzania danych w czasie rzeczywistym.
Funkcje przesyłania strumieniowego Spark
- Skalowanie: Spark Streaming można łatwo skalować do setek węzłów.
- Prędkość: To jestzapewnia niskie opóźnienie.
- Tolerancja błędów: Spark ma zdolność eszybko wychodzą z awarii.
- Integracja: Spark integruje się z przetwarzaniem wsadowym i w czasie rzeczywistym.
- Analiza biznesowa: Spark Streaming jest used do śledzenia zachowań klientów, które można wykorzystać w analizie biznesowej.
Przepływ pracy przesyłania strumieniowego Spark
Przepływ pracy Spark Streaming ma cztery etapy wysokiego poziomu. Pierwszym jest strumieniowe przesyłanie danych z różnych źródeł. Te źródła mogą być strumieniowymi źródłami danych, takimi jak Akka, Kafka, Flume, AWS lub Parquet do przesyłania strumieniowego w czasie rzeczywistym. Drugi typ źródeł obejmuje HBase, MySQL, PostgreSQL, Elastic Search, Mongo DB i Cassandra do przesyłania strumieniowego statycznego / wsadowego. Gdy to nastąpi, Spark może być używany do wykonywania uczenia maszynowego na danych za pośrednictwem interfejsu API MLlib. Ponadto Spark SQL jest używany do wykonywania dalszych operacji na tych danych. Wreszcie, dane wyjściowe przesyłania strumieniowego można przechowywać w różnych systemach przechowywania danych, takich jak HBase, Cassandra, MemSQL, Kafka, Elastic Search, HDFS i lokalny system plików.
Postać: Omówienie przesyłania strumieniowego Spark
Podstawy przesyłania strumieniowego Spark
- Kontekst przesyłania strumieniowego
- DStream
- Buforowanie
- Akumulatory, zmienne transmisji i punkty kontrolne
Kontekst przesyłania strumieniowego
Kontekst przesyłania strumieniowego zużywa strumień danych w Spark. Rejestruje plik Wejście DStream do produkcji Odbiorca obiekt. Jest to główny punkt wejścia do funkcjonalności Spark. Spark udostępnia szereg domyślnych implementacji źródeł, takich jak Twitter, Akka Actor i ZeroMQ, które są dostępne z kontekstu.
Obiekt StreamingContext można utworzyć na podstawie obiektu SparkContext. SparkContext reprezentuje połączenie z klastrem Spark i może służyć do tworzenia RDD, akumulatorów i zmiennych emisji w tym klastrze.
import org.apache.spark._ import org.apache.spark.streaming._ var ssc = new StreamingContext (sc, Seconds (1))
DStream
Dyskretny strumień (DStream) to podstawowa abstrakcja zapewniana przez Spark Streaming. Jest to ciągły strumień danych. Jest odbierany ze źródła danych lub przetworzonego strumienia danych generowanego przez transformację strumienia wejściowego.
Postać: Wyodrębnianie słów z wejściowego strumienia DStream
Wewnętrznie DStream jest reprezentowany przez ciągłą serię RDD, a każdy RDD zawiera dane z określonego przedziału.
Wejście DStreams: Wejście DStreams to DStreams reprezentujące strumień danych wejściowych otrzymanych ze źródeł strumieniowych.
Postać: Odbiornik wysyła dane do wejściowego strumienia DStream, w którym każda partia zawiera RDD
Każdy wejściowy strumień DStream jest powiązany z obiektem Receiver, który odbiera dane ze źródła i przechowuje je w pamięci Spark w celu przetworzenia.
Transformacje na DStreams:
Każda operacja zastosowana na DStream jest tłumaczona na operacje na bazowych RDD. Transformacje umożliwiają modyfikację danych z wejściowego strumienia DStream, podobnie jak w przypadku RDD. DStreams obsługuje wiele transformacji dostępnych w normalnych RDD Spark.
Postać: Transformacje DStream
Oto niektóre z popularnych przekształceń w DStreams:
mapa( func ) | mapa( func ) zwraca nowy DStream, przekazując każdy element źródłowego DStream przez funkcję func. |
flatMap ( func ) | flatMap ( func ) jest podobny do mapy ( func ), ale każdy element wejściowy można zamapować na 0 lub więcej elementów wyjściowych i zwraca nowy DStream, przekazując każdy element źródłowy przez funkcję func. |
filtr( func ) | filtr( func ) zwraca nowy DStream, wybierając tylko rekordy źródłowego DStream, na którym func zwraca prawdę. |
zmniejszyć( func ) | zmniejszyć( func ) zwraca nowy DStream jednoelementowych RDD poprzez agregację elementów w każdym RDD źródłowego DStream za pomocą funkcji func . |
Grupuj według( func ) | Grupuj według( func ) zwraca nowy RDD, który zasadniczo składa się z klucza i odpowiadającej mu listy pozycji z tej grupy. |
Wyjście DStreams:
Operacje wyjściowe umożliwiają wypychanie danych DStream do systemów zewnętrznych, takich jak bazy danych lub systemy plików. Operacje wyjściowe wyzwalają faktyczne wykonanie wszystkich przekształceń DStream.
Postać: Operacje wyjściowe na DStreams
Buforowanie
DStreams zezwalaj programistom na buforowanie / utrwalanie danych strumienia w pamięci. Jest to przydatne, jeśli dane w DStream będą obliczane wiele razy. Można to zrobić za pomocą trwać() metoda na DStream.
Postać: Buforowanie w 2 węzłach
W przypadku strumieni wejściowych, które odbierają dane przez sieć (takich jak Kafka, Flume, Sockets itp.),domyślny poziom trwałości jest ustawiony na replikację danych do dwóch węzłów w celu zapewnienia odporności na uszkodzenia.
Akumulatory, zmienne transmisji i punkty kontrolne
jak odwrócić numer w java
Akumulatory: Akumulatory to zmienne, które są dodawane tylko poprzez operację asocjacyjną i przemienną. Służą do realizacji liczników lub sum. Śledzenie akumulatorów w interfejsie użytkownika może być przydatne do zrozumienia postępu uruchomionych etapów. Spark natywnie obsługuje akumulatory numeryczne. Możemy tworzyć akumulatory nazwane lub nienazwane.
Zmienne transmisji: Zmienne transmisji pozwalają programiście przechowywać zmienną tylko do odczytu w pamięci podręcznej na każdej maszynie, zamiast wysyłać jej kopię z zadaniami. Można ich używać do wydajnego nadawania każdemu węzłowi kopii dużego zestawu danych wejściowych. Spark próbuje również dystrybuować zmienne emisji przy użyciu wydajnych algorytmów emisji, aby zmniejszyć koszty komunikacji.
Punkty kontrolne: Punkty kontrolne są podobne do punktów kontrolnych w grach. Dzięki nim działa 24 godziny na dobę, 7 dni w tygodniu i jest odporny na awarie niezwiązane z logiką aplikacji.
Postać: Funkcje punktów kontrolnych
Przykład zastosowania - analiza nastrojów na Twitterze
Teraz, gdy zrozumieliśmy podstawowe koncepcje przesyłania strumieniowego Spark, rozwiążmy rzeczywisty problem przy użyciu przesyłania strumieniowego Spark.
Oświadczenie dotyczące problemu: Zaprojektować system analizy nastrojów na Twitterze, w którym zapełniamy nastroje w czasie rzeczywistym w zakresie zarządzania kryzysowego, dostosowywania usług i marketingu docelowego.
Zastosowania analizy nastrojów:
- Przewiduj sukces filmu
- Przewiduj sukces kampanii politycznej
- Zdecyduj, czy zainwestować w określoną firmę
- Reklama ukierunkowana
- Przejrzyj produkty i usługi
Implementacja przesyłania strumieniowego Spark:
Znajdź poniższy pseudokod:
// Zaimportuj potrzebne pakiety do programu Spark import org.apache.spark.streaming. {Seconds, StreamingContext} import org.apache.spark.SparkContext._ ... import java.io.File object twitterSentiment {def main (args : Array [String]) {if (args.length<4) { System.err.println('Usage: TwitterPopularTags ' + ' []') System.exit(1) } StreamingExamples.setStreamingLogLevels() //Passing our Twitter keys and tokens as arguments for authorization val Array(consumerKey, consumerSecret, accessToken, accessTokenSecret) = args.take(4) val filters = args.takeRight(args.length - 4) // Set the system properties so that Twitter4j library used by twitter stream // Use them to generate OAuth credentials System.setProperty('twitter4j.oauth.consumerKey', consumerKey) ... System.setProperty('twitter4j.oauth.accessTokenSecret', accessTokenSecret) val sparkConf = new SparkConf().setAppName('twitterSentiment').setMaster('local[2]') val ssc = new Streaming Context val stream = TwitterUtils.createStream(ssc, None, filters) //Input DStream transformation using flatMap val tags = stream.flatMap { status =>Pobierz tekst z hasztagów} // transformacja RDD za pomocą sortBy, a następnie mapuj tagi funkcji.countByValue () .foreachRDD {rdd => val now = Pobierz aktualny czas każdego tweeta rdd .sortBy (_._ 2) .map (x => (x, now)) // Zapisywanie naszych wyników w katalogu ~ / twitter / .saveAsTextFile (s '~ / twitter / $ now')} // Transformacja DStream przy użyciu funkcji filtrujących i mapujących val tweets = stream.filter {t => val tags = t. Split On Spaces .filter (_. StartedWith ('#')). Konwertuj na małe litery tags.exists {x => true}} val data = tweets.map {status => val sentiment = SentimentAnalysisUtils.detectSentiment (status.getText) val tagss = status.getHashtagEntities.map (_. GetText.toLowerCase) (status.getText, sentiment.toString, tagss.toString ())} data.print () // Zapisywanie naszych wyników w ~ / z nazwami plików zaczynającymi się jak twitter data.saveAsTextFiles ('~ / twitters', '20000') ssc. start () ssc.awaitTermination ()}}
Wyniki:
Poniżej przedstawiono wyniki, które są wyświetlane w środowisku Eclipse IDE podczas działania programu Twitter Sentiment Streaming.
przeciążanie funkcji w języku C ++
Postać: Dane wyjściowe analizy nastrojów w środowisku Eclipse IDE
Jak widać na zrzucie ekranu, wszystkie tweety są podzielone na pozytywne, neutralne i negatywne, zgodnie z sentymentem treści tweetów.
Wynik sentymentów tweetów jest przechowywany w folderach i plikach zgodnie z czasem ich utworzenia. Te dane wyjściowe można w razie potrzeby przechowywać w lokalnym systemie plików lub HDFS. Katalog wyjściowy wygląda następująco:
Postać: Foldery wyjściowe w naszym folderze projektu „twitter”
Tutaj, w katalogu twittera, możemy znaleźć nazwy użytkowników Twittera wraz z sygnaturą czasową każdego tweeta, jak pokazano poniżej:
Postać: Plik wyjściowy zawierający nazwy użytkowników Twittera z sygnaturą czasową
Teraz, gdy mamy nazwy użytkowników Twittera i sygnaturę czasową, przyjrzyjmy się sentymentom i tweetom przechowywanym w głównym katalogu. Tutaj po każdym tweecie następuje uczucie sentymentu. Ten przechowywany sentyment jest następnie używany do analizowania ogromnej liczby spostrzeżeń przez firmy.
Postać: Plik wyjściowy zawierający tweety z sentymentami
Kod poprawiający:
Teraz zmodyfikujmy trochę nasz kod, aby uzyskać nastroje dla określonych hashtagów (tematów). Obecnie Donald Trump, prezydent Stanów Zjednoczonych, zyskuje na popularności w kanałach informacyjnych i internetowych mediach społecznościowych. Przyjrzyjmy się nastrojom związanym ze słowem kluczowym „ atut „.
Postać: Wykonywanie analizy nastrojów w tweetach ze słowem kluczowym „Trump”
Idąc naprzód:
Jak widzieliśmy z naszej demonstracji analizy nastrojów, możemy wyodrębnić opinie na poszczególne tematy, tak jak zrobiliśmy to w przypadku „Trumpa”. Podobnie Sentiment Analytics może być wykorzystywane przez firmy na całym świecie do zarządzania kryzysowego, dostosowywania usług i marketingu docelowego.
Firmy używające Spark Streaming do analizy nastrojów zastosowały to samo podejście, aby osiągnąć następujące rezultaty:
- Poprawa jakości obsługi klienta
- Zdobycie przewagi konkurencyjnej
- Zdobywanie Business Intelligence
- Rewitalizacja tracącej marki
W ten sposób doszliśmy do końca Samouczek dotyczący przesyłania strumieniowego Spark blog. Do tej pory musieliście już dobrze zrozumieć, czym jest Spark Streaming. Przypadek użycia analizy nastrojów na Twitterze zapewni Ci pewność niezbędną do pracy nad wszelkimi przyszłymi projektami, które napotkasz w Spark Streaming i Apache Spark. Praktyka jest kluczem do opanowania dowolnego przedmiotu i mam nadzieję, że ten blog wzbudził w Tobie wystarczająco duże zainteresowanie, abyś mógł dalej zgłębiać temat Apache Spark.
Na początek zalecamy następujący samouczek Spark Streaming YouTube firmy Edureka:
Spark Streaming | Przykład analizy nastrojów na Twitterze | Edureka
Ta seria filmów wideo poświęcona samouczkowi Spark zawiera pełne informacje o składnikach wraz z rzeczywistymi przykładami użycia, takimi jak Analiza nastrojów na Twitterze , Analiza prognoz meczu NBA , System wykrywania trzęsień ziemi , Analiza danych lotu i Systemy rekomendacji filmów . Osobiście zaprojektowaliśmy przypadki użycia tak, aby zapewnić wszechstronną wiedzę każdemu, kto używa kodu.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą najwcześniej. Jeśli chcesz nauczyć się Spark i zbudować karierę w domenie Spark i zdobyć doświadczenie w przetwarzaniu danych na dużą skalę przy użyciu RDD, Spark Streaming, SparkSQL, MLlib, GraphX i Scala z wykorzystaniem rzeczywistych przypadków użycia, sprawdź nasze interaktywne, na żywo online tutaj, który zapewnia wsparcie 24 * 7, które poprowadzi Cię przez cały okres nauki.