自定义Python环境创建spark任务

↘锁芯ラ 提交于 2020-08-15 12:26:47

说明:
spark2.1.0(含)以下的版本不支持Python3.6
安装注意版本,请先检查版本

步骤

1. 创建虚拟python环境

这个不多介绍了,不管是通过annaconda还是virtualenv,创建好你自己的python环境。如果你也碰到了离线的平台,建议自己用docker做一个和服务器一样的系统版本,在上面完成虚拟的环境的创建,再将其拷贝出来;

2. 打包虚拟环境并将其上传hdfs

创建好环境后,进入到环境所在的文件夹,例如你的环境是 ***/***/py35, cd到py35下,使用打包命令将当前目录下的文件打包

zip -r py35.zip ./*

在当前文件夹下,将其上传至hdfs

hadoop fs -put ***/***/py35.zip hdfs://***/***/***/env/

3. 使用spark-submit命令引用

client模式下

--conf spark.yarn.dist.archives=hdfs://***/***/***/env/py35.zip#py35\
--conf spark.pyspark.driver.python=./py35/bin/python \
--conf spark.pyspark.python=./py35/bin/python \

注意 archivs命令后的#是必须的,它指的是将这个zip包解压到的文件夹

cluster模式下,driver端可以略去

--conf spark.yarn.dist.archives=hdfs://***/***/***/env/py35.zip#py35\
--conf spark.pyspark.python=./py35/bin/python \

一般其他的文章到这一步就结束了,但我的还是报错,说pandas的的dependency numpy包不存在,但事实上install pandas时,numpy必定是已经装过的,所以就到处找,应该是环境没有设置

4. python环境设置

除了上述设置后,在代码中显示的指定python的环境,例如

# test.py #
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import os 
from pyspark import SparkContext 
os.environ['PYSPARK_PYTHON'] = './py35/bin/python' 
sc = SparkContext(appName="test").getOrCreate() 
def fun(x): 
	import pandas 
	return pandas.__version__ 
a = sc.parallelize([1,4,5,5,6],3) 
print(a.map(lambda x:fun(x)).collect())

 


最后

也可以在submit的命令中设置这些路径

spark.yarn.dist.archives=hdfs://***/***/***/env/py35.zip#py35\
--conf spark.pyspark.python=./py35/bin/python \ 
--conf spark.executorEnv.PYSPARK_PYTHON=./py35/bin/python \ 
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./py35/bin/python \ 
--conf spark.executorEnv.LD_LIBRARY_PATH=/AnacondaInstall/anaconda3/lib \

如果报libffi.so.6不存在,则加入最后一个conf。 

 

参考:

https://imshuai.com/python-pip-install-package-offline-tensorflow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!