news 2026/5/28 6:09:05

保姆级教程:在Ubuntu 22.04上从零搭建Spark 3.4.1单机版(附spark-shell初体验)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上从零搭建Spark 3.4.1单机版(附spark-shell初体验)

从零构建Spark 3.4.1开发环境:Ubuntu 22.04实战指南

在数据驱动的时代,Apache Spark以其卓越的内存计算能力和丰富的生态组件,成为大数据处理领域的标杆工具。对于开发者而言,快速搭建一个可用的Spark本地环境,是探索分布式计算的第一步。本文将带你用最新稳定版Spark 3.4.1和Ubuntu 22.04 LTS,构建一个即装即用的开发环境,避开常见陷阱,直达核心功能体验。

1. 环境准备与基础配置

Ubuntu 22.04作为长期支持版本,提供了稳定的软件基础。但Spark运行需要特定版本的Java环境,这是第一个需要解决的依赖问题。许多初学者在这里踩坑,主要是因为OpenJDK不同版本间的兼容性差异。

推荐使用OpenJDK 11,这是目前Spark 3.x官方认证的稳定版本。在终端执行以下命令完成安装:

sudo apt update sudo apt install -y openjdk-11-jdk

安装完成后,验证Java版本是否正确:

java -version

预期看到类似输出:

openjdk version "11.0.20.1" 2023-08-24 OpenJDK Runtime Environment (build 11.0.20.1+1-post-Ubuntu-0ubuntu122.04) OpenJDK 64-Bit Server VM (build 11.0.20.1+1-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

提示:如果系统已安装其他Java版本,可通过sudo update-alternatives --config java切换默认版本

接下来配置JAVA_HOME环境变量,这是Spark正常工作的关键。首先定位Java安装路径:

sudo update-alternatives --config java

记录路径(如/usr/lib/jvm/java-11-openjdk-amd64),然后编辑~/.bashrc文件:

echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc

2. Spark 3.4.1安装与配置

访问 Spark官网下载页 ,选择3.4.1版本,包类型选择"Pre-built for Apache Hadoop 3.3 and later"。这个预编译版本已经包含常用Hadoop依赖,适合独立模式运行。

下载并解压到合适目录:

wget https://archive.apache.org/dist/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz tar -xzf spark-3.4.1-bin-hadoop3.tgz sudo mv spark-3.4.1-bin-hadoop3 /opt/spark

配置Spark环境变量:

echo 'export SPARK_HOME=/opt/spark' >> ~/.bashrc echo 'export PATH=$SPARK_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc

验证安装是否成功:

spark-submit --version

应该看到包含以下信息的输出:

Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 3.4.1 /_/

3. 独立模式启动与验证

Spark支持多种部署模式,对于本地开发环境,Standalone模式最为简单直接。这种模式不需要额外依赖Hadoop集群,使用Spark自带的资源管理器即可。

启动Spark独立集群:

$SPARK_HOME/sbin/start-all.sh

检查进程是否正常运行:

jps

应该看到至少包含以下两个进程:

Master Worker

访问Spark Web UI(默认端口8080),在浏览器打开:

http://localhost:8080

Web UI提供了丰富的集群状态信息,包括:

  • 活跃Worker节点
  • 可用内存和CPU资源
  • 运行中的应用程序
  • 已完成作业的历史记录

注意:如果8080端口被占用,Spark会自动尝试后续端口。查看日志文件$SPARK_HOME/logs/*可以获取实际使用的端口号

4. spark-shell交互式体验

spark-shell是学习Spark API的最佳工具,这个基于Scala的REPL环境已经预加载了Spark上下文,可以直接执行代码片段。启动spark-shell:

spark-shell

初次启动会看到大量日志输出,最后出现Scala提示符:

scala>

让我们运行一个简单的WordCount示例,体验Spark的分布式计算能力:

val textFile = sc.textFile("README.md") // 读取Spark自带的README文件 val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.collect().foreach(println)

这个短短几行代码完成了:

  1. 读取文本文件
  2. 按空格分割每行文本
  3. 为每个单词计数
  4. 汇总相同单词的计数
  5. 输出结果

观察控制台输出的同时,可以访问Web UI(http://localhost:4040)查看作业执行详情。这个界面展示了:

  • 作业的DAG(有向无环图)可视化
  • 各个阶段的执行时间
  • 任务分配情况
  • 数据倾斜程度

5. 开发环境优化技巧

为了提高日常开发效率,这里分享几个实用配置技巧:

日志级别调整Spark默认日志级别为INFO,会产生大量输出。在$SPARK_HOME/conf目录下创建log4j2.properties:

name=SparkConfig appender.console.type=Console appender.console.name=console appender.console.layout.type=PatternLayout appender.console.layout.pattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n rootLogger.level=WARN rootLogger.appenderRef.console.ref=console

内存配置优化编辑$SPARK_HOME/conf/spark-defaults.conf:

spark.driver.memory 2g spark.executor.memory 2g

本地开发建议对于单机开发环境,可以设置本地模式参数,避免启动独立集群:

spark-shell --master local[*]

这个命令会使用所有可用CPU核心,适合快速验证代码。

6. 常见问题排查指南

即使按照步骤操作,仍可能遇到各种环境问题。以下是典型问题及解决方案:

Java版本冲突症状:启动时报错"Unsupported major.minor version" 解决:确保使用Java 11,检查JAVA_HOME设置

端口冲突症状:Web UI无法访问或进程启动失败 解决:检查8080、4040端口占用情况,或修改Spark配置:

echo "export SPARK_MASTER_WEBUI_PORT=8989" >> $SPARK_HOME/conf/spark-env.sh

权限问题症状:文件操作被拒绝 解决:确保对/tmp目录有写权限,或修改spark.local.dir配置:

mkdir -p $HOME/spark_temp echo "export SPARK_LOCAL_DIRS=$HOME/spark_temp" >> $SPARK_HOME/conf/spark-env.sh

内存不足症状:作业频繁失败或超时 解决:调整内存参数或减少并行度:

spark-shell --driver-memory 2g --executor-memory 2g

7. 进阶学习路径

成功搭建环境只是第一步,要真正掌握Spark,建议按以下路线深入:

  1. 核心API掌握

    • RDD基础操作(map、filter、reduceByKey)
    • DataFrame/SQL接口
    • 数据集(DataSet)类型安全API
  2. 性能调优

    • 分区策略理解
    • 持久化级别选择
    • 广播变量使用场景
  3. 生态组件探索

    • Spark Streaming实时处理
    • MLlib机器学习库
    • GraphX图计算
  4. 生产部署

    • YARN模式配置
    • 资源调度策略
    • 监控与日志收集

实际项目中,我发现最容易被忽视的是数据序列化配置。在spark-defaults.conf中添加:

spark.serializer org.apache.spark.serializer.KryoSerializer spark.kryo.registrationRequired true

这可以显著提高对象序列化效率,特别是在处理复杂数据结构时。另一个实用技巧是在spark-shell中使用:paste模式粘贴多行代码,避免REPL的逐行解析限制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 6:08:56

E2E-Fly:融合强化学习与可微仿真,实现无人机端到端敏捷飞行控制

1. 项目概述:为什么我们需要E2E-Fly?如果你玩过无人机,或者看过那些顶尖团队在无人机竞速赛中的表现,一定会被它们那种近乎极限的敏捷性和精准控制所震撼。它们能在复杂的障碍赛道中高速穿行,完成急转弯、翻滚、定点悬…

作者头像 李华
网站建设 2026/5/28 6:08:26

E语言软件

链接:https://pan.quark.cn/s/2f4deda166f5

作者头像 李华
网站建设 2026/5/28 6:07:25

极限编程:从工程实践到团队学习系统的深度解析

1. 从工程实践到学习系统:重新审视极限编程的核心价值在我职业生涯的早期,和许多软件工程师一样,我将极限编程(Extreme Programming,简称XP)视为一套严格甚至有些激进的工程实践集合。它的那些规则——结对…

作者头像 李华
网站建设 2026/5/28 6:07:22

MATLAB R2021a离线安装硬件支持包保姆级教程(解决CMSIS下载失败)

MATLAB R2021a离线安装硬件支持包全流程指南(附CMSIS下载失败解决方案)当你身处内网环境或遭遇网络限制时,MATLAB硬件支持包的在线安装可能变成一场噩梦。特别是遇到"CMSIS下载失败"这类报错时,多数教程只会告诉你"…

作者头像 李华
网站建设 2026/5/28 6:07:12

Dreamweaver CS6 零基础入门:从创建第一个HTML文件到发布网页的保姆级指南

Dreamweaver CS6 零基础入门:从创建第一个HTML文件到发布网页的保姆级指南第一次打开Dreamweaver CS6时,那个充满按钮和面板的界面确实会让人感到不知所措。但别担心,每个专业设计师都曾经历过这个阶段。本文将带你一步步走过整个网页创建流程…

作者头像 李华