前言
Spark 有五种运行模式,分别是 Local 模式、Standalone 模式、YARN 模式、Mesos 模式和Kubernetes 模式。
Local 模式(本地)
Local模式是Spark运行在本地机器上,利用本地资源进行计算。这种模式通常用于测试和调试,因为它不需要其他节点资源,适合在开发环境中使用。
Standalone 模式(集群)
Standalone模式是Spark自带的资源调度系统,支持完全分布式。在这种模式下,Spark有自己的Master和Worker节点,负责资源的调度和管理。Standalone模式分为Client模式和Cluster模式,Client模式下Driver运行在Master节点上,而Cluster模式下Driver运行在Worker节点上。
YARN 模式(集群)
YARN模式是Hadoop的资源调度框架,Spark也可以运行在YARN上。在这种模式下,Spark可以利用YARN的资源管理功能,分为Client模式和Cluster模式。YARN模式在大数据处理中非常常见,适合生产环境使用。
Mesos 模式(集群)
Mesos模式是Apache Mesos提供的资源管理和调度框架,Spark也可以运行在Mesos上。这种模式适合需要跨多个框架共享资源的场景。
Kubernetes 模式(集群)
Kubernetes模式是容器编排工具,Spark可以运行在Kubernetes上。这种模式适合微服务架构和容器化部署的环境。
适用场景
Local模式:适用于开发和测试,不需要其他节点资源。
Standalone模式:适用于需要内部资源调度的场景,配置和维护相对简单。
YARN模式:适用于生产环境,可以利用Hadoop集群的资源。
Mesos模式:适用于需要跨多个框架共享资源的场景。
Kubernetes模式:适用于容器化部署和微服务架构的环境。
每种模式都有其适用场景和优缺点,选择合适的运行模式可以根据具体的需求和环境来决定。
本文分享的是 Spark 在集群环境下的搭建(Standalone 模式)!!!
一、Spark 和 Anaconda 下载
Spark 官方下载地址:Apache Spark™ - Unified Engine for large-scale data analytics
本文使用的是 spark-3.1.2-bin-hadoop3.2.tgz 版本
Anaconda 下载链接:https://repo.anaconda.com/archive/
本文使用的是 Anaconda3-2021.05-Linux-x86_64.sh 版本
推荐使用 xsync.sh 脚本,比较方便快捷,省去在其他两台服务器上一步一步安装配置。
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo No Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in bigdata02 bigdata03
do
echo ==================== $host ====================
#3. 递归遍历所有目录
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取全路径
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "source /etc/profile;mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file Does Not Exists!
fi
done
done
二、安装 Spark 步骤
思路:先在 bigdata01 上安装和配置,然后通过 xsync.sh 脚本命令分发同步 [spark-standalone] 和 [软链接] 到 bigdata02 和 bigdata03 上,最终三台服务器都会安装上。
1. 上传安装包到 /opt/modules
cd /opt/modules
2. 解压安装包到 /opt/installs
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
3. 在 /opt/installs 目录下重命名文件夹为 spark-standalone
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-standalone
4. 创建软链接
# 删除在搭建单机模式时的软链接
rm -rf spark
# 创建standalone模式的软链接
ln -s spark-standalone spark
5. 修改 spark-env.sh 配置文件
# 进入文件所在路径
cd /opt/installs/spark/conf
# 修改配置文件名称
mv spark-env.sh.template spark-env.sh
# 编辑配置文件
vim spark-env.sh
# 编辑结果如下
# 22行:申明JVM环境路径以及Hadoop的配置文件路径
export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
# 60行左右
export SPARK_MASTER_HOST=bigdata01 # 主节点所在的地址
export SPARK_MASTER_PORT=7077 #主节点内部通讯端口,用于接收客户端请求
export SPARK_MASTER_WEBUI_PORT=8080 #主节点用于供外部提供浏览器web访问的端口
export SPARK_WORKER_CORES=1 # 指定这个集群总每一个从节点能够使用多少核CPU
export SPARK_WORKER_MEMORY=1g #指定这个集群总每一个从节点能够使用多少内存
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_DAEMON_MEMORY=1g # 进程自己本身使用的内存
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"
# Spark中提供了一个类似于jobHistoryServer的进程,就叫做HistoryServer, 用于查看所有运行过的spark程序
6. 在HDFS上创建程序日志存储目录(如果没有启动hdfs,需要启动一下)
# 在第一台服务器上启动HDFS
start-dfs.sh
# 此命令会让三台都启动
# 创建程序运行日志的存储目录
hdfs dfs -mkdir -p /spark/eventLogs/
7. 属性配置文件 spark-defaults.conf
# 修改配置文件名称
mv spark-defaults.conf.template spark-defaults.conf
# 编辑配置文件
vim spark-defaults.conf
# 末尾加上如下内容
spark.eventLog.enabled true
spark.eventLog.dir hdfs://bigdata01:9820/spark/eventLogs
spark.eventLog.compress true
8. 从节点地址配置文件 workers
# 修改配置文件名称
mv workers.template workers
# 编辑配置文件
vim workers
# 末尾删掉localhost,添加以下内容
bigdata01
bigdata02
bigdata03
9. 日志配置文件 log4j.properties
# 修改配置文件名称
mv log4j.properties.template log4j.properties
# 编辑配置文件
vim log4j.properties
# 19行:修改日志级别为WARN
log4j.rootCategory=WARN, console
注:log4j 的5种级别 debug --> info --> warn --> error --> fatal
10. 同步 bigdata01 中的 spark-standalone 到 bigdata02 和 bigdata03 上
xsync.sh /opt/installs/spark-standalone/
11. 在 bigdata02 和 bigdata03 上分别创建软链接
# 进入相关路径
cd /opt/installs/
# 创建软链接
ln -s spark-standalone spark
# 换个思路,也可以同步软链接
xsync.sh /opt/installs/spark
三、安装 Anaconda 步骤
思路:将 bigdata01、bigdata02、bigdata03 分别单独安装,不能用 xsync.sh 脚本命令分发同步。安装完 bigdata01 后,以同样的方式安装 bigdata02、bigdata03,因为里面有 python3 环境,假如没有安装 bigdata02、bigdata03 的话,就会报以下错误:
1. 上传安装包到 /opt/modules
cd /opt/modules
2. 运行安装包
#添加执行权限
chmod u+x Anaconda3-2021.05-Linux-x86_64.sh
#执行
sh ./Anaconda3-2021.05-Linux-x86_64.sh
#过程
#第一次:【直接回车,然后按q】
Please, press ENTER to continue
>>>
#第二次:【输入yes】
Do you accept the license terms? [yes|no]
[no] >>> yes
#第三次:【输入解压路径:/opt/installs/anaconda3】
[/root/anaconda3] >>> /opt/installs/anaconda3
#第四次:【输入yes,是否在用户的.bashrc文件中初始化Anaconda3的相关内容】
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes
3. 刷新环境变量
source /root/.bashrc
4. 激活虚拟环境
# 打开
conda activate
# 关闭
conda deactivate
5. 配置环境变量并刷新
# 编辑环境变量
vi /etc/profile
# 添加以下内容
# Anaconda Home
export ANACONDA_HOME=/opt/installs/anaconda3
export PATH=$PATH:$ANACONDA_HOME/bin
# 刷新环境变量
source /etc/profile
6. 创建软链接
ln -s /opt/installs/anaconda3/bin/python3 /usr/bin/python3
7. 验证是否安装成功
echo $ANACONDA_HOME
四、集群的启动
# 启动master
cd /opt/installs/spark
sbin/start-master.sh
# 启动所有worker
sbin/start-workers.sh
# 如果你想启动某一个worker
# sbin/start-worker.sh
# 启动日志服务
sbin/start-history-server.sh
# 要想关闭某个服务,将start换为stop
五、打开监控界面
1. master 监控界面
# 地址
http://bigdata01:8080/
2. 日志服务监控界面
# 地址
http://bigdata01:18080/
# 假如启动报错,查看日志发现说没有文件夹
mkdir /tmp/spark-events
hdfs dfs -mkdir -p /spark/eventLogs
# 运行完再启动即可
六、集群的测试
# 提交程序脚本
bin/spark-submit
/opt/installs/spark/bin/spark-submit --master spark://bigdata01:7077 /opt/installs/spark/examples/src/main/python/pi.py 200