将Python库添加到远程集群计算机?

2024-10-02 12:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一台远程机器上运行Python脚本,这台机器是Spark集群的节点。我在这台机器上除了自己的一个小主文件夹之外没有权限,但是要运行我的脚本,我需要两个库(networkxshapely)。你知道吗

因为我的问题仅仅是导入,所以我目前正在尝试运行一个基本的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)复制到~/local/lib/python3.6中的节点(Red Hat 7)-我的所有库现在都在~/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')

但这不起作用。你知道吗

由于集群的存在,虚拟环境是不可能的。你知道吗

我可以强制模块在本地目录中查找吗?我可以强制我的库的文件路径吗?你知道吗


Tags: pathfromimportnetworkx脚本libusrlocal
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:59

如果我理解正确,你只能访问spark cluster的一个节点。 正确的方法是,在所有执行器上打开共享挂载,然后将您的venv复制到挂载中,并添加confpyspark.pyspark.python=/path/to/venv. 你知道吗

因为你没有预先的任务,所以你唯一可以做的方法(当你在集群上运行时,而不是在本地模式下)是从你的站点包文件夹(例如部门邮编),而不是在提交作业时(通过spark submit)添加py文件。你知道吗

我不建议你这样做,因为我的实验使用pyfiles部门邮编如果有C编译的库(例如numpy、pymssql…),则无法正常工作。你知道吗

相关问题 更多 >

    热门问题