最近碰到了一個問題,挺有意思,是在使用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中設置)