pyspark基於python虛擬環境執行
阿新 • • 發佈:2020-08-27
1.背景
目前大資料使用的是Amazon EMR叢集,該叢集可根據計算需求變化靈活擴充套件或收縮叢集,就會存在一個問題:當spark任務提交之後,EMR叢集會根據計算的需求進行擴充套件,新擴充套件的機器上python環境各不相同,並且每次擴充套件的機器ip不相同(不是同一臺機器),對某些第三方包,例如:pandas 還會依賴numpy,並且對版本還有一定要求,必須大於15.4;此時python依賴的衝突就會導致spark任務執行失敗。
2.解決方案
鑑於以上問題,通過搭建獨立的Python執行環境可以解決以上問題,同時還可以使得單個專案的執行環境與其他專案互不影響。
3.搭建方法
3.1.安裝virtualenv
3.1.1.檢查伺服器是否安裝virtualenv
virtualenv --version
3.1.2.沒有的話需要安裝
pip install virtualenv
3.2.建立python虛擬環境
cd /home/hadoop/code
mkdir py_spark_env #建立目錄py_spark_env
virtualenv -p /usr/bin/python3.6 pyspark_venv #選擇使用python3.6直譯器建立虛擬環境目錄
source pyspark_venv/bin/activate #啟用虛擬環境變數
deactivate #退出當前虛擬環境
刪除虛擬環境,只需要刪除它的資料夾:rm -rf pyspark_venv
3.3.安裝python依賴
3.3.1安裝python依賴庫
安裝之前需要選擇虛擬環境,否則就會安裝在系統的環境下
source pyspark_venv/bin/activate #選擇虛擬環境
pip install pandas #安裝pandas
pip install pyspark #安裝pyspark
以上的依賴庫會安裝在:
/home/hadoop/code/py_spark_env/pyspark_venv/lib64/python3.6/dist-packages下
需要將其拷貝至
/home/hadoop/code/py_spark_env/pyspark_venv/lib64/python3.6/site-packages下
3.3.2.驗證python虛擬環境
選擇虛擬環境:source pyspark_venv/bin/activate
在伺服器終端執行python: python #可以看到當前的python環境是3.6.8
以下截圖是在本地測試pandas和numpy依賴可用性:
3.4.spark基於python虛擬環境提交任務
3.4.1.打包python虛擬環境
cd /home/hadoop/code/py_spark_env
zip -r py_spark_venv.zip py_spark_venv
3.4.2.上傳至s3或者hdfs
hadoop fs -put py_spark_venv.zip s3://yamibuy-oregon/bigdata/config
hadoop fs -put py_spark_venv.zip /tmp/pyspark
如果還需要增加其它第三方依賴,則需要通過執行步驟3.3安裝依賴,再打包成zip,上傳至s3或者hdfs上。
3.4.3.spark依賴虛擬環境
請參考以下示例:
spark-submit \
--deploy-mode cluster \
--master yarn \
--driver-memory 2g \
--num-executors 6 \
--executor-memory 4g \
--executor-cores 2 \
--queue default \
--name test \
--archives s3://yamibuy-oregon/bigdata/config/pyspark_venv.zip#pyspark_venv \
--conf spark.pyspark.driver.python=./pyspark_venv/pyspark_venv/bin/python3 \
--conf spark.pyspark.python=./pyspark_venv/pyspark_venv/bin/python3 \
/home/hadoop/tmp/nibo/test.py