目录
1. 环境准备
1.1 配置免密登录
2. 下载并配置Spark
3. 配置Spark集群
3.1 配置spark-env.sh
3.2 配置spark-defaults.conf
3.3 设置Master和Worker节点
3.4 设配置log4j.properties
3.5 同步到所有Worker节点
4. 启动Spark Standalone集群
4.1 启动Master节点
4.2 启动Worker节点
4.3 启动日志服务
5. 测试Spark集群
5.1 提交测试任务
6. 管理Spark集群
6.1 停止Spark集群
7. 常见问题
7.1 防火墙问题
7.2 Java版本不兼容
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单机模式安装教程
(按照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资源。