在Google Cloud Dataproc安装PySpark后出现SPARK_HOME找不到的问题
为什么之前没设SPARK_HOME也能正常运行?
Google Cloud Dataproc集群是预配置好完整Spark环境的,系统级的Spark已经把spark-submit等命令的路径加入了系统PATH,并且内部已经处理了SPARK_HOME的指向(不需要用户手动设置环境变量)。你之前提交任务时调用的是集群自带的、经过优化配置的Spark工具链,所以不需要额外设置就能正常工作。
安装pyspark后报错的原因
当你执行pip3 install pyspark时,会在系统中安装一个独立的Python版Spark API包,但这个包不包含完整的Spark集群二进制文件(比如spark-class这类核心执行文件)。而且pip安装的spark-submit会覆盖系统默认的路径(通常会放到/usr/local/bin),当你提交任务时,调用的是这个不完整的pip版spark-submit,它找不到集群自带的Spark核心文件,就会抛出Could not find valid SPARK_HOME和spark-class: No such file or directory的错误。
解决步骤
优先推荐:卸载pip安装的pyspark
Dataproc自带的Spark已经包含了完整的Python API,完全满足任务需求,不需要额外安装。执行命令:pip3 uninstall -y pyspark卸载后,系统会自动恢复到使用集群自带的
spark-submit,问题即可解决。如果需要特定版本的pyspark(谨慎操作)
如果你确实需要和集群Spark版本匹配的pyspark包,先查看集群Spark版本(执行spark-submit --version),然后安装对应版本:pip3 install pyspark==<你的集群Spark版本号>安装后,必须确保系统优先调用集群自带的
spark-submit:- 查看当前
spark-submit路径:which spark-submit,如果返回/usr/local/bin/spark-submit(pip安装的路径),需要调整PATH: - 执行
export PATH=/usr/lib/spark/bin:$PATH,把集群Spark的bin目录放到PATH最前面 - 可以把这条命令加入
~/.bashrc或者集群的初始化脚本中,确保每次登录都生效
- 查看当前
验证修复效果
执行which spark-submit,确认返回路径是/usr/lib/spark/bin/spark-submit,然后重新提交任务,应该就能正常运行了。
内容的提问来源于stack exchange,提问作者user5574376

