Sürücünün python sürümünü kıvılcım olarak nasıl ayarlarım?


88

Spark 1.4.0-rc2 kullanıyorum, böylece python 3'ü spark ile kullanabiliyorum. Ben eklerseniz export PYSPARK_PYTHON=python3benim Bashrc dosyasına, ben yerel modda tek başına bir programı çalıştırmak istiyorsanız, bir hata alıyorum, ancak etkileşimli piton 3. ile kıvılcım çalıştırabilirsiniz:

Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions

Sürücü için python sürümünü nasıl belirtebilirim? Ayar export PYSPARK_DRIVER_PYTHON=python3işe yaramadı.

Yanıtlar:


34

Başlattığınız bağımsız projenin Python 3 ile başlatıldığından emin olmanız gerekir. Bağımsız programınızı spark-submit aracılığıyla gönderiyorsanız, o zaman iyi çalışmalıdır, ancak eğer onu python ile başlatıyorsanız, başlamak için python3 kullandığınızdan emin olun. uygulamanız.

Ayrıca, env değişkenlerinizi içinde ayarladığınızdan emin olun ./conf/spark-env.sh(eğer mevcut değilse spark-env.sh.template, temel olarak kullanabilirsiniz .)


3
@Kevin - Ben de aynı sorunu yaşıyorum, yaptığın değişiklikle ilgili çözümünüzü spark-evn.sh'de yayınlar mısınız?
Dev Patel

1
Bu, PATH değişkenlerini değiştirmek yerine Spark'a teşvik etmenin doğru yoludur .bashrc.
CᴴᴀZ

Neden python 3 kullanılıyor @Holden?
jerzy

Spark python2'de çalışabilir, ancak bu durumda kullanıcı sorusunda python3 belirtmeye çalışıyordu. Hangi Python sürümü olursa olsun, tutarlı bir şekilde yapılması gerekir.
Holden

83

Python3'e PYSPARK_PYTHON=python3ve PYSPARK_DRIVER_PYTHON=python3her ikisini ayarlamak benim için çalışıyor. Bunu .bashrc dosyamda dışa aktar kullanarak yaptım. Sonunda, oluşturduğum değişkenler bunlar:

export SPARK_HOME="$HOME/Downloads/spark-1.4.0-bin-hadoop2.4"
export IPYTHON=1
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=ipython3
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

Ipython3 not defterinden çalışmasını sağlamak için bu öğreticiyi de takip ettim: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/


5
Spark 2.1'de "IPYTHON = 1" seçeneğiyle ilgili bir hata var. Hata mesajları "IPYTHON ve IPYTHON_OPTS, Spark 2.0+ içinde kaldırılır. Bunları ortamdan kaldırın ve bunun yerine PYSPARK_DRIVER_PYTHON ve PYSPARK_DRIVER_PYTHON_OPTS ayarlayın."
notilas

1
PYSPARK_PYTHON=python3işçilerin Python sürümünü ayarlar, değil mi?
Joe

PyCharm'dan çalıştırılıyorsa, PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3Çalıştır> Yapılandırmaları Düzenle> {your_run_config}> Ortam Değişkenleri'ne ekleyin. Bunları tüm çalıştırma yapılandırmaları için varsayılan yapmak için, Çalıştır> Yapılandırmaları Düzenle> Şablonlar
MisterEd

28

Benim durumumda yardımcı oldu:

import os

os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"

1
bu, PYSPARK_DRIVER_PYTHON'u PYSPARK_PYTHON ile aynı değere ayarladıktan sonra benim için çalışıyor.
buxizhizhoum

12

./conf/spark-env.shDosyada uygun ortam değişkenlerini ayarlayarak, sürücü için Python sürümünü belirtebilirsiniz . Zaten mevcut değilse spark-env.sh.template, birçok başka değişkeni de içeren sağlanan dosyayı kullanabilirsiniz .

spark-env.shİlgili Python ortam değişkenlerini ayarlamak için basit bir dosya örneği :

#!/usr/bin/env bash

# This file is sourced when running various Spark programs.
export PYSPARK_PYTHON=/usr/bin/python3       
export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython

Bu durumda, çalışanlar / uygulayıcılar tarafından kullanılan Python sürümünü Python3'e ve Python'un sürücü sürümünü de daha iyi bir kabuğun içinde çalışması için iPython'a ayarlar.

Halihazırda bir spark-env.shdosyanız yoksa ve başka değişkenler ayarlamanız gerekmiyorsa, bu, ilgili python ikili dosyalarına giden yolların doğru olduğunu varsayarak (ile doğrulayın which) istediğinizi yapmalıdır . Benzer bir sorun yaşadım ve bu sorunu çözdü.


Bu dosya nasıl çalıştırılır?
Volatil3

Spark-env.sh.template'i spark-env.sh olarak yeniden adlandırmam ve ardından dışa aktarım PYSPARK_PYTHON = / usr / local / bin / python3 export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python3 dosyasının kuyruğuna eklemem gerekiyordu. Python3'ümün hangi python3 üzerinden nerede olduğunu bulmam gerekiyordu
danivicario

10

Spark'ı daha büyük bir kuruluşta çalıştırıyorsanız ve /spark-env.sh dosyasını güncelleyemiyorsanız, ortam değişkenlerini dışa aktarmak işe yaramayabilir.

--confİşi çalışma zamanında gönderirken seçenek aracılığıyla belirli Spark ayarlarını ekleyebilirsiniz .

pyspark --master yarn --[other settings]\ 
  --conf "spark.pyspark.python=/your/python/loc/bin/python"\ 
  --conf "spark.pyspark.driver.python=/your/python/loc/bin/python"

9

Az önce aynı sorunla karşılaştım ve bunlar Python sürümünü sağlamak için izlediğim adımlar. PySpark işlerimi 2.6 yerine Python 2.7 ile çalıştırmak istedim.

  1. $SPARK_HOMEİşaret ettiği klasöre gidin (benim durumumda /home/cloudera/spark-2.1.0-bin-hadoop2.7/)

  2. Klasörün altında confadında bir dosya var spark-env.sh. Adlı bir dosyanız varsa, dosyayı adlı spark-env.sh.templateyeni bir dosyaya kopyalamanız gerekecektir spark-env.sh.

  3. Dosyayı düzenleyin ve sonraki üç satırı yazın

    dışa aktar PYSPARK_PYTHON = / usr / local / bin / python2.7

    dışa aktar PYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7

    dışa aktar SPARK_YARN_USER_ENV = "PYSPARK_PYTHON = / usr / local / bin / python2.7"

  4. Kaydedin ve uygulamanızı tekrar başlatın :)

Bu şekilde, yeni bir Spark bağımsız sürümünü indirirseniz, PySpark'ı çalıştırmak istediğiniz Python sürümünü ayarlayabilirsiniz.


2
Önerinin cpdosyaya spark-env.sh.templateyeni olduğunu spark-env.shve ardından şablonun adını ve içeriğini değiştirmek yerine yeni dosyayı değiştirin. Şablonun referans olarak kalması gerekiyor.
et_l

@et_l Haklısınız, yorumunuzu dikkate alarak cevapta küçük bir değişiklik yaptım, teşekkürler!
selknam

5

Aynı hata mesajıyla karşılaştım ve yukarıda belirtilen üç yolu denedim. Sonuçları diğerlerine tamamlayıcı bir referans olarak listeledim.

  1. İçindeki PYTHON_SPARKve PYTHON_DRIVER_SPARKdeğerini değiştir spark-env.shbenim için çalışmıyor.
  2. Python komut dosyası içindeki değeri değiştirmek os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"benim için çalışmıyor.
  3. ~/.bashrcBir cazibe gibi işlerdeki değeri değiştirin ~

bir Saat harcadıktan sonra yorumunuz saf altın. Teşekkürler
cheapcoder

Çok teşekkür ederim. Bir çok çözümü test ettim. Seninki çok iyi çalıştı.
Muser

3

IPython'da çalıştırıyordum (bu bağlantıda Jacek Wasilewski tarafından anlatıldığı gibi ) ve bu istisnayı alıyordum; Eklenen PYSPARK_PYTHONipython çekirdek dosyası ve çalıştırmak için kullanılır jupyter notebook ve başladı işlemeye.

vi  ~/.ipython/kernels/pyspark/kernel.json

{
 "display_name": "pySpark (Spark 1.4.0)",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "IPython.kernel",
  "--profile=pyspark",
  "-f",
  "{connection_file}"
 ],

 "env": {
  "SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/",
  "PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1
.6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip",
  "PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py
",
  "PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell",
  "PYSPARK_DRIVER_PYTHON":"ipython2",
   "PYSPARK_PYTHON": "python2"
 }

2

Ben aynı sorun var tek başına kıvılcım içinde pencerelerden . Düzeltme sürümüm şöyle: Ortam değişkenlerimi aşağıdaki gibi ayarladım

PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark

Bu ayarla pyspark'ta bir Eylem gerçekleştirdim ve aşağıdaki istisnayı aldım:

Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.
Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.

Spark- worker'in hangi python sürümünü kullandığını kontrol etmek için cmd komut isteminde aşağıdakileri tıklayın .

python --version
Python 3.6.3

bu bana Python 3.6.3'ü gösterdi . Yani açıkça kıvılcım işçi v3.6.3 olan system python kullanıyor.

Şimdi, kıvılcım sürücümü Jupyter'ı çalıştıracak şekilde ayarladığımda, PYSPARK_DRIVER_PYTHON=jupyterjupyter'ın kullandığı python sürümünü kontrol etmem gerekiyor.

Bunu yapmak için Anaconda İstemini açın ve

python --version
Python 3.5.X :: Anaconda, Inc.

İşte jupyter piton kullanıyor var v3.5.x . Bu sürümü herhangi bir Defterde de kontrol edebilirsiniz (Yardım-> Hakkında).

Şimdi sürüm jupyter piton güncellemeniz gerekir v3.6.6 . Bunu yapmak için Anaconda İstemi'ni açın ve

conda search python

Bu size Anaconda'daki mevcut python sürümlerinin bir listesini verecektir. İstediğinizi ile yükleyin

conda install python = 3.6.3

Şimdi aynı sürüm 3.6.3'ün her iki Python kurulumuna sahibim. Spark uyumlu olmamalı ve Spark-sürücüsünde bir Action çalıştırdığımda olmadı. İstisna ortadan kalktı. Mutlu kodlamalar ...


1

Mevcut görev için yalnızca python sürümünü değiştirmek istiyorsanız, aşağıdaki pyspark start komutunu kullanabilirsiniz:

    PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..

1

Lütfen aşağıdaki parçaya bakın:

#setting environment variable for pyspark in linux||ubuntu
#goto --- /usr/local/spark/conf
#create a new file named spark-env.sh copy all content of spark-env.sh.template to it
#then add below lines to it, with path to python

PYSPARK_PYTHON="/usr/bin/python3"
PYSPARK_DRIVER_PYTHON="/usr/bin/python3"
PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser"
#i was running python 3.6 ||run - 'which python' in terminal to find the path of python

Lütfen göndermeden önce şablonları kontrol edin.
Deepesh Rehi

0

Aşağıdaki ortamı kullanıyorum

? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0

ve aşağıdaki takma adlar benim için iyi çalışıyor

alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"    
alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"

Defterde ortamı şu şekilde kuruyorum

from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()

0

Hata

"İstisna: İşçideki Python, sürücü 2.7'den farklı 2.6 sürümüne sahiptir, PySpark farklı alt sürümlerle çalışamaz". 

Düzeltme (Cloudera ortamı için)

  • Bu dosyayı düzenleyin: /opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh

  • Şu satırları ekleyin:

    export PYSPARK_PYTHON=/usr/bin/python
    export PYSPARK_DRIVER_PYTHON=python
    

0

Bugün işte bununla karşılaştım. Bir yönetici, Python 2.7'yi PYSPARK_PYTHONve PYSPARK_DRIVER_PYTHONiçinde olduğu gibi sabit kodlamanın akıllıca olduğunu düşündü $SPARK_HOME/conf/spark-env.sh. Bunun, diğer python sürümlerini veya ortamlarını (işlerimizin>% 90'ı) kullanan tüm işlerimizi bozduğunu söylemeye gerek yok. @PhillipStich, bizim durumumuzda olduğu gibi bu dosya için her zaman yazma iznine sahip olmayabileceğinizi doğru bir şekilde belirtiyor. spark-submitÇağrıda konfigürasyonu ayarlamak bir seçenek iken, başka bir alternatif (iplik / küme modunda çalışırken) SPARK_CONF_DIRortam değişkenini başka bir konfigürasyon komut dosyasını gösterecek şekilde ayarlamaktır. Orada PYSPARK_PYTHON'unuzu ve ihtiyacınız olabilecek diğer seçenekleri ayarlayabilirsiniz. Bir şablon github'daki spark-env.sh kaynak kodunda bulunabilir .


0

Benim durumumda (Ubuntu 18.04), bu kodu terminalde çalıştırdım:

sudo vim ~/.bashrc

ve sonra SPARK_HOMEaşağıdaki gibi düzenlenmiştir :

export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

Bunu yaptığımda, içinde yüklediğim pakete SPARK_HOMEbaşvuracağım .pysparksite-package

Nasıl kullanılacağını öğrenmek vimiçin bu bağlantıya gidin .


0

Çalıştırmak:

ls -l /usr/local/bin/python*

Bu örnekteki ilk satır python3 sembolik bağını göstermektedir. Varsayılan python sembolik bağlantısı olarak ayarlamak için aşağıdakileri çalıştırın:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

ardından kabuğunuzu yeniden yükleyin.


0

Ben de aynı sorunu yaşadım, sanal ortamımı etkinleştirmeyi unuttum. Dışarıda zihinsel bir boşluk olan herkes için.


0

Mac'te çalışıyorsanız, aşağıdaki komutları kullanın

export SPARK_HOME=`brew info apache-spark | grep /usr | tail -n 1 | cut -f 1 -d " "`/libexec
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH

export HADOOP_HOME=`brew info hadoop | grep /usr | head -n 1 | cut -f 1 -d " "`/libexec
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH
export PYSPARK_PYTHON=python3

Başka bir işletim sistemi kullanıyorsanız, şu bağlantıyı kontrol edin: https://github.com/GalvanizeDataScience/spark-install

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.