問題:私のローカルマシンからspark-submitスクリプトをマシンのクラスタに実行しようとしています。クラスタによって行われる作業はnumpyを使用します。私はセットアップにnumpyのと同様に、私は私のプロジェクトや他のさまざまなライブラリで使用するプライベートレポが含まvirtualenvのを持っている私のローカル環境では :pysparkジョブでvirtualenvを配送して使用する
ImportError:
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all
files not under version control). Otherwise reinstall numpy.
Original error was: cannot import name multiarray
詳細:私は現在、次のエラーを取得します。私はzipファイル(lib/libs.zip)をvenv/lib/site-packagesのsite-packagesディレクトリから作成しました。ここで、 'venv'は私の仮想環境です。このzipをリモートノードに発送します。このように火花提出ルックスを実施するための私のシェルスクリプト:
$SPARK_HOME/bin/spark-submit \
--deploy-mode cluster \
--master yarn \
--conf spark.pyspark.virtualenv.enabled=true \
--conf spark.pyspark.virtualenv.type=native \
--conf spark.pyspark.virtualenv.requirements=${parent}/requirements.txt \
--conf spark.pyspark.virtualenv.bin.path=${parent}/venv \
--py-files "${parent}/lib/libs.zip" \
--num-executors 1 \
--executor-cores 2 \
--executor-memory 2G \
--driver-memory 2G \
$parent/src/features/pi.py
は、私はまた、リモート・ノード上のpython 2.7がインストール含み/usr/local/bin/python2.7フォルダがあることを知っています。
のでspark-env.sh私のconf /に私は次のように設定しています
export PYSPARK_PYTHON=/usr/local/bin/python2.7
export PYSPARK_DRIVER_PYTHON=/usr/local/bin/python2.7
私はスクリプトを実行すると、私は上記のエラーを取得します。私がinstalled_distributionsをスクリーン印刷すると、長さがゼロのリスト[]が得られます。私の個人的な図書館も正しく輸入されています(私には実際に私のlibs.zipサイトパッケージにアクセスしています)。マイpi.pyファイルには、次のようになります。
from myprivatelibrary.bigData.spark import spark_context
spark = spark_context()
import numpy as np
spark.parallelize(range(1, 10)).map(lambda x: np.__version__).collect()
期待/ MY THOUGHTSを: 私はnumpyのは、私の地元のvirtualenvの中で正しく動作します知っているので、これは正しく、特にnumpyのインポートすることを期待しています。リモートノードのvirtualenvにインストールされているPythonのバージョンを実際に使用していないためです。私の質問はまず、これを修正するにはどうすればよいのですか?2番目の方法は、手動でインストールされ、現在そのマシンに座っているpythonの代わりに、リモートノードにvirtualenvをインストールしたpythonを使用する方法ですか?私はこれについていくつかの執筆を見てきましたが、率直に言って、よく書かれていません。
ありがとうございました。私にとって2つの課題が最初にあります。リロケータブルな仮想マシンは、基本的に同じ/類似の仕様のマシン上で生成する必要があります。第2に、エグゼキュータとの間で複数のテンティング状況に陥っているため、非仮想的なアプローチが私の隔離を破壊してしまいます。おそらく、私はターゲットのエグゼキュータスペックに等しいVMに私のレポを入れて、次にvenvをビルドする必要がありますか?また、ブログの投稿では、--py-filesの代わりにアーカイブフラグを使用しています。古いバージョンであるかどうか疑問です。 –
上記の編集を参照してください... –