webentwicklung-frage-antwort-db.com.de

ImportError: Kein Modul mit dem Namen numpy für Funkenarbeiter

Pyspark wird im Client-Modus gestartet. bin/pyspark --master yarn-client --num-executors 60 Die Importnummer der Shell funktioniert einwandfrei, sie schlägt jedoch in den kmeans fehl. Irgendwie haben die Executoren kein numpy installiert, ist mein Gefühl. Ich habe nirgendwo eine gute Lösung gefunden, um Arbeiter über numpy zu informieren. Ich habe versucht, PYSPARK_PYTHON einzustellen, aber das hat auch nicht funktioniert.

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")

Stapelverfolgung

 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
12
ajkl

Um Spark im Yarn-Client-Modus verwenden zu können, müssen Sie Abhängigkeiten auf den Computern installieren, auf denen Yarn die Executors startet. Das ist der einzige todsichere Weg, um dies zu erreichen.

Die Verwendung 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

Die Situation bei numpy wird jedoch durch dasselbe verkompliziert, das es so schnell macht: Die Tatsache, dass das schwere Anheben in C erfolgt. Aufgrund der Art, wie es installiert wird, können Sie numpy auf diese Weise nicht verteilen.

15
dayman
Sudo pip install numpy

es scheint, als ob "numpy" mit "Sudo" neu installiert wurde und dieses Modul gefunden werden konnte.

1
evan912

numpy ist auf den (virtuellen) Arbeitsmaschinen nicht installiert. Wenn Sie Anaconda verwenden, ist es sehr praktisch, solche Python-Abhängigkeiten hochzuladen, wenn Sie die Anwendung im Cluster-Modus bereitstellen. (Sie müssen also keine numpy oder andere Module auf jeder Maschine installieren, stattdessen müssen Sie diese in Ihrer Anaconda installieren.) . Erstens: Zip Ihrer Anaconda und die Zip-Datei in den Cluster einfügen Skript.

 spark-submit \
 --master yarn \
 --deploy-mode cluster \
 --archives hdfs://Host/path/to/anaconda.Zip#python-env
 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=pthon-env/anaconda/bin/python 
 app_main.py

Yarn kopiert anaconda.Zip aus dem hdfs-Pfad zu jedem Worker und verwendet pthon-env/anaconda/bin/python, um Aufgaben auszuführen.

Siehe PySpark mit Virtualenv ausführen kann weitere Informationen enthalten.

1
sincosmos

Ich hatte das gleiche Problem. Versuchen Sie, numpy auf pip3 zu installieren, wenn Sie Python3 verwenden

pip3 install numpy

0
shashank rai

Sie müssen sich dessen bewusst sein, dass Sie numpy auf jedem einzelnen Arbeiter und sogar auf dem Master selbst installiert haben müssen (abhängig von der Platzierung Ihrer Komponente).

Stellen Sie außerdem sicher, dass Sie den Befehl pip install numpy von einem Root-Konto aus starten (Sudo reicht nicht aus), nachdem Sie umask auf 022 (umask 022) gesetzt haben, damit die Rechte für den Spark- (oder Zeppelin-) Benutzer kaskadieren

0
Mehdi LAMRANI

Ich hatte ein ähnliches Problem, aber ich denke nicht, dass Sie PYSPARK_PYTHON setzen müssen, stattdessen einfach nur Numpy auf dem Worker-Computer (apt-get oder yum) zu installieren. Der Fehler zeigt Ihnen auch an, auf welcher Maschine der Import fehlte.

0
Somum

Was es für mich (auf mac) gelöst hat, war eigentlich diese Anleitung (die auch erklärt, wie man python durch Jupyter Notebooks - https://medium.com/@yajieli/installing-spark-pyspark-on-mac-and-fix-of-om-common-errors-355a9050f735

Auf den Punkt gebracht: (Vorausgesetzt, Sie haben spark with brew install spark)

  1. Finden Sie den SPARK_PATH Mit - brew info Apache-spark
  2. Fügen Sie diese Zeilen zu Ihrem ~/.bash_profile
# Spark and Python
######
export SPARK_PATH=/usr/local/Cellar/Apache-spark/2.4.1
export PYSPARK_DRIVER_PYTHON="jupyter"
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
#For python 3, You have to add the line below or you will get an error
export PYSPARK_PYTHON=python3
alias snotebook='$SPARK_PATH/bin/pyspark --master local[2]'
######
  1. Sie sollten in der Lage sein, Jupyter Notebook Einfach durch Aufrufen von: pyspark zu öffnen.

Und denken Sie daran, Sie müssen nicht Spark Context Einstellen, sondern rufen einfach auf:

sc = SparkContext.getOrCreate()
0
Gal Bracha