web-dev-qa-db-fra.com

ImportError: Aucun module nommé numpy sur les ouvriers d'étincelle

Lancer pyspark en mode client. bin/pyspark --master yarn-client --num-executors 60 Le numéro d'importation sur le shell va bien mais il échoue dans les kmeans. D'une certaine manière, les exécuteurs n'ont pas installé numpy, c'est mon sentiment. Je n'ai trouvé aucune bonne solution pour informer les travailleurs sur Numpy. J'ai essayé de définir PYSPARK_PYTHON mais cela n'a pas fonctionné non plus.

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

Trace de la pile

 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

Pour utiliser Spark en mode client Yarn, vous devez installer toutes les dépendances des ordinateurs sur lesquels Yarn lance les exécuteurs. C'est le seul moyen infaillible de faire ce travail.

L'utilisation du mode cluster Spark with Yarn est une autre histoire. Vous pouvez distribuer des dépendances python avec spark-submit. 

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

Cependant, la situation avec numpy est compliquée par la même chose qui le rend si rapide: le fait de soulever des objets lourds en C. En raison de la manière dont il est installé, vous ne pourrez pas distribuer numpy de cette manière.

15
dayman
Sudo pip install numpy

il semble ré-installer numpy avec "Sudo", et ce module pourrait être trouvé.

1
evan912

numpy n'est pas installé sur les ordinateurs de travail (virtuels). Si vous utilisez anaconda, il est très pratique de télécharger de telles dépendances Python lors du déploiement de l'application en mode cluster. (Il n’est donc pas nécessaire d’installer numpy ou d’autres modules sur chaque machine, mais ils doivent être insérés dans votre anaconda.) scénario.

 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 copie anaconda.Zip du chemin d'accès hdfs à chaque travailleur et l'utilise avec pthon-env/anaconda/bin/python pour exécuter des tâches.

Reportez-vous à Exécution de PySpark avec Virtualenv peut fournir des informations supplémentaires.

1
sincosmos

J'ai eu le même problème. Essayez d’installer numpy sur pip3 si vous utilisez Python3.

pip3 install numpy

0
shashank rai

Vous devez être conscient du fait que numpy doit être installé sur chaque utilisateur, et même sur le maître lui-même (en fonction de l'emplacement de vos composants).

Assurez-vous également de lancer la commande pip install numpy à partir d'un compte root (Sudo ne suffit pas) après avoir forcé umask à 022 (umask 022) afin qu'il cascade les droits sur l'utilisateur Spark (ou Zeppelin).

0
Mehdi LAMRANI

J'avais un problème similaire mais je ne pense pas que vous deviez définir PYSPARK_PYTHON mais simplement installer numpy sur l'ordinateur de travail (apt-get ou yum). L'erreur vous indiquera également sur quelle machine l'importation était manquante.

0
Somum