關於pyspark 使用過程中需要python版本不同的需求
最近碰到了一個問題,挺有意思,是在使用spark過程中需要用到pyspark,而本地介面機的python版本太低,只有python 2.6版本,需求需要python 2.7版本甚至python 3版本。
但是在使用過程中不允許修改主機自帶的python。
怎麼辦呢。只能手動下載指定。其中又分為 anaconda 版本的python,還有直接python官網下載python包安裝。
其中anaconda又分為 parcel 版的,還有.sh安裝版本。
首先說一下使用python 官網下載python包安裝的方式。
下載地址:
https://www.python.org/download/releases/2.7/
然後安裝這個python
tar xzvf Python-2.7.tgz cd Python-2.7 ./configure --prefix=/opt/python make sudo make install
之後就是需要在執行spark程式的時候指定了:
spark的deploy-mode一般有兩種模式,一個是cluster 模式,一個是client模式
其中client模式需要設定:
PYSPARK_PYTHON=/path/to/python2.7 (可在環境變數中設定,可以在spark-env.sh中設定)
cluster模式需要設定:
spark.yarn.appMasterEnv.PYSPARK_PYTHON=/path/to/python2.7
spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=/path/to/python2.7 (可在執行中臨時指定,也可在spark-default.sh中設定)
然後再說一下anaconda版本的python。。這是一個大坑。。奈何做科學計算還有好多人認這個工具。。總是令人不忍放棄,卻又心力憔悴。
一開始用anaconda版本的.sh檔案安裝的。奈何提交clinet模式的時候總是報
Exception
in thread "main" java.io.IOException: Cannot run program "/home/hadoop/Anaconda/bin": error=13, Permission denied
搞了將近一個月,最終還是不行,除非用root使用者,或者sudo執行,否則無法正常提交,但是這肯定是不行的
最後使用了cloudera manager 集成了anaconda 的parcel,然後拷貝了這個被整合之後的目錄到客戶端使用才解決了這個問題
/opt/cloudera/parcels/Anaconda/bin
其他的引數配置跟上面的相同。就是這些:
其中client模式需要設定:
PYSPARK_PYTHON=/path/to/python2.7 (可在環境變數中設定,可以在spark-env.sh中設定)
cluster模式需要設定:
spark.yarn.appMasterEnv.PYSPARK_PYTHON=/path/to/python2.7
spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=/path/to/python2.7 (可在執行中臨時指定,也可在spark-default.sh中設定)