如何将 Python 库添加到远程集群机器?
2019-11-29 9:3:21
收藏:0
阅读:106
评论:1
我正在尝试在作为 Spark 集群节点的远程机器上运行 Python 脚本。在这台机器上,我没有除一个小家目录以外的任何权限,但是为了运行我的脚本,我需要两个库(networkx 和 shapely)。
由于我的问题仅限于导入,因此我目前正在尝试运行一个基本的 wordcount 脚本,但是导入我最终项目所需的库。
from pyspark import SparkConf
from pyspark import SparkContext
def calculate(sc):
text_file = sc.textFile("nevergonnagive.txt")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("word_count_OUT")
return sc
sc = SparkContext.getOrCreate()
conf_spark = SparkConf()
conf_spark.set('spark.executorEnv.PYTHONPATH','~/local/lib/:/usr/bin/python3.6')
conf_spark.set('spark.executorEnv.LD_LIBRARY_PATH','~/local/lib/python3.6: /some/path/Python/3.7.2/lib')
import itertools
import networkx as nx
from networkx.algorithms.connectivity import local_edge_connectivity
import random
from shapely.geometry import Polygon
from shapely.ops import cascaded_union
import xml.etree.ElementTree as ET
sc=calculate(sc)
sc.close()
我将我的 /usr/lib/python3.6/ 文件夹从我的本地机器(Linux Mint 19)复制到节点(Red Hat 7)中的 ~/local/lib/python3.6 中,所有的库都已经在 ~/local/lib/python3.6/dist-packages/ 中包括我需要的两个。
我可以临时更改环境变量并加载 .lua 模块(我没有经验)。该节点上已经存在一些模块在 /usr/lib/modules 中:
$ module show python/3.6.5
------------------------------------------------------------------------------------------------
/some/path/modulefiles/python/3.6.5.lua:
------------------------------------------------------------------------------------------------
help([[Interpréteur Python
Version disponible sous rh7
]])
whatis("Nom : Python")
whatis("Version : 3.6.5")
whatis("Os : rh7")
whatis("Date d installation : 14/08/2019")
setenv("PYTHON_HOME","/some/path/Python/3.6.5")
prepend_path("PATH","/some/path/Python/3.6.5/bin")
prepend_path("LD_LIBRARY_PATH","/some/path/Python/3.6.5/lib")
prepend_path("MANPATH","/some/path/Python/3.6.5/share/man")
prepend_path("PKG_CONFIG_PATH","/some/path/Python/3.6.5/lib/pkgconfig")
setenv("PIP_CERT","/some/path/certs/ca-bundle.crt")
我尝试在我的主目录中创建类似的文件以导入 networkx 库,但是运行 module load networkx/2.4 却无法找到该文件,我不能修改 /usr/lib/ 或 /some/path/modulefiles/ 中的任何内容。
在另一次尝试中,我给我的脚本添加了以下行:
conf_spark.set('spark.executorEnv.PYTHONPATH','~/local/lib/:/usr/bin/python3.6')
conf_spark.set('spark.executorEnv.LD_LIBRARY_PATH','~/local/lib/python3.6: /some/path/Python/3.7.2/lib')
但是这没有起作用。
由于集群化的原因,虚拟环境是不可能的。
我能否强制要求模块查找我的本地目录?我能否强制要求我的库文件路径?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果我理解正确,您仅有一个spark集群节点的访问权限。 正确的操作是在所有执行节点上打开共享的挂载,然后将您的venv复制到挂载中,并添加 --conf spark.pyspark.python=/path/to/venv。
由于您没有权限这样做,当您在集群上运行而不是在本地模式下运行时,您唯一可以做的是从您的site-packages文件夹中制作一个zip文件(例如dep.zip),然后在提交作业时(通过spark-submit)添加 --py-files。
我不建议您这样做,因为我用 --pyfiles dep.zip 进行实验时,当您有C编译库(如numpy,pymssql...)时,将无法正常工作。