MRS:依赖第三库的Pyspark程序的yarn模式运行

举报
剑指南天 发表于 2020/08/02 14:43:27 2020/08/02
【摘要】 依赖第三方库的Pysaprk程序在MRS集群以--master yarn模式运行主要有两种方案:1.在mrs集群的所有core节点,以及提交任务的节点(通常为mrs的master节点),均安装python3.6以及相关的第三方依赖并且指定pyspark使用的python路径;2.在任务提交节点(通常为mrs的master节点)安装Anaconda3,并在Anaconda3中安装python3.6以

                                                          MRS :依赖第三库的Pyspark程序yarn模式运行

关键词:MRS  Pyspark  python3.6 yarn 第三方依赖库

摘要:依赖第三方库的Pysaprk程序在MRS集群以--master yarn模式运行主要有两种方案:1.mrs集群的所有core节点,以及提交任务的节点(通常为mrsmaster节点),均安装python3.6以及相关的第三方依赖并且指定pyspark使用的python路径;2.在任务提交节点(通常为mrsmaster节点)安装Anaconda3,并在Anaconda3中安装python3.6以及第三方依赖库,--master yarn-cluster模式下,通过--archives选项指定zip包路径

 

前期准备

  1. MRS2.1.0Spark2.3.2

  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

# 下载,解压python3tgz包,也可以自行去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

  1. 运行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.安装Anaconda3python以及程序依赖的第三方库

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

    1. 打包运行环境和上传运行环境

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

  1. 运行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



【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。