spark集群搭建
环境
操作系统:CentOS-7-x86_64
ssh连接工具:Xshell7
FTP连接工具:Xftp7
虚拟机:VMware-Workstation-Pro/17.0
hadoop版本:3.3.4
搭建的三个节点名称分别是node1、node2、node3
其他要用到的程序版本在本文中都可看到就不一一列举了
下载和安装
基于python开发环境下的spark,所以首先要安装anaconda
anaconda下载和安装:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.05-Linux-x86_64.sh
先将下载好的anaconda安装包上传到节点node1的用户目录(我这里的用户是huser)
sh Anaconda3-2022.05-Linux-x86_64.sh
按回车继续
按空格跳过直到出现上图所示的信息,输入yes
这里我们选择默认的安装位置,所以直接回车就行了,等待安装,也可根据自己的情况输入要安装的位置(绝对路径)
输入yes进行初始化
reboot # 重启系统或者用自己的ssh工具重新连接一下该节点
重启后就能看到(base),这个是anaconda的默认基础环境
配置anaconda清华源,anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,复制源配置信息
vim ~/.condarc # 在用户目录创建并打开.condarc文件,粘贴刚才复制的内容
conda clean -i # 清除索引缓存,保证用的是镜像站提供的索引
添加自己的用户环境
conda create -n pyspark python=3.9 # 这里我安装的anacond的python版本为3.9
conda activate pyspark # 激活这个用户
sudo vim /etc/profile # 编辑环境变量
source /etc/profile # 重新加载系统环境变量
到这里anaconda就安装配置完成了,另外两个节点重复上述步骤
spark下载和安装:
从官网链接Downloads | Apache Spark下载spark安装包,如下图所示,选中红色标记的这个版本
将spark压缩包上传到节点node1,并将其解压至/usr/local目录下
sudo tar -xvf spark-3.4.2-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv spark-3.4.2-bin-without-hadoop/ spark # 给文件夹重命名,方便后续的环境配置
修改spark目录拥有者为huser(普通登录用户)
sudo chown -R huser:huser /usr/local/spark/
进入spark配置目录,复制并删除文件后缀template
cd /usr/local/spark/conf
# 下面命令一定要执行,要配置的文件就是这些去掉后缀template的文件
cp workers.template workers
cp spark-env.sh.template spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
cp log4j2.properties.template log4j2.properties # 可选配置
配置
start-all.sh # 确保hadoop集群是启动的
配置workers文件,我们是要搭建集群模式,所以删掉localhost添加我们的三个节点名称
vim workers # 注意此时我们处在/usr/local/spark/conf目录下,所以可以直接编辑wokers文件
配置spark-env.sh文件
vim spark-env.sh
复制下面内容粘贴到该文件末尾
# 设置Java安装目录
JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
##重要的说三遍,这里的/usr/local/hadoop-3.3.4是我hadoop的安装路径!
##重要的说三遍,这里的/usr/local/hadoop-3.3.4是我hadoop的安装路径!
##重要的说三遍,这里的/usr/local/hadoop-3.3.4是我hadoop的安装路径!
##选择自己的hadoop安装路径,以及其他的程序(jdk等)路径都要根据自己情况修改
##上面包括本行都是为了说明信息,可以删除
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop-3.3.4/bin/hadoop classpath)
# HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/usr/local/hadoop-3.3.4/etc/hadoop
YARN_CONF_DIR=/usr/local/hadoop-3.3.4/etc/hadoop
# 指定spark老大Master的IP和提交任务的通信端口
export SPARK_MASTER_HOST=node1
# sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# sparkmaster的webUI端口
SPARK_MASTER_WEBUI_PORT=8080
# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker 可用内存
SPARK_WORKER_MEMORY=1g
# worker的通讯端口
SPARK_WORKER_PORT=7078
# worker的webUI端口
SPARK_WORKER_WEBUI_PORT=8081
# 设置历史服务器,将spark程序运行的历史日志、存到hdfs的/sparklog的文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:9000/sparklog/ -Dspark.history.fs.cleaner.enabled=true"
spark的历史日志要存储到hdfs的/sparklog的文件夹中,查看hdfs是否存在sparklog目录,不存在则创建
hadoop fs -ls / # 查看hdfs是否存在sparklog目录
hadoop fs -mkdir /sparklog # 在hdfs中创建/sparklog目录
hadoop fs -chmod 777 /sparklog # 设置所有人可读写的权限,方便后续操作
配置spark-defaults.conf文件
vim spark-defaults.conf
复制下面内容粘贴到该文件末尾
# 开启spark的日期记录功能
spark.eventLog.enabled true
# 设置spark日志记录的路径
spark.eventLog.dir hdfs://node1:9000/sparklog/ # 填写你自己的hdfs对应地址
# 设置spark日志是否启动压缩
spark.eventLog.compress true
可选配置log4j2.properties文件,将rootLogger.level = info 改为 WARN
sudo vim /etc/profile
# 下面这两行插入到/etc/profile的末尾或页首
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile # 重新加载系统环境变量,使添加的环境变量生效
分发和运行
spark文件夹分发给另外的两个节点,并分别对spark文件夹修改属主(即文件夹拥有者)
sudo scp -r spark/ node2:/usr/local
sudo scp -r spark/ node3:/usr/local
# 下面这个命令是node2、node3要进行的操作
sudo chown -R huser:huser /usr/local/spark
/etc/profile文件也分发给另外的两个节点,保证环境变量的一致
sudo scp /etc/profile node2:/etc/
sudo scp /etc/profile node3:/etc/
# 另外两个节点,node2、node3执行下面命令,重新加载系统环境变量
source /etc/profile
回到节点node1,运行spark
cd /usr/local/spark
# 进入spark目录才能运行下面的命令,也可输入/usr/local/sparksbin/start-all.sh运行spark
sbin/start-all.sh
查看各个节点运行spark后的信息
jps
node1出现Master和Worker,node2和node3出现Worker则说明运行成功
node1:
node2:
node3:
最后访问节点node1的8080端口则可看到spark的webUI界面,这里我的IP是192.168.239.80,所以直接访问192.168.239.80:8080,也可node1:8080,不过要修改本机hosts文件写入node1到192.168.239.80的映射,感兴趣的可以去尝试修改
到这里基于python开发环境下的spark集群就整个搭建完成了!
总结
搭建过程有几个要注意的点
- anaconda下载的版本和本文所给链接下载的版本尽量一致,其他版本没测试,不确定会不会成功
- anaconda的镜像源最好是到各个知名镜像源,寻求最新的配置信息
- spark安装到指定目录后一定要修改属主为你自己的hadoop启动用户
- 每次修改/etc/profile文件都要source该文件,重新加载系统环境变量,以免有些命令无法执行
- 最重要的是根据自己环境、程序的具体情况,如安装路径等都要改为自己的不要盲目的复制粘贴
- 配置任何环境最好去找官方文档,可以更好的理解配置信息和怎样去配置,在参考链接也放了spark的官方文档链接及一些spark中文文档链接
整体流程算是比较清晰,按步骤来相信大家可以完成spark集群的搭建。只是有一些细节点需要注意,一定要灵活应变,透过现象看本质。
感谢各位抽时间阅读我的首篇博文,希望你们能从中获得一些启发,虽然我尽力确保本文内容的准确性,但难免会有疏漏之处,请各位谅解并指正,欢迎大家交流讨论。
参考链接
Linux环境安装Anaconda(详细图文)-CSDN博客
linux中anaconda更换源_linux anaconda 换源-CSDN博客
Spark 集群搭建(完整)_spark分布式集群部署及ha配置-CSDN博客
Spark从集群环境搭建到运行第一个案例 超详细教程!!-腾讯云开发者社区-腾讯云 (tencent.com)
Spark Standalone Mode - Spark 3.5.1 Documentation (apache.org)
PySpark 概述 — PySpark master 文档 (apache.org)
om/video/BV1Jq4y1z7VP?p=1&vd_source=ad0e8b2f5059ee68770e866282191164)
Spark Standalone Mode - Spark 3.5.1 Documentation (apache.org)
PySpark 概述 — PySpark master 文档 (apache.org)
Spark 2.2.x 中文官方参考文档 — Spark 2.2.x 中文文档 2.2.1 文档 (spark-reference-doc-cn.readthedocs.io)