Spark Standalone模式
Local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的集群中去执行,这里我们来看看只使用 Spark 自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式
集群规划:
| 服务器 | IP | Spark应用 |
|---|---|---|
| hadoop102 | 192.168.8.102 | Master Worker |
| hadoop103 | 192.168.8.103 | Worker |
| hadoop104 | 192.168.8.104 | Worker |
一、安装
spark官网:http://spark.apache.org
spark3.1.2下载地址:https://mirrors.bfsu.edu.cn/apache/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
# 下载安装包wget https://mirrors.bfsu.edu.cn/apache/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz# 解压安装包tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz# 修改目录名称mv spark-3.1.2-bin-hadoop3.2 spark-standalone
二、修改配置
- 在workers中配置所有Worker节点
# 进入spark-standalone的conf目录下cd spark-standalone/conf# 从模板复制workerscp workers.template workers# 修改slaves配置文件vim workers# 在文件中添加如下内容hadoop102hadoop103hadoop104
- 配置spark-env.sh
# 模板复制spark-env.shcp spark-env.sh.template spark-env.sh# 修改spark-env配置vim spark-env.sh# 增加如下配置SPARK_MASTER_HOST=hadoop102SPARK_MASTER_PORT=7077
7077是spark的通信端口,相当于hadoop的8020端口
三、分发spark-standalone
前面的步骤只是在一台服务器【Hadoop102】上配置好了,现在需要将spark-standalone目录分发到另外两台服务器
# 使用xsync脚本分发xsync spark-standalone
四、启动集群
执行spark-standalone中start-all.sh脚本
sbin/start-all.sh# 启动后将会打印如下日志starting org.apache.spark.deploy.master.Master, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-hadoop102.outhadoop102: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop102.outhadoop103: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop103.outhadoop104: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop104.out
查看3台服务器的运行状况
jpsall# 运行状况如下=============== hadoop102 ===============6577 Master6868 Jps6668 Worker=============== hadoop103 ===============5810 Worker6010 Jps=============== hadoop104 ===============5761 Worker5976 Jps
查看Master节点的资源监控Web页面:http://hadoop102:8080
五、提交应用
bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop102:7077 \./examples/jars/spark-examples_2.12-3.1.2.jar \10
—class 表示要执行的jar包的主类
—master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟CPU数量
spark-examples_2.12-3.1.2.jar 运行的应用所在的jar包
数字10表示程序的入参
六、配置历史服务器
由于spark-shell停止后,集群监控hadoop:4040页面就看不到历史任务的运行情况,所以开始时都需要配置历史服务器记录任务运行情况
- 修改配置文件名称
# 进入spark-standalone的conf目录下cd spark-standalone/conf# 修改spark-defaults.conf.template文件名mv spark-defaults.conf.template spark-defaults.conf
- 修改spark-defaults.conf配置文件
vim spark-defaults.conf# 增加如下内容spark.eventLog.enabled truespark.eventLog.dir hdfs://hadoop102:8020/spark-log
注意:需要启动hadoop集群,HDFS上的/spark-log目录需要提前存在
hadoop fs -mkdir /spark-log
- 修改spark-env.sh文件,添加日志配置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/spark-log-Dspark.history.retainedApplications=30"
-Dspark.history.ui.port: webUI访问的端口号为18080
-Dspark.history.fs.logDirectory:指定历史服务器日志存储路径
-Dspark.history.retainedApplications:指定保存Application历史记录的个数,如果超过这个值,旧的应用信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数
- 分发应用配置
# 回到上层目录cd ..# 分发conf目录到集群内其他服务器xsync conf
- 重新启动集群和历史服务
# 停止spark集群sbin/stop-all.sh# 启动spark集群sbin/start-all.sh# 启动spark历史服务sbin/start-history-server.sh
- 重新执行任务
bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop102:7077 \./examples/jars/spark-examples_2.12-3.1.2.jar \10
- 查看历史服务

七、配置高可用
集群规划:在hadoop103节点增加一个Master
| 服务器 | IP | Spark应用 |
|---|---|---|
| hadoop102 | 192.168.8.102 | Master Worker |
| hadoop103 | 192.168.8.103 | Master Worker |
| hadoop104 | 192.168.8.104 | Worker |
- 停止spark集群
sbin/stop-all.sh
- 修改conf/spark-env.sh
vim spark-env.sh# 注释如下内容:#SPARK_MASTER_HOST=linux1#SPARK_MASTER_PORT=7077# 添加如下内容:#Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突,所以改成 8989,也可以自定义,访问 UI 监控页面时请注意SPARK_MASTER_WEBUI_PORT=8989export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104-Dspark.deploy.zookeeper.dir=/spark"
- 分发配置文件
xsync spark-env.sh
- 启动集群
sbin/start-all.sh
- 单独在hadoop103节点启动master
sbin/start-master.sh
- 通过以下2个地址均可以访问webUI
http://hadoop102:8989
http://hadoop103:8989
可以看到hadoop102的Status是:ALIVE,而hadoop103的Status是:STANDBY
- 提交应用到高可用spark
bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://hadoop102:7077,hadoop103:7077 \./examples/jars/spark-examples_2.12-3.1.2.jar \10
