Spark集羣,多個版本Python/Python Package管理

文章轉載自:http://blog.csdn.net/gongbi917/article/details/52369025

僅用於個人學習備忘收藏,轉載請註明原文地址

進年來,越來越多的數據科學家、分析人員、數據工程師運用Python語言進行數據分析和機器學習。Spark在0.7版本開始支持Python語言(PySpark)。 
相比於Scala/Java, Python語言更適合互動的探索性分析,擁有內置的圖形化工具以及豐富的機器學習庫。Scala/Java的優勢在於平臺獨立,代碼和第三方庫易於打包到Jar文件,更好的執行效率。當我們使用PySpark時則會失去以上優勢,尤其是在集羣環境管理不同的Python版本和第三方庫。

具體問題:

  1. 不同的數據分析人員/開發團隊需要不同版本的Python版本執行PySpark。
  2. 同一Python版本下,需要安裝多個Python庫,甚至需要不同版本的庫。

針對問題2的一個解決辦法是將Python依賴庫打包成*.egg文件,在運行pyspark或者spark-submit時使用–py-files加載egg文件。此解決方案的問題在於許多Python庫都包含native code,編譯時對平臺依賴,並且對於一些複雜依賴的庫(如Pandas),編譯失敗。 
如果不使用*.egg文件,則需要安裝不同Python版本極其所需庫在集羣中的每一臺機器,然後在運行Spark時指定所需Python的路徑。


解決方案

使用Anaconda管理多個Python環境在集羣中的每一個節點 
1. Anaconda 安裝 https://www.continuum.io

wget http://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh
bash Anaconda3-4.1.1-Linux-x86_64.sh -b -p /opt/anaconda
  • 1
  • 2

(此安裝包默認爲python3.5, 注意anaconda在每個節點的安裝路徑需要一致) 
2. 創建多個Anaconda Python環境 
創建,每行命令最後的參數anaconda是指定安裝所有anaconda python package

/opt/anaconda/bin/conda create -n py34 python=3.4 anaconda
/opt/anaconda/bin/conda create -n py27a python=2.7 anaconda
  • 1
  • 2

複製anaconda環境, 並在此環境中安裝python thrift package

/opt/anaconda/bin/conda create -n py27b --clone py27a
  • 1

使用指定的Python環境運行Spark 
Client Mode: PYSPARK_PYTHON = /opt/anaconda/bin/conda/py27b/python 
Cluster Mode: spark.yarn.appMasterEnv.PYSPARK_PYTHON = /opt/anaconda/bin/conda/py27b/python

設置Spark默認Python環境 
修改spark-env.sh

if [ -z "${PYSPARK_PYTHON}" ]; then
export PYSPARK_PYTHON=/opt/anaconda3/bin/python
fi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章