pyspark打包依赖包&使用python虚拟环境

17 篇文章 0 订阅

一、anaconda创建python环境

anaconda创建python环境

在这篇博客中,已经很清楚地描述了如何通过anaconda来创建你需要的python环境:即合适的python版本和包含你需要的依赖包。

二、打包python环境

假设我们的python环境名称为py_env,那么在anaconda的安装目录下,会有这么一个目录:envs/py_env

在Windows下,直接将使用压缩软件,将其压缩为zip文件(但windows的拿到linux取用就不行了);

在Linux下,zip -r py_env.zip py_env。(必须在py_env文件夹所在的目录下执行,原因如下)

在这里要非常注意:我们是对py_env文件夹进行打包,不能再套上一层文件夹,不然spark会解析出错的

也就是我们只能对py_env进行打包,不能是envs/py_env或者anaconda/envs/py_env。

再换句话说,我们将py_env.zip解压之后,就是py_env文件夹了。

(看到我在这里再三强调,这都是坑呀)

三、上传hdfs

将打包好的py_env.zip上传至hdfs的对应账号目录下,如为root的话,hdfs的目录为/user/root

hdfs dfs -put xxx/py_env.zip /user/xxx/

说明:这一步不是必须的,环境包也可以在本地的。

但是放在本地的话,每次spark-submit运行程序的时候,就会将其上传至hdfs,当作临时文件,执行完毕就删除。

四、spark提交

前语:记清楚我们的python环境名称为py_env;

打包的名称为py_env.zip;

py_env/bin/python是python可执行程序。

最后,到了激动人心的提交时刻了:

client模式

spark-submit --master yarn --deploy-mode client --archives hdfs:///user/root/py_env.zip#PY2 --conf spark.pyspark.driver.python=/xxx/python2.7 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./PY2/py_env/bin/python /xxx/test.py

–archives hdfs:///user/root/py_env.zip#PY2:将hdfs:///user/root/py_env.zip加入到当前执行环境的根目录下,有点类似java的classpath,然后定向到PY2,即我们访问PY2时,就相当于访问hdfs:///user/root/py_env.zip;

spark.pyspark.driver.python:client模式下,driver端需要使用本地的python环境

spark.yarn.appMasterEnv.PYSPARK_PYTHON:指executor端(任务分配到的节点机器)的python环境指定为我们打包的python环境。

/xxx/test.py:最后的是你的spark程序脚本

cluster模式

spark-submit --master yarn --deploy-mode cluster --archives hdfs:///user/root/py_env.zip#PY2 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./PY2/py_env/bin/python /xxx/test.py

cluster模式与client不同的就是,driver端是集群根据资源情况分配到某一个节点上;

spark.yarn.appMasterEnv.PYSPARK_PYTHON:diver和executor端都统一使用我们打包的python环境。
==========================================================
如果不行的话,driver端也特地指定一下:
spark-submit --master yarn --deploy-mode cluster --archives hdfs:///user/root/py_env.zip#PY2 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./PY2/py_env/bin/python --conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=./PY2/py_env/bin/python /xxx/test.py

五、自己的依赖包

如果,你还有自己的一些依赖包或者程序(py文件),那么可以直接在–py-files参数带上。

比如,一个spark包,一个conifg.py,

spark-submit --master yarn --py-files spark.zip,config.py test.py

在代码中,可以直接import

import config

from spark import preprocess

注意:这里的spark必须是包,即需要有__init__.py
而且需要打包为zip,zip -r spark.zip spark

在这里插入图片描述

六、结语

在这里,我们在使用pyspark的时候,就可以自由地添加第三方依赖包了,虽然没有java有maven、scala有sbt那样方便的管理和打包依赖包,但是有个好处就是,可以使用不用于现有的python版本,有利于保持稳定的同时,实现更新迭代。
(网上很多教程都是一个样,全是cluster模式,然后也没说清楚cluster和client模式的区别,无语子!!!)

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
如果你想将Python虚拟环境一起打包,并在其他机器上运行,可以使用工具如Pipenv或Conda来管理和打包虚拟环境。 以下是使用Pipenv打包虚拟环境的步骤: 1. 首先,确保已经安装了Pipenv。可以使用以下命令安装: ``` pip install pipenv ``` 2. 进入你的Python项目所在的目录,在终端中运行以下命令: ``` pipenv install --ignore-pipfile ``` 这将根据你的Pipfile.lock文件创建虚拟环境并安装所有的依赖库。 3. 在同一目录下运行以下命令来激活虚拟环境: ``` pipenv shell ``` 4. 确保你的项目正常运行,然后退出虚拟环境: ``` exit ``` 5. 最后,使用Pipenv提供的命令将整个虚拟环境打包成一个可传输的文件夹。在终端中运行以下命令: ``` pipenv lock --requirements > requirements.txt pipenv --venv ``` 这将生成一个requirements.txt文件,其中含了所有的依赖库,以及一个venv文件夹,其中含了虚拟环境的内容。 现在,你可以将requirements.txt和venv文件夹一起传输到其他机器上,并使用以下步骤来运行你的项目: 1. 在新的机器上,安装Python,并创建一个新的虚拟环境。 2. 将requirements.txt文件复制到新机器上,并在新的虚拟环境中运行以下命令: ``` pip install -r requirements.txt ``` 3. 将venv文件夹复制到新机器上,并将其命名为`venv`。 4. 激活虚拟环境: - 对于Windows系统,运行以下命令: ``` venv\Scripts\activate ``` - 对于Linux/Mac系统,运行以下命令: ``` source venv/bin/activate ``` 5. 确保你的项目正常运行。 希望这些信息能帮助到你。如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值