环境:
Python : 3.6.8
OS: CentOS 7
Spark: 2.4.5
Hadoop:2.7.7
Hardware: 3 computers (8 VCores available for each computer on hadoop cluster)
我构建了一个简单的python应用程序。我的代码是:
import numpy as np
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName('test_use_numpy') \
.getOrCreate()
sc = spark.sparkContext
rdd = sc.parallelize(np.arange(100))
rdd.saveAsTextFile('/result/numpy_test')
spark.stop()
我将虚拟环境打包为venv.zip,并将其放在hdfs上。我使用以下命令提交了应用程序:
/allBigData/spark/bin/spark-submit \
--master yarn --deploy-mode cluster --num-executors 10 \
--conf spark.yarn.dist.archives=hdfs:///spark/python/venv.zip#pyenv \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=pyenv/venv/bin/python \
/home/spark/workspace_python/test.py
我犯了个错误: pyenv/venv/bin/python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
```
20/06/23 15:09:08 ERROR yarn.ApplicationMaster: User application exited with status 127
20/06/23 15:09:08 INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 13, (reason: User application exited with status 127)
pyenv/venv/bin/python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
我在venv.zip中没有找到libpython3.6m.so.1.0,但在centos上找到了libpython3.6m.so.1.0。我试着把它放在venv/bin/、venv/lib/目录下,但两个都不起作用。我还是犯了同样的错误。
然后我尝试使用以下命令提交应用程序:
/allBigData/spark/bin/spark-submit
--master spark://master:7077 --num-executors 10
--conf spark.yarn.dist.archives=/home/spark/workspace_python/venv.zip#pyenv
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=pyenv/venv/bin/python
/home/spark/workspace_python/test.py
我有一个不同的错误: `ModuleNotFoundError: No module named 'numpy'` 有人能帮我解决这个问题吗?
2条答案
按热度按时间eqzww0vc1#
有关群集的其他说明:
群集中有三个工人/节点/计算机。我在工人a上构建应用程序/代码。woker a也可以作为主机。python已经被其他人安装在worker a上。我在worker b和c上手动安装了python。
我找到了一个笨拙的解决问题的办法。
我在venv.zip和工人b和c的python安装目录中找不到libpython3.6m.so.1.0。但我能在a工人身上找到。在使用命令在b和c上手动安装python之前:
./configure --with-ssl --prefix=/usr/local/python3
我在两台电脑上重新安装了python命令:./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC
安装之后,我将libpython3.6m.so.1.0复制到/usr/lib64/目录。这样libpython3.6m.so.1.0就可以在两个worker上找到。然后我提交了python应用程序,得到了一个不同的错误:pyenv/venv/bin/python: symbol lookup error: pyenv/venv/bin/python: undefined symbol: _Py_LegacyLocaleDetected
我使用ldd命令来查找pyenv/venv/bin/python的依赖关系,怀疑是工作进程a和其他两个工作进程的不同安装目录的依赖关系造成的。因此,我按照worker b和c的相同步骤在worker a上重新安装了python。然后我得到了提交的申请,并成功地完成了使用命令:但是,我仍然无法在独立模式下成功提交申请。我使用命令时出错:
我假设我针对python的路径设置了错误的属性参数(spark.yarn.appmasterenv.pyspark\u python/spark.yarn.appmasterenv.pyspark\u driver\u python)。但我不知道如何修改这些。如有任何建议,将不胜感激。
7lrncoxx2#
您需要使用spark submit传递python.zip
--archive
标签。当客户机使用
--archives
spark submit的命令行选项。并添加
PYSPARK_DRIVER_PYTHON
```/allBigData/spark/bin/spark-submit
--master yarn --deploy-mode cluster --num-executors 10
--archives hdfs:///spark/python/venv.zip#pyenv
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=pyenv/venv/bin/python
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=pyenv/venv/bin/python
/home/spark/workspace_python/test.py