2015-07-26 8 views
6

Wiem, że w przypadku problemów z odrzuceniem połączenia strumieniowego iskrzenia istnieje już wiele wątków. Ale większość z nich znajduje się w Linuksie lub przynajmniej wskazuje na HDFS. Używam tego na moim lokalnym laptopie z Windows.Błąd "Odmowa połączenia" podczas uruchamiania procesu Spark Streaming na komputerze lokalnym

Używam bardzo prostej, samodzielnej aplikacji do strumieniowania Spark, aby zobaczyć, jak działa transmisja strumieniowa. Nie robi nic skomplikowanego tutaj: -

import org.apache.spark.streaming.Seconds 
import org.apache.spark.streaming.StreamingContext 
import org.apache.spark.SparkConf 

object MyStream 
{ 
    def main(args:Array[String]) 
    { 
     val sc = new StreamingContext(new SparkConf(),Seconds(10)) 
     val mystreamRDD = sc.socketTextStream("localhost",7777) 
     mystreamRDD.print() 
     sc.start() 
     sc.awaitTermination() 
    } 
} 

otrzymuję następujący błąd: -

2015-07-25 18:13:07 INFO ReceiverSupervisorImpl:59 - Starting receiver 
2015-07-25 18:13:07 INFO ReceiverSupervisorImpl:59 - Called receiver onStart 
2015-07-25 18:13:07 INFO SocketReceiver:59 - Connecting to localhost:7777 
2015-07-25 18:13:07 INFO ReceiverTracker:59 - Registered receiver for  stream 0 from 192.168.19.1:11300 
2015-07-25 18:13:08 WARN ReceiverSupervisorImpl:92 - Restarting receiver  with delay 2000 ms: Error connecting to localhost:7777 
java.net.ConnectException: Connection refused 

Próbowałem przy użyciu różnych numerów portów, ale to nie pomaga. Tak więc wciąż próbuje się w pętli i ciągle otrzymuje ten sam błąd. Czy ktoś ma pomysł?

Odpowiedz

12

kodem dla socketTextStream, Spark tworzy instancję SocketInputDStream który wykorzystuje java.net.Sockethttps://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/SocketInputDStream.scala#L73

java.net.Socket jest gniazdo klienta, co oznacza, że ​​spodziewa się tam, aby być serwer już działa pod adresem i portem można określić. Jeśli nie masz jakiegoś serwisu z uruchomionym serwerem na porcie 7777 komputera lokalnego, wyświetlany błąd jest zgodny z oczekiwaniami.

Aby zobaczyć, co mam na myśli, spróbuj wykonać następujące czynności (może nie być konieczne ustawienie w swoim środowisku master lub appName).

import org.apache.spark.streaming.Seconds 
import org.apache.spark.streaming.StreamingContext 
import org.apache.spark.SparkConf 

object MyStream 
{ 
    def main(args:Array[String]) 
    { 
    val sc = new StreamingContext(new SparkConf().setMaster("local").setAppName("socketstream"),Seconds(10)) 
    val mystreamRDD = sc.socketTextStream("bbc.co.uk",80) 
    mystreamRDD.print() 
    sc.start() 
    sc.awaitTermination() 
    } 
} 

To nie zwraca żadnej treści, ponieważ aplikacja nie mówić HTTP na stronie internetowej BBC, ale nie uzyskać połączenie odmówiono wyjątku.

Aby uruchomić serwer lokalny gdy na linux, użyłbym netcata z prostego polecenia, takie jak

cat data.txt | ncat -l -p 7777 

Nie jestem pewien, co jest najlepszym podejściem w systemie Windows. Możesz napisać inną aplikację, która nasłuchuje jako serwer na tym porcie i wysyła trochę danych.

+0

Strumieniowanie Spark znajduje się po stronie klienta, a nie na serwerze sieci Web? Myślałem, że Spark Streaming jest uruchamiany na serwerze sieciowym i to, co żąda serwer sieciowy od swoich klientów, zwraca jako "strumień". Ale czy po uruchomieniu w węźle klienta WWW dokładnie, jakie dane są zwracane do Sparka jako "strumień"? Serwer sieciowy jest agentem pasywnym (ponieważ tylko czeka na żądania klienta i zwraca odpowiedź), co oznacza, że ​​"strumień" jest "odpowiedzią" zwracaną przez serwer WWW? Ale jeśli moduł strumieniowania iskrzenia nie wykona jakiegoś aktywnego żądania, to w jaki sposób zwróci odpowiedź? – Dhiraj

+0

Spark Streaming nie jest przypadkiem bycia klientem lub serwerem, jest tam, aby przetworzyć strumień. Zazwyczaj wymaga odbiornika, aby rozpocząć podawanie danych do obliczeń. Istnieją różne rodzaje odbiorników. W powyższym kodzie 'socketTextStream' ustawia odbiorcę, który działa jako klient oczekujący serwera na drugim końcu. Zajrzyj na https://spark.apache.org/docs/1.2.0/api/scala/index.html#org.apache.spark.streaming.StreamingContext, możesz lepiej użyć 'textFileStream', jeśli jesteś po prostu eksperymentowanie, które rozpocznie strumień, czytając pliki w katalogu. – mattinbits

Powiązane problemy