一、实验概述

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 运行原理分析

  1. textFile:从HDFS读取文本文件,生成初始RDD

  2. flatMap:将每行文本拆分为单词

  3. map:将每个单词映射为键值对

  4. reduceByKey:对相同key的value进行累加

  5. 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内存参数

任务卡顿

检查资源分配与数据倾斜


八、实验总结

通过本次实验,我们完成了:

  1. Spark单机环境搭建与配置

  2. RDD编程模型的实践应用

  3. WordCount经典案例的完整实现

  4. Scala基础语法的学习

  5. 大数据安全机制的初步了解

Spark作为当前主流的大数据处理框架,其内存计算特性和丰富的API生态使其成为企业级数据处理的首选工具。掌握Spark开发技能,将为后续学习Spark SQL、Spark Streaming等高级组件奠定坚实基础。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐