1. 准备工作
需要准备三台Linux机器,这里采用的是CentOS Stream 9虚拟机,
您也可以采用实体机的方式,两者几乎一致,至少对本实验没有太大的影响。
设置好三台机器的主机名分别为: hadoop1 、 hadoop2 、
hadoop3 ,并设置好hosts文件。
三台机器上都安装好JDK8并配置好相关的环境变量。
确保三台机器可以正常使用网络。
配置好hadoop1机器到其余两台机器的单向免密登陆。
创建三个目录:
mkdir -p /export/servers
mkdir -p /export/software
mkdir -p /export/data
2 .下载Spark
为了保证稳定性和安全性,这里采用的是Spark3.5.2版本,如果需
要其余版本,请自行下载,并参考官方文档修改相关的配置文件。
首先打开Spark存档网站:https://archive.apache.org/dist/spark
找到Spark3.5.2版本,点击下载,下载Linux版本的安装文件 spark-
3.5.2-bin-hadoop3.tgz
然后将下载的文件上传到 hadoop1 机器的 /export/software 目录
中,并在终端里切换到该目录为工作目录:
cd /export/software
3 安装Spark和配置环境变量
3.1 安装Spark
在 hadoop1 机器上执行如下指令,进行Spark的安装:
tar -zvxf spark-3.5.2-bin-hadoop3.tgz -C /export/servers/
接着进入到Spark的安装目录,修改Spark的安装目录文件名为:
spark-3.5.2
mv spark-3.5.2-bin-hadoop3 spark-3.5.2
3.2 配置环境变量
使用如下命令编辑环境变量文件:
vim /etc/profile
在文件底部添加如下内容:
export SPARK_HOME=/export/servers/spark-3.5.2
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使用 source 命令使修改的环境变量生效。
source /etc/profile
4 设置Spark相关的配置
cd /export/servers/spark-3.5.2/conf
4.1 修改spark-env.sh文件
默认是没有这个文件的,只提供了一个模板文件,我们需要复制一
份模板文件作为此配置文件。
cp spark-env.sh.template spark-env.sh
接着我们再使用vim工具在此文件中添加如下内容:
# 配置Java环境
export JAVA_HOME=/export/servers/jdk1.8.0_241
# 指定Master的IP
export SPARK_MASTER_HOST=hadoop1
# 指定Master的端口
export SPARK_MASTER_PORT=7077
export HADOOP_HOME=/export/servers/hadoop-3.3.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
由于我们此前已配置了hosts,因此 SPARK_MASTER_HOST 可以直接设
置为 hadoop1 ,当然,也可以直接写IP地址。
4.2 修改workers文件
与 spark-env.sh 一样,默认值提供了 workers.template 文件,所
以,我们需要先复制一份出来。
cp workers.template workers
接着用vim工具在直接在文件中添加workers机器的主机名:
hadoop2
hadoop3
这里需要注意的是,如果这里添加了 hadoop1 或者没有删除
localhost ,那么hadoop1机器将既做master(主节点)又做slave
(从节点),这里是不建议这样做的。
4.3 分发文件
如果你按照 3 安装Spark和配置环境变量 和 4 设置Spark相关的配置
的流程,分别在hadoop1、hadoop2、hadoop3机器上进行了配置,
那么就不需要分发操作了。分发操作是为了避免在三台机器上做三
次重复的配置工作。
这里我们修改完配置文件后,在hadoop1机器上执行如下指令,就
可以将文件传输到另外两台机器上
scp -r /export/servers/spark-3.5.2/ hadoop2:/export/servers/
scp -r /export/servers/spark-3.5.2/ hadoop3:/export/servers/
scp -r /etc/profile hadoop2:/etc/
scp -r /etc/profile hadoop3:/etc/
这里因为把hadoop1里的环境变量传到了hadoop2和hadoop3里,所
以,这里需要分别在hadoop2,hadoop3里使用 source 命令来使环境变量生效。
source /etc/profile
5 启动Spark集群
因为我们此前配置了环境变量,将spark/sbin目录添加了进来,所以
我们只需要使用 start-all.sh 指令即可。
如果你设置了hadoop的环境变量,这里不建议使用 start-all.sh
指令,因为两者会冲突,优先采用先配置的那个目录运行,可以使
用完整路径的启动指令:
/export/servers/spark-3.5.2/sbin/start-all.sh
6.spark shell的使用
6.1 启动Shell
# Scala Shell
./bin/spark-shell
# Python Shell
./bin/pyspark
6.2 基础示例
// 读取文本文件
val textFile = spark.read.textFile("README.md")
// 统计行数
textFile.count()
// 过滤包含"Spark"的行
val linesWithSpark = textFile.filter(line => line.contains("Spark"))
6.3 案例:统计词频(WordCount)
val textFile = sc.textFile("README.md")
val words = textFile.flatMap(line => line.split(" "))
val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _)
wordCounts.take(10).foreach(println)
6.4案例:实时流处理(需启动流上下文)
import org.apache.spark.streaming._
val ssc = new StreamingContext(sc, Seconds(1)) // 1秒为批处理间隔
val lines = ssc.socketTextStream("localhost", 9999)
val wordCounts = lines.flatMap(_.split(" ")).countByValue()
wordCounts.print()
ssc.start() // 启动流计算
ssc.awaitTermination() // 等待终止信号(Ctrl+C)

8031

被折叠的 条评论
为什么被折叠?



