MRS:依赖第三库的Pyspark程序的yarn模式运行
MRS :依赖第三库的Pyspark程序的yarn模式运行
关键词:MRS Pyspark python3.6 yarn 第三方依赖库
摘要:依赖第三方库的Pysaprk程序在MRS集群以--master yarn模式运行主要有两种方案:1.在mrs集群的所有core节点,以及提交任务的节点(通常为mrs的master节点),均安装python3.6以及相关的第三方依赖并且指定pyspark使用的python路径;2.在任务提交节点(通常为mrs的master节点)安装Anaconda3,并在Anaconda3中安装python3.6以及第三方依赖库,在--master yarn-cluster模式下,通过--archives选项指定zip包路径
前期准备
-
MRS2.1.0、Spark2.3.2
-
样例代码
在提交任务的节点(比如master1),代码路径为/root/data/
fly.py代码如下:
import add
import numpy as np
from pyspark import SparkContext
from pyspark import SparkConf
conf=SparkConf().setAppName("Bird")
sc=SparkContext.getOrCreate(conf)
a=np.array([1,2,3,4,5,6,7,8,9,10])
da=sc.parallelize(a)
rep=da.repartition(3)
reduce=rep.reduce(lambda a,b :add.add_fun(a,b))
print(reduce)
sc.stop()
add.py代码如下:
def add_fun(a,b):
return a+b
方案一(参考自https://bbs.huaweicloud.com/blogs/115742):
1. 安装python以及第三方依赖库
MRS使用的操作系统是EulerOS,目前EulerOS无法直接通过yum安装python3,需要自行编译。
1.1 编译安装
在master1节点编译python
# 配置华为云欧拉镜像源
wget http://mirrors.myhuaweicloud.com/repo/mirrors_source.sh && sh mirrors_source.sh
# 安装必要的工具,用来编译python3
yum groupinstall "Development tools" -y
yum -y install zlib zlib-devel
yum -y install bzip2 bzip2-devel
yum -y install ncurses ncurses-devel
yum -y install readline readline-devel
yum -y install openssl openssl-devel
yum -y install openssl-static
yum -y install xz lzma xz-devel
yum -y install sqlite sqlite-devel
yum -y install gdbm gdbm-devel
yum -y install tk tk-devel
yum -y install libffi libffi-devel
# 下载,解压python3的tgz包,也可以自行去python官网下一个
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz
tar -zxvf Python-3.6.7.tgz
cd Python-3.6.7
# 配置信息及编译安装,安装到/opt/Bigdata/python3目录下,也可以自行指定
./configure --prefix=/opt/Bigdata/python3 --enable-shared CFLAGS=-fPIC
make && make install
# 改下安装目录的权限,便于后面打包分发
chmod -R 777 /opt/Bigdata/python3
1.2 配置变量
echo "/opt/Bigdata/python3/lib" >> /etc/ld.so.conf
ldconfig
rm -rf /usr/bin/python
rm -rf /usr/bin/python3
rm -rf /usr/bin/pip
rm -rf /usr/bin/pip3
ln -s /opt/Bigdata/python3/bin/python3 /usr/bin/python3
ln -s /opt/Bigdata/python3/bin/pip3 /usr/bin/pip3
ln -s /opt/Bigdata/python3/bin/python3 /usr/bin/python
ln -s /opt/Bigdata/python3/bin/pip3 /usr/bin/pip
# 切换到omm用户
su omm;
1.3 添加第三方依赖库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy scipy
1.4分发编译好的python到集群上所有节点
执行下面命令,获取scp命令,用于分发python包。
# 打包
cd /opt/Bigdata/ && tar -zcf /tmp/python3.tar.gz python3 && chmod 777 /tmp/python3.tar.gz
# 获取将要运行的命令,
cat /etc/hosts | grep node | awk '{print $1}'| sed 's|$|:/tmp/|' | sed 's|^|scp /tmp/python3.tar.gz |'
将上一操作获取的命令,复制粘贴运行
分发完毕后,需要在所有节点解压。可以在master节点用omm用户使用执行命令得到所有解压命令。
cat /etc/hosts | grep node | awk '{print $1}'| sed 's|$| "tar -zxf /tmp/python3.tar.gz -C /opt/Bigdata ;chmod -R 777 /opt/Bigdata/python3"|' | sed 's|^|ssh |'
将上一操作获取的命令,复制粘贴运行
1.5 配置集群其他节点变量
用root用户逐个登录到集群上所有安装python3的节点,执行下面的命令:
su root;
echo "/opt/Bigdata/python3/lib" >> /etc/ld.so.conf
ldconfig
rm -rf /usr/bin/python
rm -rf /usr/bin/python3
rm -rf /usr/bin/pip
rm -rf /usr/bin/pip3
ln -s /opt/Bigdata/python3/bin/python3 /usr/bin/python3
ln -s /opt/Bigdata/python3/bin/pip3 /usr/bin/pip3
ln -s /opt/Bigdata/python3/bin/python3 /usr/bin/python
ln -s /opt/Bigdata/python3/bin/pip3 /usr/bin/pip
1.6 测试
挑选几个节点,执行python3,python,pip3,pip,正常运行则安装成功。
2. 配置pyspark使用的python3.6
2.1 配置PYSPARK环境变量
在提交任务的节点(比如master1),提交前执行
export PYSPARK_PYTHON=/opt/Bigdata/python3/bin/python3
或将上面这一样配置在客户端客户端目录下spark-env.sh文件中(默认路径:/opt/client/Spark/spark/conf)
echo "export PYSPARK_PYTHON=/opt/Bigdata/python3/bin/python3" >> /opt/client/Spark/spark/conf/spark-env.sh
-
运行fly.py进行测试
source /opt/client/bigdata_env;
/opt/client/Spark/spark/bin/spark-submit --master yarn-client(或yarn-cluster) --py-files /root/data/add.py /root/data/fly.py
注: --py-files也可以添加压缩文件
方案二(参考自https://www.cnblogs.com/nucdy/p/8569606.html):
1.安装Anaconda3、python以及程序依赖的第三方库
1.1安装Anaconda3
cd /opt/Bigdata
#通过wget下载anconda安装包
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Linux-x86_64.sh
#利用bash命令安装到anconda文件夹下:.
bash Anaconda3-2019.07-Linux-x86_64.sh -p anaconda/ -u
一直按yes,包括添加到环境
如果运行conda --version 显示没有此指令的话,需要把anaconda添加到变量中去,运行两步(也可以根据自己的情况添加环境变量):
echo 'export PATH="/opt/Bigdata/anaconda/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
#添加清华的镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
#并且在搜索时显示搜索地址
conda config --set show_channel_urls yes
1.2创建运行环境,包括安装python3.6和第三方依赖库
conda create -n mlpy_env --copy -y -q python=3.6 numpy scipy
-
打包运行环境和上传运行环境
chmod -R 777 /opt/Bigdata/anaconda
cd /opt/Bigdata/anaconda/envs/
zip -r mlpy_env.zip ./mlpy_env
source /opt/client/bigdata_env;
hadoop fs -mkdir /wang
hadoop fs -put ./mlpy_env.zip /wang
-
运行fly.py进行测试
/opt/client/Spark/spark/bin/spark-submit --conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=./mlpy_env.zip/mlpy_env/bin/python --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./mlpy_env.zip/mlpy_env/bin/python --py-files /root/data/add.py --master yarn-cluster --archives hdfs:///wang/mlpy_env.zip /root/data/fly.py
注: 本人首次发表在论坛https://bbs.huaweicloud.com/forum/thread-48100-1-1.html
- 点赞
- 收藏
- 关注作者
评论(0)