pyspark应用程序在集群模式和独立模式下提交错误

i1icjdpr  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(1403)

环境:

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'` 有人能帮我解决这个问题吗?
eqzww0vc

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。然后我得到了提交的申请,并成功地完成了使用命令:

/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 \
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=pyenv/venv/bin/python \
/home/spark/workspace_python/test.py

但是,我仍然无法在独立模式下成功提交申请。我使用命令时出错:

/allBigData/spark/bin/spark-submit \
--master spark://master:7077 --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
ModuleNotFoundError: No module named 'numpy'

我假设我针对python的路径设置了错误的属性参数(spark.yarn.appmasterenv.pyspark\u python/spark.yarn.appmasterenv.pyspark\u driver\u python)。但我不知道如何修改这些。如有任何建议,将不胜感激。

7lrncoxx

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

相关问题