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://tmp/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://tmp/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

 

注:
--archives s3://tmp/bigdata/config/pyspark_venv.zip#pyspark_venv ----會將pyspark_venv.zip解壓,解壓的目錄是"pyspark_venv", #后面的pyspark_venv不能省略,會被解壓到每個Executor的工作目錄中,僅限於Spark on Yarn模式
--conf spark.pyspark.driver.python=./pyspark_venv/pyspark_venv/bin/python3 ----指定python執行器
--conf spark.pyspark.python=./pyspark_venv/pyspark_venv/bin/python3 ----指定python執行器

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM