spark-submit+python脚本执行报错

一、问题:执行spark-submit+python脚本后报各种错误。

目的:,通过执行上面spark-submit命令,使spark操作hive,在hive指定数据库生成数据表及数据。
xxx.py脚本部分内容是

from pyspark.sql import SparkSession
....................
use_database='''use hivetest01'''
......
spark=SparkSession.builder.appName().enableHiveSupport().getOrCreate()
二、实验环境

外置hive:apache-hive-3.1.3-bin.tar.gz
spark带hadoop的:spark-3.2.1-bin-hadoop3.2.tgz
hadoop:hadoop-3.2.4.tar.gz
其他包放spark的jars:spark-hive_2.12-3.2.1.jar、spark-hive-thriftserver_2.12-3.2.1.jar、spark-sql_2.12-3.2.1.jar

二、报错集合

1、以为是python问题。
解决:手贱卸载了python,然后yum什么都没了。又重新安装在/usr/python2.7.6这目录,做了软连接到/usr/bin。yum pip也自己装了。

img

2、再次执行脚本,报下面错。不知道是不是spark和什么冲突;三天无法解决,都是这错误。快崩溃了

img

3、输入pyspark,也报错。感觉from pyspark.sql import SparkSession 无法导入。

img

另外,依赖问题,我不想下图文linux然后安装idea,用了sbt打包也没鸟用。。
所以请问黑框的linux,怎么解决实验的依赖问题??

不知道这些是一个原因造成的,还是多个原因。很崩溃~~

引用chatgpt部分指引作答:
在处理依赖问题之前,先解决报错的问题。根据你提供的错误信息,可能是由于Python版本的问题导致的语法错误。Spark 3.0+版本需要使用Python 3.x,而你当前的环境使用的是Python 2.7.6。

建议按照以下步骤进行操作:
先检查python版本,安装路径,修改你的脚本,将python改为python3,确保使用的是Python 3.x版本。例如:

from pyspark.sql import SparkSession
....................
use_database = '''use hivetest01'''
......
spark = SparkSession.builder.appName().enableHiveSupport().getOrCreate()

关于依赖问题,你可以尝试使用--jars选项来指定需要加载的额外JAR包。例如,假设你的额外JAR包位于/path/to/extra.jar,可以在spark-submit命令中添加以下参数:

spark-submit --jars /path/to/extra.jar your_script.py

这样Spark会加载指定的JAR包,以满足你的依赖需求。

另外,确保你的依赖包与Spark版本兼容。如果你的Spark版本为3.2.1,可以下载相应版本的Hive相关依赖包。在你提供的信息中,已经有了一些Hive相关的JAR包,可以尝试使用它们。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的信息,可以看出您遇到了多个问题,下面一个一个来解决。

1、 报错信息 "No module named pyspark",可能是因为 Spark 的 Python 库路径没有添加到环境变量中。您可以尝试添加以下代码到您的 Python 脚本中,手动添加 Spark 的 Python 库路径:

import os
import sys

spark_home = os.environ.get('SPARK_HOME', None)
if not spark_home:
    raise ValueError('SPARK_HOME environment variable is not set')

python_path = os.path.join(spark_home, 'python')
py4j_path = os.path.join(spark_home, 'python/lib/py4j-0.10.9-src.zip')
sys.path.insert(0, python_path)
sys.path.insert(0, py4j_path)

from pyspark.sql import SparkSession

2、 报错信息 "java.lang.ClassNotFoundException: org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver",可能是因为您的 Spark jars 中没有包含 Hive Thrift Server 的相关类。您可以尝试添加 spark-hive-thriftserver jar 包到 Spark jars 中,以解决该问题。

3、 输入 pyspark 命令报错 "No module named pyspark",也可能是因为 Spark 的 Python 库路径没有添加到环境变量中。您可以尝试在命令行中手动添加 Spark 的 Python 库路径,再执行 pyspark 命令,例如:

export PYSPARK_PYTHON=/usr/bin/python
export SPARK_HOME=/path/to/spark/
export PATH=$SPARK_HOME/bin:$PATH
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH

pyspark

4、 关于依赖问题,您可以尝试使用 Maven 或 sbt 等工具管理依赖,并在提交 Spark 任务时使用 --jars 参数指定依赖 jar 包的路径,例如:

spark-submit --jars /path/to/jar1,/path/to/jar2 /path/to/your/script.py

其中,/path/to/jar1 和 /path/to/jar2 是您需要使用的依赖 jar 包的路径,/path/to/your/script.py 是您的 Python 脚本路径。

希望这些解决方法能够帮助您解决问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
针对你提出的问题,我会逐一解答:

1、python问题
按照你的描述,这个问题已经解决了,因为你已经重新安装了python并配置好了环境变量。

2、报错
对于这个问题,你需要把具体的错误信息贴出来才能更好地解决。不过,从你的描述中可以看出,这个问题可能与spark和hadoop的版本不兼容有关,或者缺少某些相关的jar包。可以先检查一下你的spark和hadoop的版本是否匹配,然后再检查一下你的spark配置是否正确,并且jar包路径是否正确。

3、pyspark问题
同样地,你需要把具体的错误信息贴出来。不过,从你的描述中可以看出,这个问题可能与你的pyspark安装不正确有关。你可以尝试重新安装pyspark,并且确认你的环境变量是否正确配置。

4、依赖问题
对于黑框的linux,如果你无法直接安装所需依赖,你可以尝试使用conda或者pip来进行安装。另外,如果你有本地的jar包,也可以通过添加classpath的方式来解决依赖问题。

总之,以上是一些针对你的问题所提供的一些可能的解决方案。如果你可以提供更加具体的错误信息,那么我们也可以更加准确地给出解决方案。
如果我的回答解决了您的问题,请采纳!

py版本太低

从错误信息来看,可能是spark和hadoop的版本不兼容导致的错误。因为你使用的spark版本是3.2.1,带的hadoop版本是3.2,但是你又安装了hadoop-3.2.4,这个版本和spark自带的hadoop版本不一致,可能会导致一些问题。建议你使用和spark自带hadoop版本一致的hadoop。

此外,还有以下建议:

1.尝试在pyspark中运行简单的代码,检查pyspark是否正常工作。比如:

pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("example").getOrCreate()
df = spark.read.csv("path/to/file.csv")
df.show()

2.检查是否已经正确设置了SPARK_HOME和HADOOP_HOME环境变量。可以在终端中输入以下命令来检查:

echo $SPARK_HOME
echo $HADOOP_HOME

3.检查spark-hive_2.12-3.2.1.jar、spark-hive-thriftserver_2.12-3.2.1.jar、spark-sql_2.12-3.2.1.jar这三个包是否已经添加到CLASSPATH环境变量中。

4.查看相关日志,可以使用以下命令查看spark-submit执行的日志:

spark-submit --class xxx --master yarn --deploy-mode client --executor-memory 1g --num-executors 1 --executor-cores 2 xxx.jar >stdout.log 2>stderr.log &

stderr.log中会显示详细的错误信息。

希望这些建议能对你的问题有所帮助!