2016-02-05 6 views
7

Starten von "pyspark" im Client-Modus. bin/pyspark --master yarn-client --num-executors 60 Der Import von Numpy auf der Shell funktioniert gut, aber es schlägt in den Kmeans fehl. Irgendwie haben die Executoren keine Nummern installiert, ist mein Gefühl. Ich habe nirgendwo eine gute Lösung gefunden, um die Arbeiter über das Numpfige wissen zu lassen. Ich habe versucht, PYSPARK_PYTHON einzustellen, aber das hat auch nicht funktioniert.ImportError: Kein Modul mit dem Namen "numpy" bei Funkenarbeitern

import numpy 
features = numpy.load(open("combined_features.npz")) 
features = features['arr_0'] 
features.shape 
features_rdd = sc.parallelize(features, 5000) 
from pyspark.mllib.clustering import KMeans, KMeansModel 

from numpy import array 
from math import sqrt 
clusters = KMeans.train(features_rdd, 2, maxIterations=10, runs=10, initializationMode="random") 

Stapelüberwachung

org.apache.spark.api.python.PythonException: Traceback (most recent call last): 
    File "/hadoop/3/scratch/local/usercache/ajkale/appcache/application_1451301880705_525011/container_1451301880705_525011_01_000011/pyspark.zip/pyspark/worker.py", line 98, in main 
    command = pickleSer._read_with_length(infile) 
    File "/hadoop/3/scratch/local/usercache/ajkale/appcache/application_1451301880705_525011/container_1451301880705_525011_01_000011/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length 
    return self.loads(obj) 
    File "/hadoop/3/scratch/local/usercache/ajkale/appcache/application_1451301880705_525011/container_1451301880705_525011_01_000011/pyspark.zip/pyspark/serializers.py", line 422, in loads 
    return pickle.loads(obj) 
    File "/hadoop/3/scratch/local/usercache/ajkale/appcache/application_1451301880705_525011/container_1451301880705_525011_01_000011/pyspark.zip/pyspark/mllib/__init__.py", line 25, in <module> 

ImportError: No module named numpy 

     at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:166) 
     at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:207) 
     at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:125) 
     at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:264) 
     at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
     at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:69) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:262) 
     at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:99) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:264) 
     at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:264) 
     at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) 
     at org.apache.spark.scheduler.Task.run(Task.scala:88) 
     at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
     enter code here 
+1

Können Sie auf die Maschinen zugreifen, auf denen die Worker laufen, und prüfen, ob Ihr 'PYSPARK_PYTHON 'wirklich numpig ist? –

+1

Stellen Sie auch sicher, dass die Py-Datei selbst nicht "numpy" heißt. – abe

+0

@Snoozer leider kann ich bei diesem Garnaufbau nicht auf die Arbeiter zugreifen. – ajkl

Antwort

11

Um Spark in Yarn-Client-Modus zu verwenden, werden Sie alle Abhängigkeiten zu den Maschinen installieren müssen, auf dem Garn die Testamentsvollstrecker beginnt. Das ist der einzige todsichere Weg, dies zum Funktionieren zu bringen.

Verwenden von Spark mit Yarn Cluster-Modus ist eine andere Geschichte. Sie können Python-Abhängigkeiten mit spark-submit verteilen.

spark-submit --master yarn-cluster my_script.py --py-files my_dependency.zip 

jedoch die Situation mit numpy durch die gleiche Sache kompliziert ist, dass es so schnell macht: die Tatsache, dass die schwere Arbeit in C tut Wegen der Art und Weise, dass es installiert ist, werden Sie nicht in der Lage sein, auf diese Weise numpig zu verteilen. Auch

+0

also, wenn es richtig verstanden wird, muss numpy auf jedem Executor installiert werden und kann nicht verteilt werden? – ajkl

+3

Leider ja. Mein Team und ich wurden von genau diesem Problem gebissen. – dayman

+0

Dank @dayman, das hilft! Ich habe es geschafft, es in Scala umzusetzen. Ich wünschte, es gibt eine bessere Lösung für dieses Pyspark-Problem. – ajkl

0

Ich hatte ähnliches Problem, aber ich denke nicht, dass Sie PYSPARK_PYTHON stattdessen nur installieren müssen numpy auf der Arbeitsmaschine (apt-get oder yum). Der Fehler sagt Ihnen auch, auf welcher Maschine der Import fehlte.

1
sudo pip install numpy 

es scheint Neuinstallation von numpy mit "sudo", und dieses Modul könnte gefunden werden.

+0

Warum pip funktioniert und apt-get nicht w/pyspark? –

+0

dieser Sudo Pip Installation ist wahrscheinlich ein Hack, aber es hat funktioniert. Nicht sicher, warum die Lösung unter PYSPARK_PYTHON wichtig ist, es scheint, dass meine Knoten nur eine einzige Installation von Python haben. – bhomass

Verwandte Themen