PySpark基于Conda自定义Python运行环境

背景

在使用PySpark进行开发时,面临的痛点问题之一是Driver或Executor上运行Python的包依赖的问题,解决办法之一是可以通过Conda创建环境解决Python包依赖的问题,具体为在本地机器打包Conda创建的运行环境为zip包,然后zip包上传hdfs,然后在spark-submit提交命令中添加archivesspark.pyspark.python参数的方式解决。

conda创建环境并zip打包

Miniconda下载:https://conda.io/en/latest/miniconda.html

由于conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。因此对于下载anaconda2还是3版本都无所谓,因为可以自己通过conda创任意版本的环境。

下载安装完成后,建议每个运行Python环境单独创建一个新的Python环境,这样只需要安装需要到的依赖包,避免最后依赖包过大。

例如新建一个scoenv的python3.6环境:

# 添加conda的TUNA镜像,并设置搜索时显示通道地址
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

# 创建一个Python3.6环境
conda create --name scoenv python=3.6

# 激活进入环境
source activate scoenv

# 安装各种依赖包,比如requests、numpy、scipy、scikit-learn等等
pip install requests==2.25.1

# 查看已安装的依赖包
pip list

创建环境并安装相应依赖包后,整个环境已经生成了,环境默认在 ~/miniconda3/envs/所装环境名 下,然后进入该目录下进行打包即可。

例如:

# 进入目录
cd ~/miniconda3/envs

# 打包为zip
zip -r scoenv.zip scoenv/

注:Conda会把运行环境所需的c库都放在创建环境名下的lib目录,因此不会出现丢失共享库的错误信息,但是由于依赖包安装会有编译过程,尽量保证相互拷贝的机器环境一致,避免机器环境不同导致的出错。

上传zip包到hdfs

由于打包的Python运行环境zip包一般比较大,可以先上传hdfs,然后再使用PySpark代码处指定hdfs路径,避免每次都从本地上传。

# 上传
hadoop fs -put scoenv.zip hdfs:/user/xx/xx/

spark-submit提交参数设置

在PySpark上用指定的环境运行,在提交作业前加上如下参数即可:

# 环境包地址最好放在hdfs集群上,免得上传;#scoenv不能缺少,是在AppMaster上解压zip后的文件名
--archives hdfs:/user/xx/xx//scoenv.zip#scoenv   

# 指定Driver或Executor使用的Python路径,其中第一个scoenv是zip解压后的文件名,第二个scoenv是打包的环境名
--conf spark.pyspark.python=./scoenv/scoenv/bin/python3.6 

使用的spark-submit提交命令参考:

spark-submit --master yarn \
    --deploy-mode cluster   \
    --num-executors=8  \
    --executor-memory=10g  \
    --executor-cores=2  \
    --driver-memory=4g  \
    --conf spark.pyspark.python=./scoenv/scoenv/bin/python3.6   \
    --archives hdfs:/user/xx/xx//scoenv.zip#scoenv  \
    --py-files demo.zip spark_driver.py xxx

参考

PySpark依赖部署
0483-如何指定PySpark的Python运行环境

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值