spark使用独立的Python环境提交任务

背景

由于需要在公司的大数据平台上使用自己的Python环境,折腾了很久,特此记录

先说几个坑:

  1. 需要注意版本,不同的spark版本会有些不同,当前我的spark版本是2.2.1,如果以下的方式不生效,记得先看看版本;
  2. 由于公司平台的环境是离线的,pip down下载的包是需要和硬件架构匹配的,我在mac上pip down的包拿到Linux下是无法正常安装的,建议看一下这篇文章的介绍:https://imshuai.com/python-pip-install-package-offline-tensorflow,里面详细介绍了如果进行离线python环境的移植
  3. 指定环境和路径是分开的,即使指定了环境,包内部也可能存在依赖丢失的问题

步骤

1. 创建虚拟python环境

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

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

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

zip -r project_env.zip ./*

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

hadoop fs -put ***/***/project_env/project_env.zip hdfs://***/***/***/env/
3. 使用spark-submit命令引用

client模式下

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

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

cluster模式下,driver端可以略去

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

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

4. python环境设置

除了上述设置后,还需要在代码中显示的指定python的环境,例如下面的测试代码

# test_env.py #
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import os 
from pyspark import SparkContext 
os.environ['PYSPARK_PYTHON'] = './project_env/bin/python' 
sc = SparkContext(appName="env_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())

如果能输出你安装的pandas是版本,就说明可以正常使用了


补充

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

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

最后一个conf是存在在导入一些包的时候报libffi.so.6不存在,这里使用老的的Python环境中的这个依赖。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Spark、Hadoop⼤数据平台搭建 下载安装包 Spark 分布式计算 ,安装包⼤⼩:220M ⽀持Hadoop 2.7以后的版本 Scala Scala环境Spark的开发语⾔ ,安装包⼤⼩:20M Hadoop 分布式存储(计算) ,安装包⼤⼩:209M Java Java环境 ,安装包⼤⼩:187M ZooKeeper 注册中⼼ ,安装包⼤⼩:36M 配置 ⾸先需要配置环境变量 环境变量 打开并编辑 ~/.bashrc ⽂件,在末尾添加以下内容: # java JAVA_HOME=/opt/jdk1.8.0_192 export PATH=$PATH:$JAVA_HOME/bin # hadoop HADOOP_HOME=/opt/hadoop-2.7.7 export PATH=$PATH:$HADOOP_HOME/bin # zookeeper ZOOKEEPER_HOME=/opt/zookeeper-3.4.13 export PATH=$PATH:$ZOOKEEPER_HOME/bin # scala SCALA_HOME=/opt/scala-2.12.8 export PATH=$PATH:$SCALA_HOME/bin # spark SPARK_HOME=/opt/spark-2.3.2-bin-hadoop2.7 export PATH=$PATH:$SPARK_HOME/bin Host 这⾥需要设置Host,⼀个是Hadoop的Name-Node、Data-Node,⼀个spark的Master、Worker。 # hadoop 192.168.1.151 name-node 192.168.1.155 data-node-sa 192.168.1.156 data-node-sb 192.168.1.157 data-node-sc spark conf/slaves worker-sa worker-sb worker-sc 待补充 。。。 hadoop etc/hadoop/slaves data-node-sa data-node-sb data-node-sc Python3安装 安装pyspark cd /opt/spark-2.3.2-bin-hadoop2.7/python && python36 setup.py install 安装numpy pip3 install numpy -i https://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn 启动&停⽌ hadoop sbin/start-all.sh sbin/stop-all.sh spark sbin/start-all.sh sbin/stop-all.sh 执⾏任务 提交任务 spark-submit --master spark://name-node:7077 --executor-memory 512m --total-executor-cores 2 client.py ⼏个管理页 Spark Hadoop 测试数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值