2016-02-05 14 views
7

क्लाइंट मोड में pyspark लॉन्च करना। bin/pyspark --master yarn-client --num-executors 60 खोल पर आयात numpy ठीक हो जाता है लेकिन यह kmeans में विफल रहता है। किसी भी तरह निष्पादकों के पास numpy स्थापित नहीं है मेरी भावना है। श्रमिकों को नुकीले के बारे में जानने के लिए कहीं भी मुझे कोई अच्छा समाधान नहीं मिला। मैंने PYSPARK_PYTHON को सेट करने का प्रयास किया लेकिन यह भी काम नहीं करता था।आयात त्रुटि: स्पार्क श्रमिकों पर numpy नामक कोई मॉड्यूल

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

स्टैक ट्रेस

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

क्या आप उन मशीनों तक पहुंच सकते हैं जो श्रमिक चल रहे हैं और जांचें कि क्या आपका 'PYSPARK_PYTHON' वास्तव में खराब है या नहीं? –

+1

इसके अलावा, सावधानी के रूप में, सुनिश्चित करें कि पीई फ़ाइल को "numpy" नाम नहीं दिया गया है। – abe

+0

@ स्नूजर दुर्भाग्यवश मैं इस धागा सेटअप में श्रमिकों तक नहीं पहुंच सकता। – ajkl

उत्तर

11

यार्न ग्राहक मोड में स्पार्क का उपयोग करने के लिए आपको मशीन जिस पर यार्न निष्पादकों शुरू होता है करने के लिए किसी भी निर्भरता स्थापित करने के लिए की आवश्यकता होगी। यह काम करने का यही एकमात्र निश्चित तरीका है।

यार्न क्लस्टर मोड के साथ स्पार्क का उपयोग करना एक अलग कहानी है। आप स्पार्क-सबमिट के साथ पाइथन निर्भरताओं को वितरित कर सकते हैं।

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

हालांकि, numpy के साथ स्थिति एक ही बात करता है कि यह इतनी तेजी से जटिल है: तथ्य यह है कि जिस तरह से है कि यह स्थापित किया गया है की सी में बड़े कार्य करने करता है, तो आप में सक्षम नहीं होगा इस फैशन में numpy वितरित करने के लिए।

+0

इसलिए यदि यह सही समझता है, तो प्रत्येक निष्पादक पर numpy स्थापित किया जाना चाहिए और वितरित नहीं किया जा सकता है? – ajkl

+3

दुर्भाग्य से हाँ। मेरी टीम और मुझे इस सटीक समस्या से काट दिया गया है। – dayman

+0

धन्यवाद @dayman, यह मदद करता है! मैं इसे स्केल में लागू करने के लिए चारों ओर मिल गया। मेरी इच्छा है कि इस pyspark मुद्दे के लिए एक बेहतर समाधान है हालांकि। – ajkl

0

मुझे एक ही समस्या थी, लेकिन मुझे नहीं लगता कि आपको PYSPARK_PYTHON सेट करने की आवश्यकता है, इसके बजाय केवल कार्यकर्ता मशीन (apt-get या yum) पर numpy इंस्टॉल करें। त्रुटि आपको यह भी बताएगी कि किस मशीन पर आयात गुम था।

1
sudo pip install numpy 

ऐसा लगता है कि "सूडो" के साथ numpy के पुनः स्थापित करें, और यह मॉड्यूल पाया जा सकता है।

+0

क्यों पाइप काम करता है और apt-get w/pyspark नहीं है? –

+0

यह सुडो पाइप इंस्टॉल शायद एक हैक है, लेकिन यह काम किया। निश्चित नहीं है कि PYSPARK_PYTHON मामलों का उपयोग करके नीचे दिया गया समाधान, ऐसा लगता है कि मेरे नोड्स में केवल पाइथन की एक ही स्थापना है। – bhomass

संबंधित मुद्दे