pyspark项目安装python依赖的操作, 解决yarn cluster 模式下的依赖问题
关于pyspark项目安装python依赖的操作
目的: 解决yarn cluster 模式下的依赖问题
一、解决外部依赖: 使用 Virtualenv + HDFS 提交 pyspark任务
1.安装 virtualenv (已经安装了就不用安装)
pip3 install --upgrade pip
python3 -m pip install --user virtualenv
2.创建环境
python3 -m venv pyspark_venv
3. 激活环境
source pyspark_venv/bin/activate
4.安装依赖
pip3 install venv-pack (用于打包)
pip3 install pymysql requests pytispark==2.0.0 (项目依赖)
5.打包依赖
venv-pack -o pyspark_venv.tar.gz
6.上传到Hadoop
hadoop dfs -put pyspark_venv.tar.gz /py/
如果报错: put: `/py/pyspark_venv.tar.gz’: File exists /py 下已经存在pyspark_venv.tar.gz , 要删除后才能上传,但是注意如果有定时任务依赖它,删除会影响定时任务,建议不要经常更新,可以换一个路径或文件名
删除操作:
hadoop dfs -rm /py/pyspark_venv.tar.gz
7.spark 代码:
import os
from pyspark.sql import SparkSession
from app import main
# 指定要使用的python ,相对于yarn的工作路径 (意思是你并不知道在哪里,用相对路径, environment 是解压后的命名)
os.environ['PYSPARK_PYTHON'] = "./environment/bin/python"
# environment 是解压后的命名
spark = SparkSession.builder.config( 'spark.yarn.dist.archives',"pyspark_venv.tar.gz#environment") .getOrCreate()
如果不希望改代码指定config,也可以通过指定以下来提交任务
export PYSPARK_PYTHON=./environment/bin/python
--conf 'spark.yarn.dist.archives=pyspark_venv.tar.gz#environment'
二、解决项目模块依赖
1.进入项目压缩文件
cd /data/web/data_warehouse
2.进入项目压缩文件
zip -r ../data_warehouse.zip ./*
chmod 777 ../data_warehouse.zip
cd ..
3.进入项目压缩文件
增加代码 spark.sparkContext.addPyFile("data_warehouse.zip") 在 spark = ....getOrCreate() 后
4.提交任务
附加参数 --py-files /data/web/data_warehouse.zip