Spark Standalone模式

  1. 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

  1. # 下载安装包
  2. wget https://mirrors.bfsu.edu.cn/apache/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
  3. # 解压安装包
  4. tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz
  5. # 修改目录名称
  6. mv spark-3.1.2-bin-hadoop3.2 spark-standalone

二、修改配置

  1. 在workers中配置所有Worker节点
  1. # 进入spark-standalone的conf目录下
  2. cd spark-standalone/conf
  3. # 从模板复制workers
  4. cp workers.template workers
  5. # 修改slaves配置文件
  6. vim workers
  7. # 在文件中添加如下内容
  8. hadoop102
  9. hadoop103
  10. hadoop104
  1. 配置spark-env.sh
  1. # 模板复制spark-env.sh
  2. cp spark-env.sh.template spark-env.sh
  3. # 修改spark-env配置
  4. vim spark-env.sh
  5. # 增加如下配置
  6. SPARK_MASTER_HOST=hadoop102
  7. SPARK_MASTER_PORT=7077

7077是spark的通信端口,相当于hadoop的8020端口

三、分发spark-standalone

前面的步骤只是在一台服务器【Hadoop102】上配置好了,现在需要将spark-standalone目录分发到另外两台服务器

  1. # 使用xsync脚本分发
  2. xsync spark-standalone

四、启动集群

执行spark-standalone中start-all.sh脚本

  1. sbin/start-all.sh
  2. # 启动后将会打印如下日志
  3. starting org.apache.spark.deploy.master.Master, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-hadoop102.out
  4. hadoop102: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop102.out
  5. hadoop103: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-standalone/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-hadoop103.out
  6. hadoop104: 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台服务器的运行状况

  1. jpsall
  2. # 运行状况如下
  3. =============== hadoop102 ===============
  4. 6577 Master
  5. 6868 Jps
  6. 6668 Worker
  7. =============== hadoop103 ===============
  8. 5810 Worker
  9. 6010 Jps
  10. =============== hadoop104 ===============
  11. 5761 Worker
  12. 5976 Jps

查看Master节点的资源监控Web页面:http://hadoop102:8080

五、提交应用

  1. bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master spark://hadoop102:7077 \
  4. ./examples/jars/spark-examples_2.12-3.1.2.jar \
  5. 10

—class 表示要执行的jar包的主类

—master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟CPU数量

spark-examples_2.12-3.1.2.jar 运行的应用所在的jar包

数字10表示程序的入参

六、配置历史服务器

由于spark-shell停止后,集群监控hadoop:4040页面就看不到历史任务的运行情况,所以开始时都需要配置历史服务器记录任务运行情况

  1. 修改配置文件名称
  1. # 进入spark-standalone的conf目录下
  2. cd spark-standalone/conf
  3. # 修改spark-defaults.conf.template文件名
  4. mv spark-defaults.conf.template spark-defaults.conf
  1. 修改spark-defaults.conf配置文件
  1. vim spark-defaults.conf
  2. # 增加如下内容
  3. spark.eventLog.enabled true
  4. spark.eventLog.dir hdfs://hadoop102:8020/spark-log

注意:需要启动hadoop集群,HDFS上的/spark-log目录需要提前存在

hadoop fs -mkdir /spark-log

  1. 修改spark-env.sh文件,添加日志配置
  1. export SPARK_HISTORY_OPTS="
  2. -Dspark.history.ui.port=18080
  3. -Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/spark-log
  4. -Dspark.history.retainedApplications=30"

-Dspark.history.ui.port: webUI访问的端口号为18080

-Dspark.history.fs.logDirectory:指定历史服务器日志存储路径

-Dspark.history.retainedApplications:指定保存Application历史记录的个数,如果超过这个值,旧的应用信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数

  1. 分发应用配置
  1. # 回到上层目录
  2. cd ..
  3. # 分发conf目录到集群内其他服务器
  4. xsync conf
  1. 重新启动集群和历史服务
  1. # 停止spark集群
  2. sbin/stop-all.sh
  3. # 启动spark集群
  4. sbin/start-all.sh
  5. # 启动spark历史服务
  6. sbin/start-history-server.sh
  1. 重新执行任务
  1. bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master spark://hadoop102:7077 \
  4. ./examples/jars/spark-examples_2.12-3.1.2.jar \
  5. 10
  1. 查看历史服务

访问:http://hadoop102:18080/

image.png

七、配置高可用

集群规划:在hadoop103节点增加一个Master

服务器 IP Spark应用
hadoop102 192.168.8.102 Master Worker
hadoop103 192.168.8.103 Master Worker
hadoop104 192.168.8.104 Worker
  1. 停止spark集群
  1. sbin/stop-all.sh
  1. 修改conf/spark-env.sh
  1. vim spark-env.sh
  2. # 注释如下内容:
  3. #SPARK_MASTER_HOST=linux1
  4. #SPARK_MASTER_PORT=7077
  5. # 添加如下内容:
  6. #Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突,所以改成 8989,也可以自定义,访问 UI 监控页面时请注意
  7. SPARK_MASTER_WEBUI_PORT=8989
  8. export SPARK_DAEMON_JAVA_OPTS="
  9. -Dspark.deploy.recoveryMode=ZOOKEEPER
  10. -Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104
  11. -Dspark.deploy.zookeeper.dir=/spark"
  1. 分发配置文件
  1. xsync spark-env.sh
  1. 启动集群
  1. sbin/start-all.sh
  1. 单独在hadoop103节点启动master
  1. sbin/start-master.sh
  1. 通过以下2个地址均可以访问webUI
    http://hadoop102:8989
    http://hadoop103:8989

可以看到hadoop102的Status是:ALIVE,而hadoop103的Status是:STANDBY

  1. 提交应用到高可用spark
  1. bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master spark://hadoop102:7077,hadoop103:7077 \
  4. ./examples/jars/spark-examples_2.12-3.1.2.jar \
  5. 10