Spark 应用开发实验教程:从环境搭建到WordCount实战
一、实验概述
1.1 实验目标
-
掌握Spark安装与环境配置方法
-
理解RDD基本原理与操作方式
-
独立完成WordCount程序开发与运行
-
熟悉Scala基本语法与Spark编程规范
-
了解Hadoop/Spark安全机制
1.2 前置条件
-
Linux操作系统(CentOS/Ubuntu)
-
已安装JDK 1.8
-
已部署Hadoop环境(伪分布或全分布)
二、Spark环境搭建
2.1 系统环境检查
在开始前,请确认基础环境已就绪:
java -version
hadoop version
2.2 Spark安装步骤
步骤1:下载并解压Spark
wget https://archive.apache.org/dist/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -zxvf spark-3.3.2-bin-hadoop3.tgz -C /usr/local/
mv /usr/local/spark-3.3.2-bin-hadoop3 /usr/local/spark
步骤2:配置环境变量
编辑 ~/.bashrc文件:
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
生效配置:
source ~/.bashrc
步骤3:验证安装
spark-shell
出现 scala>提示符即表示安装成功。
三、RDD编程基础
3.1 RDD核心概念
RDD(Resilient Distributed Dataset)是Spark的核心抽象,具有以下特性:
-
不可变(Immutable)
-
可分区(Partitioned)
-
分布式(Distributed)
-
支持并行计算
3.2 RDD操作类型
|
操作类型 |
说明 |
常见算子 |
|---|---|---|
|
Transformation |
转换操作,惰性执行 |
map、filter、flatMap、reduceByKey |
|
Action |
行动操作,触发计算 |
count、collect、saveAsTextFile |
3.3 基础操作演示
// 创建SparkContext(spark-shell中已自动创建为sc)
val rdd = sc.textFile("/input/test.txt")
// 转换操作
val words = rdd.flatMap(_.split(" "))
val wordPairs = words.map(word => (word, 1))
// 行动操作
val result = wordPairs.reduceByKey(_ + _)
result.collect()
四、WordCount实战开发
4.1 准备实验数据
步骤1:创建HDFS输入目录
hdfs dfs -mkdir /input
步骤2:上传测试文件
echo "hello spark hello scala" > test.txt
hdfs dfs -put test.txt /input
4.2 WordCount程序开发
完整Scala代码
val rdd = sc.textFile("/input")
val wordCount = rdd
.flatMap(_.split(" ")) // 切分单词
.map((_, 1)) // 映射为(word, 1)
.reduceByKey(_ + _) // 按key聚合
wordCount.saveAsTextFile("/output/wc") // 保存结果
查看运行结果
hdfs dfs -cat /output/wc/*
4.3 运行原理分析
-
textFile:从HDFS读取文本文件,生成初始RDD
-
flatMap:将每行文本拆分为单词
-
map:将每个单词映射为键值对
-
reduceByKey:对相同key的value进行累加
-
saveAsTextFile:将结果写入HDFS
五、Scala语言基础
5.1 变量与函数
// 变量定义
val immutableVar = "不可变变量" // 推荐优先使用
var mutableVar = "可变变量"
// 函数定义
def add(x: Int, y: Int): Int = x + y
// 匿名函数
val multiply = (x: Int) => x * 2
5.2 集合操作
// List
val list = List(1, 2, 3)
// Map
val map = Map("a" -> 1, "b" -> 2)
// Tuple
val tuple = (1, "spark", true)
5.3 Hello Spark程序
object HelloSpark {
def main(args: Array[String]): Unit = {
println("Hello Spark!")
}
}
六、Hadoop/Spark安全机制
6.1 安全机制组成
-
认证(Authentication):Kerberos认证协议
-
授权(Authorization):ACL访问控制、Apache Ranger
-
网络隔离:VLAN划分、防火墙策略
-
数据加密:传输层加密、存储加密
-
完整性校验:Checksum、数字签名
6.2 Kerberos认证
优点:
-
安全性高,支持双向认证
-
广泛应用于企业级集群
缺点:
-
配置复杂
-
运维成本较高
-
对性能有一定影响
七、常见问题与解决方案
7.1 环境配置问题
|
问题描述 |
解决方案 |
|---|---|
|
spark-shell启动失败 |
检查JAVA_HOME配置 |
|
HDFS连接异常 |
确认Hadoop服务正常运行 |
|
权限不足 |
检查HDFS目录权限 |
7.2 运行时错误
|
问题描述 |
解决方案 |
|---|---|
|
OutOfMemoryError |
调整executor内存参数 |
|
任务卡顿 |
检查资源分配与数据倾斜 |
八、实验总结
通过本次实验,我们完成了:
-
Spark单机环境搭建与配置
-
RDD编程模型的实践应用
-
WordCount经典案例的完整实现
-
Scala基础语法的学习
-
大数据安全机制的初步了解
Spark作为当前主流的大数据处理框架,其内存计算特性和丰富的API生态使其成为企业级数据处理的首选工具。掌握Spark开发技能,将为后续学习Spark SQL、Spark Streaming等高级组件奠定坚实基础。
更多推荐


所有评论(0)