2017-04-07 5 views
0

zuzugreifen, wenn auf einem Funken Cluster eine Python-Anwendung ausführen Ich laufe in folgenden Ausnahme:lokale python.exe

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 
Setting default log level to "WARN". 
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 
17/04/07 10:57:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
[Stage 0:>               (0 + 2)/2]17/04/07 10:57:07 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 192.168.2.113, executor 0): java.io.IOException: Cannot run program "C:\Users\<local-user>\Anaconda2\python.exe": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
    at org.apache.spark.api.python.PythonWorkerFactory.createSimpleWorker(PythonWorkerFactory.scala:120) 
    at org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:67) 
    at org.apache.spark.SparkEnv.createPythonWorker(SparkEnv.scala:116) 
    at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:128) 
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 
    at org.apache.spark.scheduler.Task.run(Task.scala:99) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:137) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    ... 13 more 

17/04/07 10:57:07 ERROR TaskSetManager: Task 0 in stage 0.0 failed 4 times; aborting job 
Traceback (most recent call last): 
    File "<redacted-absolute-path>.py", line 49, in <module> 
    eco_rdd 
    File "C:\spark\python\pyspark\rdd.py", line 2139, in zipWithIndex 
    nums = self.mapPartitions(lambda it: [sum(1 for i in it)]).collect() 
    File "C:\spark\python\pyspark\rdd.py", line 809, in collect 
    port = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 
    File "C:\spark\python\lib\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 1133, in __call__ 
    File "C:\spark\python\pyspark\sql\utils.py", line 63, in deco 
    return f(*a, **kw) 
    File "C:\spark\python\lib\py4j-0.10.4-src.zip\py4j\protocol.py", line 319, 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 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 6, 192.168.2.113, executor 0): java.io.IOException: Cannot run program "C:\Users\<local-user>\Anaconda2\python.exe": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
    at org.apache.spark.api.python.PythonWorkerFactory.createSimpleWorker(PythonWorkerFactory.scala:120) 
    at org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:67) 
    at org.apache.spark.SparkEnv.createPythonWorker(SparkEnv.scala:116) 
    at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:128) 
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 
    at org.apache.spark.scheduler.Task.run(Task.scala:99) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:137) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    ... 13 more 

Driver stacktrace: 
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1435) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1423) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1422) 
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) 
    at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1422) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:802) 
    at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:802) 
    at scala.Option.foreach(Option.scala:257) 
    at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:802) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1650) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1605) 
    at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1594) 
    at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) 
    at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:628) 
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1918) 
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1931) 
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1944) 
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1958) 
    at org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:935) 
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) 
    at org.apache.spark.rdd.RDD.withScope(RDD.scala:362) 
    at org.apache.spark.rdd.RDD.collect(RDD.scala:934) 
    at org.apache.spark.api.python.PythonRDD$.collectAndServe(PythonRDD.scala:453) 
    at org.apache.spark.api.python.PythonRDD.collectAndServe(PythonRDD.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 
    at py4j.Gateway.invoke(Gateway.java:280) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:214) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: Cannot run program "C:\Users\<local-user>\Anaconda2\python.exe": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
    at org.apache.spark.api.python.PythonWorkerFactory.createSimpleWorker(PythonWorkerFactory.scala:120) 
    at org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:67) 
    at org.apache.spark.SparkEnv.createPythonWorker(SparkEnv.scala:116) 
    at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:128) 
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 
    at org.apache.spark.scheduler.Task.run(Task.scala:99) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    ... 1 more 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:137) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    ... 13 more 

Irgendwie ist der Cluster (auf einem Remote-PC im gleichen Netzwerk) versucht Zugriff auf dem lokalen python (ist, dass auf meiner lokale Workstation installiert, die den Fahrer ausführt):

Caused by: java.io.IOException: Cannot run program "C:\Users\<local-user>\Anaconda2\python.exe": CreateProcess error=2, The system cannot find the file specified 
  • Funken 2.1.0
  • die Funkenstandalone Cluster läuft auf 10 Windows-
  • Die Workstation auf Windows 7 ausgeführt wird
  • zum Cluster anschließen und Aufgaben mit spark-shell (interaktiv) Ausführung funktioniert ohne Probleme
  • den Cluster anschließen und Ausführen von Aufgaben mit pyspark (interaktiv) Werken ohne Probleme verursacht
  • von PyCharm Laufen direkt die Ausnahme oben
  • spark-submit mit einem ähnlichen Problem verursacht execute (=> versucht, meinen lokalen python zuzugreifen)
  • verwendet findspark
  • Das PYSPARK_PYTHON und PYSPARK_DRIVER_PYTHON Umgebungsvariablen gesetzt ist
  • Python auf Cluster und Workstation: Python 2.7.13 :: Anaconda custom (64-Bit)

Danke im Voraus für Ihre Hilfe

+0

Nur eine wilde Idee - haben Sie versucht, 'PYSPARK_PYTHON' im Executor conf zu erzwingen, dh' spark.executorEnv.PYSPARK_PYTHON C: \ some \ path \ python.exe' in Ihrer 'spark-defaults.conf' hinzuzufügen (oder in der Kommandozeile über '--conf')? –

+0

Ich habe versucht, diese Konfiguration auf verschiedene Arten einzustellen, aber es ist der gleiche Fehler aufgetreten. In einigen Fällen hat es versucht, den lokalen Treiber mit der entfernten Python-Instanz auszuführen (= eine andere Ausnahme als diese). Sie müssen diese Konfigurationen auf der lokalen Arbeitsstation richtig einstellen? Ich habe versucht, es sowohl lokal als auch remote zu setzen, um sicher zu gehen. – TheJP

+0

Beide env-Variablen werden vom Dienstprogramm 'spark-submit' verwendet. Theoretisch sollte der Wert von "PYSPARK_PYTHON" von den Executoren verwendet werden und sich auf eine Python-Installation auf dem Executor-Rechner beziehen. und der Wert von 'PYSPARK_DRIVER_PYTHON' (wenn vorhanden, ansonsten standardmäßig auf den PYSPARK_PYTHON-Wert) sollte vom Treiber verwendet werden und sich auf eine Python-Installation auf dem Computer des Treibers * beziehen (die sich von der' spark-submit'-Maschine unterscheiden kann) - Zum Beispiel im 'Garn-Cluster'-Modus!) * –

Antwort

0

Also habe ich jetzt eine Lösung für mein Problem gefunden. Für mein Setup war das Problem die Findspark-Bibliothek. Durch das Entfernen konnte ich alle meine Aufgaben im Cluster ausführen.

Wenn Sie ein ähnliches Problem haben, aber es ist nicht findspark verwandt, würde ich Sie auf die Kommentare von Samson Scharrichter oben verweisen.

Verwandte Themen