2015-07-28 2 views
2

Мы начинаем с Spark (используя PySpark), и мы сталкиваемся с проблемами в среде VMware ESX 5.5 с виртуальными машинами Ubuntu Server 14.04 LTS с версией Java «1.8.0_45».Не удалось запустить простые примеры PySpark

Запуск простого sc.parallelize(['2', '4']).collect() результатов в этом:

15/07/28 10:11:42 INFO SparkContext: Starting job: collect at <stdin>:1 
15/07/28 10:11:42 INFO DAGScheduler: Got job 0 (collect at <stdin>:1) with 2 output partitions (allowLocal=false) 
15/07/28 10:11:42 INFO DAGScheduler: Final stage: ResultStage 0(collect at <stdin>:1) 
15/07/28 10:11:42 INFO DAGScheduler: Parents of final stage: List() 
15/07/28 10:11:42 INFO DAGScheduler: Missing parents: List() 
15/07/28 10:11:42 INFO DAGScheduler: Submitting ResultStage 0 (ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:396), which has no missing parents 
15/07/28 10:11:42 INFO TaskSchedulerImpl: Cancelling stage 0 
15/07/28 10:11:42 INFO DAGScheduler: ResultStage 0 (collect at <stdin>:1) failed in Unknown s 
15/07/28 10:11:42 INFO DAGScheduler: Job 0 failed: collect at <stdin>:1, took 0,058933 s 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/spark/spark/python/pyspark/rdd.py", line 745, in collect 
    port = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 
    File "/opt/spark/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__ 
    File "/opt/spark/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value 
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: org.apache.spark.SparkException: Job aborted due to stage failure: Task serialization failed: java.lang.reflect.InvocationTargetException 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
org.apache.spark.io.CompressionCodec$.createCodec(CompressionCodec.scala:68) 
org.apache.spark.io.CompressionCodec$.createCodec(CompressionCodec.scala:60) 
org.apache.spark.broadcast.TorrentBroadcast.org$apache$spark$broadcast$TorrentBroadcast$$setConf(TorrentBroadcast.scala:73) 
org.apache.spark.broadcast.TorrentBroadcast.<init>(TorrentBroadcast.scala:80) 
org.apache.spark.broadcast.TorrentBroadcastFactory.newBroadcast(TorrentBroadcastFactory.scala:34) 
org.apache.spark.broadcast.BroadcastManager.newBroadcast(BroadcastManager.scala:62) 
org.apache.spark.SparkContext.broadcast(SparkContext.scala:1289) 
org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitMissingTasks(DAGScheduler.scala:874) 
org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitStage(DAGScheduler.scala:815) 
org.apache.spark.scheduler.DAGScheduler.handleJobSubmitted(DAGScheduler.scala:799) 
org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1419) 
org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1411) 
org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) 

    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1266) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1257) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1256) 
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47) 
    at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1256) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitMissingTasks(DAGScheduler.scala:884) 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$submitStage(DAGScheduler.scala:815) 
    at org.apache.spark.scheduler.DAGScheduler.handleJobSubmitted(DAGScheduler.scala:799) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1419) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1411) 
    at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) 

Найдено этот вопрос в отношении того же поведения: https://issues.apache.org/jira/browse/SPARK-9089

Любой идею, что происходит? Или что мы можем попробовать?

ответ

1

Как указано в вопросе:

Мы столкнулись с этой же проблемой, и после того, как рытье и иметь много удачи мы нашли происхождение вопроса.

Это вызвано тем, что мгновенная-ява извлекает родную библиотеку java.io.tempdir (/ TMP по умолчанию) и устанавливает исполняемый флаг извлеченного файла . Если вы устанавливаете/tmp с опцией «noexec», snappy-java не сможет установить исполняемый флаг и будет вызывать исключение . См. Код SnappyLoader.java.

Мы исправили проблему, не используя опцию «noexec» при монтаже /tmp.

Sean Owen Если вы хотите, чтобы воспроизвести проблему, смонтировать/TMP с «поехес» вариант или установить java.io.tempdir в каталог, установленный с «поехес».

Может быть, было бы лучше, что Спарк устанавливает свойство org.xerial.snappy.tempdir к значению spark.local.dir, но ничего не мешает что spark.local.dir может быть установлен как «поехес» также ,

Удаление noexec с /tmp точка крепления исправлена.

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