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

问题描述 投票:1回答:1

我正在尝试在作为Spark群集节点的远程计算机上运行Python脚本。我在这台机器上拥有0个权限,除了自己的一个小主文件夹外,但我需要两个库(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()

[我从本地计算机(Linux Mint 19)将/usr/lib/python3.6/文件夹复制到~/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/或[中进行任何修改C0]。

另一种尝试,我在脚本中添加了以下几行:

/some/path/modulefiles/

但是这不起作用。

由于集群,虚拟环境不可行。

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

python python-3.x apache-spark lua
1个回答
0
投票

如果我理解正确,则您只能访问spark群集的一个节点。正确的方法是,在所有执行程序上打开共享的挂载,而不是将venv复制到挂载中,并添加--conf spark.pyspark.python = / path / to / venv。

因为您对此没有权限,所以唯一的方法(当您在群集上运行,而不是在本地模式下运行时)-是从您的site-packages文件夹(例如dep.zip)制作一个zip,比您提交作业(通过spark-submit)时添加--py-files。

[我不建议您这样做,因为在使用C编译库(例如numpy,pymssql ...)时,使用--pyfiles dep.zip的实验无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.