2014-11-22 117 views
2

我希望我的代码能够读取每分钟生成的json文本文件(它是来自Citibike的站点提要数据),并且我尝试使用Spark Streaming。但我不断收到未知的主机异常错误。Spark Streaming中的UnknownHostExceptionError

我的代码:

String url = "http://citibikenyc.com/stations/json"; 

    SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("Streaming"); 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    JavaStreamingContext jssc = new JavaStreamingContext(sc, new Duration(60000)); 
    JavaDStream<String> lines = jssc.socketTextStream(url, 9999); 
    lines.print(); 

    jssc.start(); 
    jssc.awaitTermination(); 

和错误:

14/11/22 15:32:54 ERROR scheduler.ReceiverTracker: Deregistered receiver for stream 0: Restarting  receiver with delay 2000ms: Error receiving data - java.net.UnknownHostException: http://citibikenyc.com/stations/json 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:208) 
    at org.apache.spark.streaming.dstream.SocketReceiver.receive(SocketInputDStream.scala:71) 
    at org.apache.spark.streaming.dstream.SocketReceiver$$anon$2.run(SocketInputDStream.scala:57) 
14/11/22 15:32:54 INFO receiver.ReceiverSupervisorImpl: Stopped receiver 0 
+0

Google“java.net.UnknownHostException”? – vzamanillo 2014-11-24 14:25:34

回答

2

.socketTextStream提供一个完全不同的目的。 Spark Streaming没有任何接收器来定期获取URL。

您需要编写一个单独的程序来定期提取URL并将其提供给Spark Streaming。你有很多选择:

  • 写一个shell脚本,定期下载的URL到一个目录,然后使用Apache Flume读取这些文件在该目录中,并把他们送到星火流。有一个集成指南:Spark Streaming + Flume Integration Guide
  • 写你自己的Spark Streaming接收器。你可以start here
  • 在您的Spark应用程序中,启动一个线程,该线程定期提取URL并打开一个套接字发送内容,然后连接到该套接字(例如.socketTextStream(127.0.0.1, 9999))。

有很多变化和一些更先进的解决方案,但我会说这些更方便。