2015-08-30 2 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 и понял, что это получает порт, но сервер еще не запущен или зр runJob может быть проблемный

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

ответ

3

Это не идеальное решение, но теперь я знаю причину. Pyspark не может создать jvm-сокет с версией JDK 1.8 (64-bit), поэтому я просто установил свой путь java в jdk 1.7, и он сработал.

+0

Это не работает для меня. Я использую версии Spark 1.5.2 и jdk1.7. – prabhugs

+0

Ошибка при попытке драйвера python подключиться к scala-части драйвера, при любом искровом действии (подсчет, уменьшение ....) Соответствующая строка ниже показывает, что тайм-аут жестко запрограммирован на 3 секунды. https://github.com/apache/spark/blob/master/python/pyspark/rdd.py#L121 Технически сейчас нет возможности настроить тайм-аут, поэтому единственный способ восстановления кода на Python - чтобы поймать исключение в коде уровня приложения и повторить попытку для настраиваемого количества раз. – farmi

1

У меня была точно такая же ошибка, попытался JDK 1.7 и это не сработало, то я пошел и редактировал и т.д./файл/Хосты и понял, я имел следующие строки

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

Смежные вопросы