1. 程式人生 > 實用技巧 >pyspark基於python虛擬環境執行

pyspark基於python虛擬環境執行

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