Program Tip

Spark에서 드라이버의 Python 버전을 어떻게 설정합니까?

programtip 2020. 10. 26. 08:30
반응형

Spark에서 드라이버의 Python 버전을 어떻게 설정합니까?


스파크와 함께 파이썬 3을 사용할 수 있도록 스파크 1.4.0-rc2를 사용하고 있습니다. export PYSPARK_PYTHON=python3.bashrc 파일에 추가 하면 python 3과 함께 Spark를 대화 형으로 실행할 수 있습니다. 그러나 로컬 모드에서 독립 실행 형 프로그램을 실행하려면 오류가 발생합니다.

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

드라이버의 Python 버전을 어떻게 지정할 수 있습니까? 설정 export PYSPARK_DRIVER_PYTHON=python3이 작동하지 않았습니다.


실행중인 독립 실행 형 프로젝트가 Python 3으로 실행되었는지 확인해야합니다. spark-submit을 통해 독립 실행 형 프로그램을 제출하는 경우 제대로 작동하지만 Python으로 실행하는 경우 python3을 사용하여 시작해야합니다. 당신의 앱.

또한 환경 변수를에서 설정했는지 확인하십시오 ./conf/spark-env.sh(존재하지 않는 경우 spark-env.sh.template기본으로 사용할 수 있음 ).


python3으로 설정 PYSPARK_PYTHON=python3하고 PYSPARK_DRIVER_PYTHON=python3둘 다 나를 위해 작동합니다. 내 .bashrc에서 내보내기를 사용하여이 작업을 수행했습니다. 결국 다음은 내가 만드는 변수입니다.

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 노트북에서 작동하도록이 튜토리얼을 따랐습니다 : http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/


내 경우 도움 :

import os

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

./conf/spark-env.sh파일 에 적절한 환경 변수를 설정하여 드라이버의 Python 버전을 지정할 수 있습니다 . 아직 존재하지 않는 경우 spark-env.sh.template다른 많은 변수도 포함 된 제공된 파일을 사용할 수 있습니다 .

다음은 spark-env.sh관련 Python 환경 변수를 설정 하는 파일 의 간단한 예입니다 .

#!/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

이 경우 작업자 / 실행자가 사용하는 Python 버전을 Python3으로 설정하고 Python의 드라이버 버전을 iPython으로 설정하여 더 멋진 셸이 작동하도록합니다.

당신이 이미하지 않은 경우 spark-env.sh파일 및 기타 변수를 설정할 필요가 없습니다,이는 관련 파이썬 바이너리 경로 (에 확인 올바른지 가정, 당신이 원하는 일을해야한다 which). 비슷한 문제가 있었고 이로 인해 해결되었습니다.


방금 동일한 문제에 직면했으며 Python 버전을 제공하기 위해 따르는 단계입니다. 2.6 대신 Python 2.7로 PySpark 작업을 실행하고 싶었습니다.

  1. $SPARK_HOME가리키는 폴더로 이동하십시오 (제 경우에는 /home/cloudera/spark-2.1.0-bin-hadoop2.7/)

  2. 폴더 아래에 conf라는 파일이 spark-env.sh있습니다. 라는 파일이있는 경우 spark-env.sh.template파일을라는 새 파일로 복사해야합니다 spark-env.sh.

  3. 파일을 편집하고 다음 세 줄을 작성합니다.

    export PYSPARK_PYTHON = / usr / local / bin / python2.7

    export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7

    export SPARK_YARN_USER_ENV = "PYSPARK_PYTHON = / usr / local / bin / python2.7"

  4. 저장하고 응용 프로그램을 다시 시작하십시오. :)

이런 식으로 새로운 Spark 독립 실행 형 버전을 다운로드하면 PySpark를 실행할 Python 버전을 설정할 수 있습니다.


대규모 조직에서 Spark를 실행 중이고 /spark-env.sh 파일을 업데이트 할 수없는 경우 환경 변수 내보내기가 작동하지 않을 수 있습니다.

--conf런타임에 작업을 제출할 때 옵션을 통해 특정 Spark 설정을 추가 할 수 있습니다 .

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

나는 그것을 IPython에서 실행하고 있었고 ( Jacek Wasilewski 의이 링크 에서 설명 했듯이 )이 예외가 발생했습니다. PYSPARK_PYTHONIPython 커널 파일에 추가 되고 jupyter 노트북을 사용하여 실행하고 작업을 시작했습니다.

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

동일한 오류 메시지가 표시되고 위에서 언급 한 세 가지 방법을 시도했습니다. 나는 그 결과를 다른 사람들에 대한 보완 적 참고 자료로 나열했습니다.

  1. 의 변경 PYTHON_SPARKPYTHON_DRIVER_SPARK값이 spark-env.sh작동하지 않습니다.
  2. os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"나를 위해 작동하지 않는 python 스크립트 내부의 값을 변경하십시오 .
  3. ~/.bashrc작품 의 가치를 매력처럼 바꿔보세요 ~

다음 환경을 사용하고 있습니다.

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

다음 별칭은 저에게 잘 작동합니다.

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"

노트북에서 다음과 같이 환경을 설정했습니다.

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

In case you only want to change the python version for current task, you can use following pyspark start command:

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

Error

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

Fix (for Cloudera environment)

  • Edit this file: /opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh

  • Add these lines:

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

Ran into this today at work. An admin thought it prudent to hard code Python 2.7 as the PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON in $SPARK_HOME/conf/spark-env.sh. Needless to say this broke all of our jobs that utilize any other python versions or environments (which is > 90% of our jobs). @PhillipStich points out correctly that you may not always have write permissions for this file, as is our case. While setting the configuration in the spark-submit call is an option, another alternative (when running in yarn/cluster mode) is to set the SPARK_CONF_DIR environment variable to point to another configuration script. There you could set your PYSPARK_PYTHON and any other options you may need. A template can be found in the spark-env.sh source code on github.


I got the same issue on standalone spark in windows. My version of fix is like this: I had my environment variables setting as bellow

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

With this setting I executed an Action on pyspark and got the following exception:

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.

To check with which python version my spark-worker is using hit the following in the cmd prompt.

python --version
Python 3.6.3

which showed me Python 3.6.3. So clearly my spark-worker is using system python which is v3.6.3.

Now as I set my spark-driver to run jupyter by setting PYSPARK_DRIVER_PYTHON=jupyter so I need to check the python version jupyter is using.

To do this check open Anaconda Prompt and hit

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

Here got the jupyter python is using the v3.5.x. You can check this version also in any Notebook (Help->About).

Now I need to update the jupyter python to the version v3.6.6. To do that open up the Anaconda Prompt and hit

conda search python

This will give you a list of available python versions in Anaconda. Install your desired one with

conda install python=3.6.3

Now I have both of the Python installation of same version 3.6.3 Spark should not comply and it didn't when I ran an Action on Spark-driver. Exception is gone. Happy coding ...

참고URL : https://stackoverflow.com/questions/30518362/how-do-i-set-the-drivers-python-version-in-spark

반응형