主要是解决包依赖问题,通过virtualenv来解决,需要打包环境和spark 是slave端运行环境一致,通过anaconda来解决,则完全不需要保持与线上spark机环境一致,只需要是linux系统即可。本篇主要介绍通过 anaconda 创建虚拟环境,并打包上传到hdfs目录。
1. Anaconda安装
bash ~/Downloads/Anaconda2-5.0.1-Linux-x86_64.sh
# 如果安装过程中对“Do you wish the installer to prepend the Anaconda<2 or 3> install location to PATH in your /home//.bashrc ?”没有选择yes,手工执行下面命令
echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
# 更新bashrc以立即生效
source ~/.bashrc
# 检验安装是否正确
conda --version
2. Anaconda下python虚拟环境安装
## python指定版本,后面是顺带需要安装的包
conda create --name spark_test python=3 scikit-learn
## 列出目前创建的坏境
conda info --envs
## 之后不需要这个环境,可以通过下面命令
conda remove --name spark_test --all
3. 使用conda安装包常用命令
# 查看当前环境下已安装的包
conda list
# 查看某个指定环境的已安装包
conda list -n spark_test
# 查找package信息
conda search numpy
# 安装package
conda install -n spark_test numpy
# 如果不用-n指定环境名称,则被安装在当前活跃环境
# 也可以通过-c指定通过某个channel安装
# 更新package
conda update -n spark_test numpy
# 删除package
conda remove -n spark_test numpy
4. 为conda设置国内镜像
# 添加Anaconda的TUNA镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# TUNA的help中镜像地址加有引号,需要去掉
# 设置搜索时显示通道地址
conda config --set show_channel_urls yes
5. 环境打包
# 路径
~/anaconda3/env/spark_test
# 打包存到hdfs目录
zip -r spark_test.zip spark_test/
hadoop fs -put spark_test.zip /user/xxx/pyspark/
6. spark-submit语句,增加环境目录
export PYSPARK_PYTHON="./spark_test.zip/spark_test/bin/python"
spark-submit --master yarn \
--deploy-mode cluster \
--driver-memory 10g \
--executor-memory 20g \
--num-executors 100 \
--executor-cores 5 \
--queue root.data.qe \
--files ./hive-site.xml \
--archives hdfs:///user/xxx/pyspark/spark_test.zip \
--conf "spark.yarn.appMasterEnv.PYSPARK_PYTHON=$PYSPARK_PYTHON" \
--conf "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=$PYSPARK_PYTHON" \
test.py
【参考】