2015-08-30 81 views
3

每当我尝试在pyspark中执行一个简单处理时,它无法打开套接字。例外:无法在pyspark上打开套接字

>>> myRDD = sc.parallelize(range(6), 3) 
>>> sc.runJob(myRDD, lambda part: [x * x for x in part]) 

以上抛出异常 -

port 53554 , proto 6 , sa ('127.0.0.1', 53554) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Volumes/work/bigdata/spark-custom/python/pyspark/context.py", line 917, in runJob 
    return list(_load_from_socket(port, mappedRDD._jrdd_deserializer)) 
    File "/Volumes/work/bigdata/spark-custom/python/pyspark/rdd.py", line 143, in _load_from_socket 
    raise Exception("could not open socket") 
Exception: could not open socket 

>>> 15/08/30 19:03:05 ERROR PythonRDD: Error while sending iterator 
java.net.SocketTimeoutException: Accept timed out 
    at java.net.PlainSocketImpl.socketAccept(Native Method) 
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404) 
    at java.net.ServerSocket.implAccept(ServerSocket.java:545) 
    at java.net.ServerSocket.accept(ServerSocket.java:513) 
    at org.apache.spark.api.python.PythonRDD$$anon$2.run(PythonRDD.scala:613) 

我通过rdd.py _load_from_socket检查,并意识到它得到的端口,但服务器甚至还没有开始或SP runJob可能是发出─

port = self._jvm.PythonRDD.runJob(self._jsc.sc(), mappedRDD._jrdd, partitions) 

回答

3

它不是理想的解决方案,但现在我知道原因。 Pyspark无法使用JDK 1.8(64位)版本创建jvm套接字,所以我只是将我的java路径设置为jdk 1.7并且工作正常。

+0

它不会为我工作。我使用Spark 1.5.2和jdk1.7版本。 – prabhugs

+0

错误是当python驱动程序尝试连接到驱动程序的scala部分时,出现任何火花动作(count,reduce ....) 下面的相应行显示超时被硬编码为3秒。 https://github.com/apache/spark/blob/master/python/pyspark/rdd.py#L121 从技术上讲,现在没有办法配置超时,因此Python代码恢复的唯一方法是捕获应用程序级代码中的异常并重试可配置的次数。 – farmi

1

我有完全相同的错误,试图JDK 1.7和它没有工作,然后我去和编辑/ etc/hosts文件,并意识到我有以下行

127.0.0.1 mbp.local localhost 
127.0.0.1 localhost 

只是注释掉与我的电脑本地名称的线,它的工作。

#127.0.0.1 mbp.local localhost 
127.0.0.1 localhost 

测试在PySpark 1.6.3和2.0.2与JDK 1.8

相关问题