spark在linux上跑起来的核心是:java版本匹配(jdk 8或11)、spark_home与path正确配置($spark_home/bin须置path最前)、spark-env.sh至少配置java_home、spark_driver_memory和pyspark_python三项;缺一即导致spark-shell启动失败或功能异常。

Spark 在 Linux 上能跑起来,核心就三件事:Java 版本对、环境变量通、配置文件不空着。其他花哨步骤都是在这基础上的延伸,没这三条,spark-shell 一启动就报错。
Java 版本必须是 8 或 11,别信“高版本兼容”
Spark 3.3+ 官方明确推荐 JDK 11,但 Spark 3.2 及更早版本在 JDK 17+ 上会直接抛 NoClassDefFoundError;而 JDK 8 是所有 Spark 2.x 和 3.x 的兜底选择。实际部署中发现,Ubuntu 22.04 默认装的是 OpenJDK 11,但 CentOS 7 默认只有 OpenJDK 8——别急着升级,先确认你用的 Spark 版本对应关系:
- Spark 3.5.x → 推荐
openjdk-11-jdk(Ubuntu)或java-11-openjdk-devel(CentOS) - Spark 3.2.x → 必须用
openjdk-8-jdk,否则spark-submit启动时卡在ClassNotFoundException: org.apache.spark.deploy.SparkSubmit - 验证方式不是只看
java -version,还要执行:echo $JAVA_HOME,确保它指向真实 JDK 根目录(如/usr/lib/jvm/java-11-openjdk-amd64),而不是/usr/bin/java这种软链接
SPARK_HOME 和 PATH 必须写进 ~/.bashrc,且顺序不能错
很多用户把 export SPARK_HOME=/opt/spark 写对了,却忘了加 $SPARK_HOME/bin 到 PATH,结果终端认不出 spark-shell;更隐蔽的问题是:如果 HADOOP_HOME/bin 在 PATH 里排在 $SPARK_HOME/bin 前面,某些 Hadoop 自带的 hadoop 命令会覆盖 Spark 的同名脚本,导致 spark-submit --master local 报 UnknownHostException: localhost。
正确写法(追加到 ~/.bashrc 底部):
export SPARK_HOME=/opt/spark export PATH=$SPARK_HOME/bin:$PATH export PYSPARK_PYTHON=python3
注意:$SPARK_HOME/bin 必须在 $PATH 最前面;source ~/.bashrc 后,立刻验证:which spark-shell 输出应为 /opt/spark/bin/spark-shell。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
spark-env.sh 不配等于裸奔,至少填三项
$SPARK_HOME/conf/spark-env.sh 是单机模式下最容易被跳过的文件。不配它,spark-shell 能启动,但一读 HDFS 就连不上,PySpark 加载本地文件也慢得反常。关键三行必须手动补上:
-
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64(路径按你系统实际输出调整) -
export SPARK_DRIVER_MEMORY=2g(低于 4GB 内存机器建议设成1g,否则 shell 启动卡住) -
export PYSPARK_PYTHON=python3(如果 Python 3 不在默认路径,写全路径如/usr/bin/python3)
特别注意:不要复制 spark-env.sh.template 后就以为完事——那个模板文件是空的,直接运行等于没配。另外,如果已装 Hadoop,还需加一行:export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath),否则 sc.textFile("hdfs://...") 会报 ClassNotFoundException: org.apache.hadoop.fs.FileSystem。
验证时别只看 “Pi is roughly”,要测真实路径读写
跑 bin/run-example SparkPi 10 成功,只能说明 JVM 和 Spark core 能通,不代表你的环境真 ready。容易被忽略的硬伤点:
- 用
spark-shell执行:sc.textFile("file:///opt/spark/README.md").count()—— 测试本地文件系统路径解析是否正常 - 如果装了 Hadoop,再试:
sc.textFile("hdfs://localhost:9000/test.txt").count()—— 确认SPARK_DIST_CLASSPATH生效 - PySpark 下跑:
pyspark --master local[2],然后spark.read.csv("file:///tmp/data.csv").count()—— 验证 Python 层和 DataFrame API 是否可用
最后提醒:Spark 启动日志默认输出到 $SPARK_HOME/logs/,遇到黑屏或卡顿,第一反应不是重装,而是 tail -f $SPARK_HOME/logs/spark-*-org.apache.spark.deploy.master.Master-*.out 看实时错误——90% 的“启动失败”,其实就差一行 JAVA_HOME 没导对。










