目录
1. 环境准备
在开始之前,请确保集群中所有节点满足以下要求:
- 操作系统:建议使用Linux(CentOS或Ubuntu)
- Java:JDK 1.8或以上版本
- Python:若使用PySpark,请安装Python 3.6以上版本
- 网络配置:确保各节点之间的SSH无密码登录已配置
在本教程中,将采用以下的集群结构:
- Master节点:负责管理资源分配和任务调度
- Worker节点:实际执行任务
1.1 配置免密登录
在Master节点上配置SSH免密登录,方便自动化管理和任务分发。
ssh-keygen -t rsa # 生成密钥对
ssh-copy-id user@worker1 # 将公钥复制到worker1节点
ssh-copy-id user@worker2 # 将公钥复制到worker2节点
确认免密登录配置成功后,可以继续下一步。
2. 下载并配置Spark
(按照PySpark单机模式安装教程将其他Work节点也安装Anaconda)
# 解压安装
cd /opt/modules
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
# 重命名
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-standalone
# 重新构建软连接
rm -rf spark
ln -s spark-standalone spark
3. 配置Spark集群
3.1 配置spark-env.sh
在$SPARK_HOME/conf
目录下:
-
复制模板文件
spark-env.sh.template
并重命名为spark-env.sh:cd /opt/installs/spark/conf mv spark-env.sh.template spark-env.sh
-
在
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程序
-
在HDFS上创建程序日志存储目录(首先如果没有启动hdfs,需要启动一下)
# 第一台机器启动HDFS start-dfs.sh # 创建程序运行日志的存储目录 hdfs dfs -mkdir -p /spark/eventLogs/
3.2 配置spark-defaults.conf
在$SPARK_HOME/conf
目录下:
-
复制模板文件spark-defaults.conf并重命名为spark-defaults.conf:
mv spark-defaults.conf.template spark-defaults.conf vim spark-defaults.conf
-
在
spark-env.sh
文件中添加以下内容:# 末尾 spark.eventLog.enabled true spark.eventLog.dir hdfs://bigdata01:9820/spark/eventLogs spark.eventLog.compress true
3.3 设置Master和Worker节点
在$SPARK_HOME/conf
目录下:
-
复制模板文件workers
.template
并重命名为workers:mv workers.template workers
-
在workers文件中添加所有Worker节点的IP或主机名,例如:
# 删掉localhost,添加以下内容 bigdata01 bigdata02 bigdata03
3.4 设配置log4j.properties
在$SPARK_HOME/conf
目录下:
-
复制模板文件log4j.properties
.template
并重命名为log4j.properties:mv log4j.properties.template log4j.properties
-
在log4j.properties文件中添修改以下内容:
# 19行:修改日志级别为WARN log4j.rootCategory=WARN, console log4j的5种 级别 debug --> info --> warn --error -->fatal
3.5 同步到所有Worker节点
将Master的spark同步到其他Worker节点
scp $SPARK_HOME user@worker1:$SPARK_HOME
scp $SPARK_HOME user@worker2:$SPARK_HOME
(也可以使用文件分发脚本xsync.sh将整个spark文件同步给其他节点)
同时,在其他节点创建软链接(命令同步执行脚本xcall.sh):
cd /opt/installs/
ln -s spark-standalone spark
换个思路,是否可以同步软链接:
xsync.sh /opt/installs/spark
4. 启动Spark Standalone集群
4.1 启动Master节点
在Master节点上执行以下命令启动Master服务:
# 启动master:
cd /opt/installs/spark
sbin/start-master.sh
Master启动成功后,可以在http://<Master_IP>:8080
查看集群的Web UI(8080为默认端口)。
4.2 启动Worker节点
在Master节点上,通过以下命令启动所有Worker节点:
# 启动所有worker:
sbin/start-workers.sh
# 如果你想启动某一个worker
sbin/start-worker.sh
4.3 启动日志服务
在Master节点上,通过以下命令启动日志服务:
# 启动日志服务:
sbin/start-history-server.sh
5. 测试Spark集群
5.1 提交测试任务
可以通过以下命令提交一个简单的Spark任务来测试集群是否配置成功:
$SPARK_HOME/bin/spark-submit --master spark://<Master_IP>:7077 \ --class org.apache.spark.examples.SparkPi \ $SPARK_HOME/examples/jars/spark-examples*.jar 10
运行后,观察任务的运行结果,若无错误信息,说明集群部署成功。
6. 管理Spark集群
6.1 停止Spark集群
可以在Master节点上执行以下命令停止集群:
$SPARK_HOME/sbin/stop-all.sh
# 要想关闭某个服务,将start换为stop
也可以分别在Master和Worker节点上使用stop-master.sh
和stop-worker.sh
命令来单独停止服务。
7. 常见问题
7.1 防火墙问题
如果无法访问Web UI,请检查是否需要开放8080端口,或使用防火墙命令允许通信:
# 防火墙状态命令:
systemctl status firewalld
# 关闭防火墙命令:
systemctl stop firewalld(重启后防火墙还是会自动开启)
# 开启防火墙命令:
systemctl start firewalld
# 重启防火墙命令:
systemctl restart firewalld
# 开机启动防火墙命令:
systemctl enable firewalld
# 开机不启动防火墙命令:
systemctl disable firewalld
7.2 Java版本不兼容
确保所有节点上的Java版本一致,以避免运行时出现兼容性问题。
至此,您已成功部署了Spark Standalone集群,并验证了基本的任务提交。Standalone集群适用于中小规模数据处理需求,便于简单、高效地管理Spark资源。