欢迎光临
我们一直在努力

Spark 安装与使用完全指南【保姆级教程】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

一、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

# 更新软件包索引
sudo apt update

# 安装 OpenJDK 11
sudo apt install -y openjdk-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 11
sudo yum install -y java-11-openjdk-devel

# 验证安装
java -version

2.3 Windows 系统安装 JDK

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

    # 编辑 ~/.bashrc 或 ~/.zshrc
    vim ~/.bashrc

    # 添加以下内容
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH

    # 使配置生效
    source ~/.bashrc

    # 验证
    echo $JAVA_HOME

    在这里插入图片描述


    三、Scala 安装与配置

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

    3.1 使用 SDKMAN 安装 Scala(推荐)

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

    # 安装 SDKMAN
    curl -s "https://get.sdkman.io" | bash

    # 使 SDKMAN 生效
    source "$HOME/.sdkman/bin/sdkman-init.sh"

    # 安装 Scala 2.11.8
    sdk install scala 2.11.8

    # 验证安装
    scala -version

    预期输出:

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

    3.2 Ubuntu 直接安装 Scala

    # 下载 Scala 2.11.8
    wget https://downloads.lightbend.com/scala/2.11.8/scala-2.12.18.deb

    # 安装
    sudo dpkg -i scala-2.11.8.deb

    # 验证
    scala -version

    3.3 手动安装 Scala

    # 下载并解压
    cd ~/Downloads
    wget https://downloads.lightbend.com/scala/2.11.8/scala-2.12.18.tgz
    tar -xzf scala-2.11.8.tgz
    sudo mv scala-2.11.8 /usr/local/scala

    # 配置环境变量
    echo 'export SCALA_HOME=/usr/local/scala' >> ~/.bashrc
    echo 'export PATH=$SCALA_HOME/bin:$PATH' >> ~/.bashrc
    source ~/.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 ~/Downloads
    wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz

    # 或者使用国内镜像加速
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz

    4.2 解压与安装

    # 解压到 /usr/local 目录
    sudo tar -xzf ~/Downloads/spark-3.5.0-bin-hadoop3.tgz -C /usr/local/

    # 重命名为 spark(方便后续使用)
    cd /usr/local/
    sudo mv spark-3.5.0-bin-hadoop3 spark

    # 修改目录权限(将 hadoop 替换为你的用户名)
    sudo chown -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

    # 复制模板文件
    cp spark-env.sh.template spark-env.sh
    cp spark-defaults.conf.template spark-defaults.conf

    # 编辑 spark-env.sh
    vim spark-env.sh

    在 spark-env.sh 末尾添加:

    # Java 环境
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

    # Spark 主目录
    export SPARK_HOME=/usr/local/spark

    # Python 环境(如果使用 PySpark)
    export PYSPARK_PYTHON=python3
    export PYSPARK_DRIVER_PYTHON=python3

    # 可选:配置 Spark 日志级别
    export SPARK_LOG_LEVEL=WARN


    五、环境变量配置

    5.1 配置系统环境变量

    # 编辑 ~/.bashrc
    vim ~/.bashrc

    添加以下内容:

    # ========== Spark 环境变量 ==========
    export SPARK_HOME=/usr/local/spark
    export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

    # Python 路径(PySpark 需要)
    export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9.7-src.zip:$PYTHONPATH

    # 可选:配置 Spark 本地 IP(避免绑定错误)
    export SPARK_LOCAL_IP=127.0.0.1

    # 使配置生效
    source ~/.bashrc

    # 验证环境变量
    echo $SPARK_HOME
    which spark-shell
    which pyspark

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

    cd /usr/local/spark/conf
    cp log4j2.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 SparkPi 10

    预期输出(部分):

    Pi is roughly 3.14159…

    6.2 启动 Spark Shell(Scala)

    # 直接输入 spark-shell
    spark-shell

    成功启动后,你会看到:在这里插入图片描述

    在 Spark Shell 中执行简单计算:

    // 创建一个 RDD
    val data = Array(1, 2, 3, 4, 5)
    val distData = 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 和 pip
    python3 –version
    pip3 –version

    # 安装 PySpark(包含 py4j)
    pip3 install pyspark==3.5.0

    # 或者安装完整版(包含 pandas、numpy 等依赖)
    pip3 install pyspark[sql,pandas_on_spark]==3.5.0

    7.2 验证 PySpark 安装

    # 启动 PySpark Shell
    pyspark

    成功启动后:

    在这里插入图片描述

    执行简单测试:

    # 创建一个 DataFrame
    df = 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:

    from pyspark.sql import SparkSession

    # 创建 SparkSession
    spark = 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()

    # 停止 SparkSession
    spark.stop()

    运行脚本:

    python3 test_pyspark.py


    八、Spark Shell 交互式编程

    8.1 Scala Spark Shell 常用操作

    // ===== 1. 创建 RDD =====
    val lines = sc.textFile("/usr/local/spark/README.md")

    // ===== 2. 转换操作(Transformations)=====
    val lineLengths = lines.map(s => s.length)
    val words = lines.flatMap(line => line.split(" "))
    val filtered = 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)=====
    import spark.implicits._

    case class Person(name: String, age: Int)
    val people = 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 数据 =====
    val df = spark.read.json("/usr/local/spark/examples/src/main/resources/people.json")
    df.show()
    df.printSchema()

    8.2 PySpark 常用操作

    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col, count, avg

    spark = SparkSession.builder.appName("Demo").getOrCreate()

    # 创建 DataFrame
    df = 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 版本
    sudo update-alternatives –config java

    # 或者重新安装 OpenJDK 11
    sudo apt install openjdk-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 –conf spark.ui.port=4041

    9.3 问题三:Python 版本不匹配

    错误信息:

    Py4JJavaError: An error occurred while calling o45.showString

    解决方案:

    # 确保 Python 版本为 3.8+
    python3 –version

    # 安装匹配的 PySpark 版本
    pip3 install pyspark==3.5.0

    # 设置 Python 环境变量
    export PYSPARK_PYTHON=python3
    export PYSPARK_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.conf
    echo "spark.executor.memory 4g" >> /usr/local/spark/conf/spark-defaults.conf

    9.5 问题五:权限不足

    错误信息:

    Permission denied: /usr/local/spark/logs

    解决方案:

    # 修改 Spark 目录权限
    sudo chown -R $(whoami):$(whoami) /usr/local/spark

    # 或者创建日志目录并授权
    sudo mkdir -p /usr/local/spark/logs
    sudo chmod 777 /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 集群

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

    赞(0)
    未经允许不得转载:171主机测评 » Spark 安装与使用完全指南【保姆级教程】
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址