指定PySpark的Python运行环境

资料仓库 spark  收藏
0 / 488

1.背景

目前大数据使用的是Hadoop集群,该集群可根据计算需求变化灵活扩展或收缩集群,就会存在一个问题:当spark任务提交之后,Hadoop集群会根据计算的需求进行扩展,新扩展的机器上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_env  #选择使用python3.6解释器创建虚拟环境目录
source pyspark_env/bin/activate  #激活虚拟环境变量
deactivate  #退出当前虚拟环境
删除虚拟环境,只需要删除它的文件夹:rm -rf pyspark_env

3.3.安装python依赖

3.3.1安装python依赖库

安装之前需要选择虚拟环境,否则就会安装在系统的环境下

source pyspark_env/bin/activate   #选择虚拟环境
pip install pandas   #安装pandas
pip install  pyspark #安装pyspark
以上的依赖库会安装在:
/home/hadoop/code/py_spark_env/pyspark_env/lib64/python3.6/dist-packages下
需要将其拷贝至
/home/hadoop/code/py_spark_env/pyspark_env/lib64/python3.6/site-packages下

3.3.2.验证python虚拟环境

选择虚拟环境:source pyspark_env/bin/activate

在服务器终端执行python: python #可以看到当前的python环境是3.6.8

3.4.spark基于python虚拟环境提交任务

3.4.1.打包python虚拟环境

cd /home/hadoop/code

zip -r py_spark_env.zip py_spark_env

3.4.2.上传至hdfs

hdfs dfs -put py_spark_env.zip /tmp/bigdata/config

如果还需要增加其它第三方依赖,则需要通过执行步骤3.3安装依赖,再打包成zip,上传至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 hdfs:///tmp/bigdata/config/py_spark_env.zip#py_spark_env \
--conf spark.pyspark.driver.python=./py_spark_env/pyspark_env/bin/python3 \
--conf spark.pyspark.python=./py_spark_env/pyspark_env/bin/python3 \
/home/hadoop/tmp/nibo/test.py

注:
--archives hdfs:///tmp/bigdata/config/py_spark_env.zip#py_spark_env----会将py_spark_env.zip解压,解压的目录是 py_spark_env后面的 py_spark_env 不能省略,会被解压到每个Executor的工作目录中,仅限于Spark on Yarn模式
--conf spark.pyspark.driver.python=./py_spark_env/pyspark_env/bin/python3 ----指定python执行器
--conf spark.pyspark.python=./py_spark_env/pyspark_env/bin/python3 ----指定python执行器