Hadoop集群环境下PySpark启动报SyntaxError错误排查求助
PySpark启动报错:SyntaxError问题解决
嘿,我来帮你分析这个问题~先捋下你的环境:Hadoop 3.2.3、Spark 3.1.2、Python 2.7.5、CentOS 7,执行pyspark时触发了语法错误,报错指向pyspark/find_spark_home.py里的print语句。
报错详情
[hadoop@nodo1 ~]$ pyspark Python 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Traceback (most recent call last): File "/opt/hadoop/spark/python/pyspark/shell.py", line 29, in <module> from pyspark.context import SparkContext File "/opt/hadoop/spark/python/pyspark/__init__.py", line 53, in <module> from pyspark.rdd import RDD, RDDBarrier File "/opt/hadoop/spark/python/pyspark/rdd.py", line 34, in <module> from pyspark.java_gateway import local_connect_and_auth File "/opt/hadoop/spark/python/pyspark/java_gateway.py", line 31, in <module> from pyspark.find_spark_home import _find_spark_home File "/opt/hadoop/spark/python/pyspark/find_spark_home.py", line 68 print("Could not find valid SPARK_HOME while searching {0}".format(paths), file=sys.stderr) ^ SyntaxError: invalid syntax
问题根源
这个错误的核心是Spark版本与Python版本不兼容:Spark从3.0版本开始就彻底停止支持Python 2.x了,官方明确要求使用Python 3.6及以上版本。你用的Spark 3.1.2的PySpark代码里已经采用了Python 3专属语法(比如带file参数的print()函数写法——在Python 2里print是语句,这么写直接就会触发语法错误),而你当前用的是Python 2.7.5,自然跑不起来。
解决方法
给你两个可行方案,优先推荐第一个:
- 方案一:升级Python到3.6+版本
- 在CentOS 7上安装Python 3.6或更高版本(比如Python3.8),可以用yum或者源码编译安装。
- 修改你的
.bashrc里的Python相关配置,替换成Python3的路径:export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=/usr/bin/python3 - 执行
source ~/.bashrc让配置生效,之后再运行pyspark应该就能正常启动了。
- 方案二:降级Spark到2.x版本
如果一定要保留Python2.7,那只能把Spark降级到2.4.x系列(比如Spark2.4.8),这个版本还支持Python2.7。不过不推荐这个方案,因为Python2已经停止维护多年,后续会有安全漏洞和兼容性问题。
另外,你的.bashrc里其他Hadoop和Spark的配置都是没问题的,核心问题就是版本不匹配。
内容的提问来源于stack exchange,提问作者Dom Rl
相关产品推荐
相关产品推荐

