一、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-version2.3 Windows 系统安装 JDK
- 访问 Oracle JDK 下载页面 或 Adoptium
- 下载 Windows x64 Installer
- 双击安装,记住安装路径(如
C:\Program Files\Java\jdk-11) - 配置环境变量:
JAVA_HOME=C:\Program Files\Java\jdk-11Path添加%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-version3.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.tgz4.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-shellwhichpyspark5.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// 退出:quit6.3 访问 Spark Web UI
启动 Spark Shell 后,打开浏览器访问:
http://localhost:4040Web 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.07.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-jdk9.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=40419.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=python39.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.conf9.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.sh | Spark 环境配置 |
/usr/local/spark/conf/spark-defaults.conf | Spark 默认参数 |
/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 集群 |
创作不易,如果觉得有帮助,请点赞、收藏、关注支持一下!