Spark集群的分布式安装与部署以及Spark Shell 简单使用

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相关的配置

首先进入到 hadoop1 /export/servers/spark-3.5.2/conf
录:
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

# 指定MasterIP

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相关的配置

的流程,分别在hadoop1hadoop2hadoop3机器上进行了配置,

那么就不需要分发操作了。分发操作是为了避免在三台机器上做三

次重复的配置工作。

这里我们修改完配置文件后,在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里的环境变量传到了hadoop2hadoop3里,所

以,这里需要分别在hadoop2hadoop3里使用 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值