Spark 安装与使用完全指南【保姆级教程】
2026/5/21 23:38:08 网站建设 项目流程

一、Spark 简介与环境准备

1.1 什么是 Apache Spark?

Apache Spark 是一个开源的统一分析引擎,用于大规模数据处理。它最初由加州大学伯克利分校的 AMPLab 开发,于 2014 年成为 Apache 顶级项目。Spark 以其内存计算能力著称,相比传统的 MapReduce 框架,性能提升可达10-100 倍

Spark 的核心特性:

特性说明
速度快内存计算,DAG 优化执行引擎
🔄易用性支持 Java、Scala、Python、R 语言
🔗通用性集成 SQL、流处理、机器学习、图计算
🏃随处运行支持 Standalone、YARN、Mesos、Kubernetes

Spark 核心组件架构图:

1.2 环境准备清单

在开始安装之前,请确保你的系统满足以下要求:

硬件要求:

  • CPU:2 核及以上
  • 内存:4GB 及以上(推荐 8GB)
  • 磁盘空间:至少 10GB 可用空间

软件要求:

  • 操作系统:Linux(推荐 Ubuntu 22.04)、macOS、Windows
  • JDK:1.8 或 11(推荐 OpenJDK 11)
  • Python:3.8 及以上(如果使用 PySpark)
  • 网络:能够访问 Apache 官网下载资源

二、JDK 安装与配置

Spark 基于 Java 开发,因此必须先安装 JDK。

2.1 Ubuntu/Debian 系统安装 OpenJDK

# 更新软件包索引sudoaptupdate# 安装 OpenJDK 11sudoaptinstall-yopenjdk-11-jdk# 验证安装java-version

预期输出:

openjdk version "11.0.21" 2023-10-17 OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04) OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

2.2 CentOS/RHEL 系统安装 OpenJDK

# 安装 OpenJDK 11sudoyuminstall-yjava-11-openjdk-devel# 验证安装java-version

2.3 Windows 系统安装 JDK

  1. 访问 Oracle JDK 下载页面 或 Adoptium
  2. 下载 Windows x64 Installer
  3. 双击安装,记住安装路径(如C:\Program Files\Java\jdk-11
  4. 配置环境变量:
    • JAVA_HOME=C:\Program Files\Java\jdk-11
    • Path添加%JAVA_HOME%\bin

2.4 配置 JAVA_HOME 环境变量(Linux)

# 编辑 ~/.bashrc 或 ~/.zshrcvim~/.bashrc# 添加以下内容exportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64exportPATH=$JAVA_HOME/bin:$PATH# 使配置生效source~/.bashrc# 验证echo$JAVA_HOME

三、Scala 安装与配置

Spark 使用 Scala 编写,虽然 Spark 3.x 已经内置了 Scala 运行时,但安装 Scala 编译器有助于后续开发和调试。

3.1 使用 SDKMAN 安装 Scala(推荐)

SDKMAN 是管理多个 SDK 版本的利器:

# 安装 SDKMANcurl-s"https://get.sdkman.io"|bash# 使 SDKMAN 生效source"$HOME/.sdkman/bin/sdkman-init.sh"# 安装 Scala 2.12.18(与 Spark 3.5 兼容)sdkinstallscala2.12.18# 验证安装scala-version

预期输出:

Scala code runner version 2.12.18 -- Copyright 2002-2023, LAMP/EPFL and Lightbend, Inc.

3.2 Ubuntu 直接安装 Scala

# 下载 Scala 2.12.18wgethttps://downloads.lightbend.com/scala/2.12.18/scala-2.12.18.deb# 安装sudodpkg-iscala-2.12.18.deb# 验证scala-version

3.3 手动安装 Scala

# 下载并解压cd~/Downloadswgethttps://downloads.lightbend.com/scala/2.12.18/scala-2.12.18.tgztar-xzfscala-2.12.18.tgzsudomvscala-2.12.18 /usr/local/scala# 配置环境变量echo'export SCALA_HOME=/usr/local/scala'>>~/.bashrcecho'export PATH=$SCALA_HOME/bin:$PATH'>>~/.bashrcsource~/.bashrc# 验证scala-version

四、Spark 下载与安装

4.1 下载 Spark 3.5.0

访问 Apache Spark 官方下载页面:

选择预编译版本:

  • Spark 版本:3.5.0
  • 包类型:Pre-built for Apache Hadoop 3.3 and later
  • 下载链接https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
# 使用 wget 下载(推荐,速度较快)cd~/Downloadswgethttps://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz# 或者使用国内镜像加速wgethttps://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz

4.2 解压与安装

# 解压到 /usr/local 目录sudotar-xzf~/Downloads/spark-3.5.0-bin-hadoop3.tgz-C/usr/local/# 重命名为 spark(方便后续使用)cd/usr/local/sudomvspark-3.5.0-bin-hadoop3 spark# 修改目录权限(将 hadoop 替换为你的用户名)sudochown-R$(whoami):$(whoami)/usr/local/spark# 查看安装目录结构ls-la/usr/local/spark/

目录结构说明:

/usr/local/spark/ ├── bin/ # 可执行脚本(spark-shell, pyspark, spark-submit 等) ├── conf/ # 配置文件 ├── data/ # 示例数据 ├── examples/ # 示例程序 ├── jars/ # Spark 核心 JAR 包 ├── python/ # PySpark 相关文件 ├── sbin/ # 集群管理脚本 └── yarn/ # YARN 集成文件

4.3 配置 Spark 环境文件

cd/usr/local/spark/conf# 复制模板文件cpspark-env.sh.template spark-env.shcpspark-defaults.conf.template spark-defaults.conf# 编辑 spark-env.shvimspark-env.sh

spark-env.sh末尾添加:

# Java 环境exportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64# Spark 主目录exportSPARK_HOME=/usr/local/spark# Python 环境(如果使用 PySpark)exportPYSPARK_PYTHON=python3exportPYSPARK_DRIVER_PYTHON=python3# 可选:配置 Spark 日志级别exportSPARK_LOG_LEVEL=WARN

五、环境变量配置

5.1 配置系统环境变量

# 编辑 ~/.bashrcvim~/.bashrc

添加以下内容:

# ========== Spark 环境变量 ==========exportSPARK_HOME=/usr/local/sparkexportPATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH# Python 路径(PySpark 需要)exportPYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9.7-src.zip:$PYTHONPATH# 可选:配置 Spark 本地 IP(避免绑定错误)exportSPARK_LOCAL_IP=127.0.0.1
# 使配置生效source~/.bashrc# 验证环境变量echo$SPARK_HOMEwhichspark-shellwhichpyspark

5.2 配置 Spark 日志级别(可选)

cd/usr/local/spark/confcplog4j2.properties.template log4j2.properties# 修改日志级别为 WARN,减少控制台输出sed-i's/rootLogger.level = info/rootLogger.level = warn/'log4j2.properties

六、Spark 本地模式验证

6.1 运行 Spark 示例程序

Spark 内置了计算 Pi 的示例程序,用于验证安装是否成功:

cd/usr/local/spark# 运行 SparkPi 示例(计算 Pi 值)./bin/run-example SparkPi10

预期输出(部分):

Pi is roughly 3.14159...

6.2 启动 Spark Shell(Scala)

# 直接输入 spark-shellspark-shell

成功启动后,你会看到:

在 Spark Shell 中执行简单计算:

// 创建一个 RDDvaldata=Array(1,2,3,4,5)valdistData=sc.parallelize(data)// 计算总和distData.reduce((a,b)=>a+b)// 输出: res0: Int = 15// 退出:quit

6.3 访问 Spark Web UI

启动 Spark Shell 后,打开浏览器访问:

http://localhost:4040

Web UI 主要功能:

  • Jobs:查看任务执行情况
  • Stages:查看 Stage 划分
  • Storage:查看缓存数据
  • Environment:查看运行环境配置
  • Executors:查看执行器状态
  • SQL:查看 SQL 查询执行计划

七、PySpark 安装与配置

7.1 安装 Python 依赖

# 确保已安装 Python 3 和 pippython3--versionpip3--version# 安装 PySpark(包含 py4j)pip3installpyspark==3.5.0# 或者安装完整版(包含 pandas、numpy 等依赖)pip3installpyspark[sql,pandas_on_spark]==3.5.0

7.2 验证 PySpark 安装

# 启动 PySpark Shellpyspark

成功启动后:

执行简单测试:

# 创建一个 DataFramedf=spark.createDataFrame([(1,"Alice"),(2,"Bob"),(3,"Charlie")],["id","name"])# 显示数据df.show()# 输出:# +---+-------+# | id| name|# +---+-------+# | 1| Alice|# | 2| Bob|# | 3|Charlie|# +---+-------+# 退出exit()

7.3 在 Python 脚本中使用 PySpark

创建测试文件test_pyspark.py

frompyspark.sqlimportSparkSession# 创建 SparkSessionspark=SparkSession.builder \.appName("MyFirstSparkApp")\.master("local[*]")\.getOrCreate()# 读取示例数据data=[("Java",20000),("Python",100000),("Scala",3000)]columns=["Language","Users"]df=spark.createDataFrame(data,columns)# 显示数据print("=== 编程语言流行度 ===")df.show()# 简单统计df.select("Users").summary("count","min","max").show()# 停止 SparkSessionspark.stop()

运行脚本:

python3 test_pyspark.py

八、Spark Shell 交互式编程

8.1 Scala Spark Shell 常用操作

// ===== 1. 创建 RDD =====vallines=sc.textFile("/usr/local/spark/README.md")// ===== 2. 转换操作(Transformations)=====vallineLengths=lines.map(s=>s.length)valwords=lines.flatMap(line=>line.split(" "))valfiltered=words.filter(word=>word.contains("Spark"))// ===== 3. 行动操作(Actions)=====lineLengths.reduce((a,b)=>a+b)filtered.count()filtered.take(10).foreach(println)// ===== 4. 使用 DataFrame(Spark SQL)=====importspark.implicits._caseclassPerson(name:String,age:Int)valpeople=Seq(Person("Alice",25),Person("Bob",30),Person("Charlie",35)).toDF()people.show()people.filter($"age">28).show()people.groupBy("age").count().show()// ===== 5. 读取 JSON 数据 =====valdf=spark.read.json("/usr/local/spark/examples/src/main/resources/people.json")df.show()df.printSchema()

8.2 PySpark 常用操作

frompyspark.sqlimportSparkSessionfrompyspark.sql.functionsimportcol,count,avg spark=SparkSession.builder.appName("Demo").getOrCreate()# 创建 DataFramedf=spark.createDataFrame([("Alice","Sales",3000),("Bob","Engineering",5000),("Charlie","Sales",4000),("David","Engineering",6000)],["name","dept","salary"])# 基本查询df.show()df.select("name","salary").show()df.filter(col("salary")>3500).show()# 聚合操作df.groupBy("dept").agg(count("*").alias("count"),avg("salary").alias("avg_salary")).show()# SQL 查询df.createOrReplaceTempView("employees")spark.sql("SELECT dept, AVG(salary) as avg_salary FROM employees GROUP BY dept").show()

九、常见问题与解决方案

9.1 问题一:Java 版本不兼容

错误信息:

Unsupported class file major version 61

原因:Spark 3.5 需要 Java 11 或更高版本,但你可能使用了 Java 17+ 或 Java 8。

解决方案:

# 检查 Java 版本java-version# 如果版本不对,切换 Java 版本sudoupdate-alternatives--configjava# 或者重新安装 OpenJDK 11sudoaptinstallopenjdk-11-jdk

9.2 问题二:端口 4040 被占用

错误信息:

Failed to bind to: /0.0.0.0:4040

解决方案:

# 查找占用 4040 端口的进程lsof-i:4040# 终止进程(将 <PID> 替换为实际进程号)kill-9<PID># 或者启动 Spark 时指定其他端口spark-shell--confspark.ui.port=4041

9.3 问题三:Python 版本不匹配

错误信息:

Py4JJavaError: An error occurred while calling o45.showString

解决方案:

# 确保 Python 版本为 3.8+python3--version# 安装匹配的 PySpark 版本pip3installpyspark==3.5.0# 设置 Python 环境变量exportPYSPARK_PYTHON=python3exportPYSPARK_DRIVER_PYTHON=python3

9.4 问题四:内存不足(OOM)

错误信息:

java.lang.OutOfMemoryError: Java heap space

解决方案:

# 启动时增加内存配置spark-shell --driver-memory 4g --executor-memory 4g# 或者在 spark-defaults.conf 中配置echo"spark.driver.memory 4g">>/usr/local/spark/conf/spark-defaults.confecho"spark.executor.memory 4g">>/usr/local/spark/conf/spark-defaults.conf

9.5 问题五:权限不足

错误信息:

Permission denied: /usr/local/spark/logs

解决方案:

# 修改 Spark 目录权限sudochown-R$(whoami):$(whoami)/usr/local/spark# 或者创建日志目录并授权sudomkdir-p/usr/local/spark/logssudochmod777/usr/local/spark/logs

十、总结

10.1 安装流程回顾

┌─────────────────────────────────────────────────────────────┐ │ Spark 安装流程图 │ ├─────────────────────────────────────────────────────────────┤ │ 1. 安装 JDK 11+ → 配置 JAVA_HOME │ │ ↓ │ │ 2. 安装 Scala 2.12 → 配置 SCALA_HOME │ │ ↓ │ │ 3. 下载 Spark 3.5.0 → 解压到 /usr/local/spark │ │ ↓ │ │ 4. 配置 spark-env.sh → 设置环境变量 │ │ ↓ │ │ 5. 配置 ~/.bashrc → source ~/.bashrc │ │ ↓ │ │ 6. 运行 SparkPi 验证 → spark-shell / pyspark │ └─────────────────────────────────────────────────────────────┘

10.2 关键配置文件汇总

文件路径作用
~/.bashrc用户环境变量配置
/usr/local/spark/conf/spark-env.shSpark 环境配置
/usr/local/spark/conf/spark-defaults.confSpark 默认参数
/usr/local/spark/conf/log4j2.properties日志级别配置

10.3 常用命令速查表

命令说明
spark-shell启动 Scala 交互式 Shell
pyspark启动 Python 交互式 Shell
spark-submit提交 Spark 应用程序
spark-sql启动 Spark SQL CLI
./sbin/start-all.sh启动 Standalone 集群(所有服务)
./sbin/stop-all.sh停止 Standalone 集群

创作不易,如果觉得有帮助,请点赞、收藏、关注支持一下!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询