" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 206 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Spark部署 之 HA

PySuper
2022-03-30 / 0 评论 / 0 点赞 / 70 阅读 / 0 字
温馨提示:
本文最后更新于2024-05-28,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障(SPOF)的问题。

运行原理

Spark-HA

Spark提供的解决方案

  • 基于文件系统的单点恢复(Single-Node Recovery with Local File System)–只能用于开发或测试环境
  • 基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)–可以用于生产环境
Spark-HA

Zookeeper

# 下载zookeeper安装包
# https://zookeeper.apache.org/releases.html
https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

# 解压到指定文件夹
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /hadoop/software/

# 修改文件名
mv apache-zookeeper-3.7.0-bin zookeeper

# 创建一个文件夹放置集群节点文件
mkdir /hadoop/file/zookeeper-cluster

# 准备文件夹(各个节点都需要)
cd zookeeper-cluster/ && mkdir data log && echo "211" > data/myid
cd zookeeper-cluster/ && mkdir data log && echo "212" > data/myid
cd zookeeper-cluster/ && mkdir data log && echo "213" > data/myid

# 进入 zookeeper 的 conf 文件夹,复制 zoo_sample.cfg(各个节点都需要)
cd /hadoop/software/zookeeper/conf/ && cp zoo_sample.cfg zook-cluster.cfg && ll && > zook-cluster.cfg
cd /hadoop/software/zookeeper/conf/ && cp zoo_sample.cfg zook-cluster.cfg && ll && > zook-cluster.cfg
cd /hadoop/software/zookeeper/conf/ && cp zoo_sample.cfg zook-cluster.cfg && ll && > zook-cluster.cfg

# 修改 3个配置文件中的一部分

# 原文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data
dataLogDir=/usr/local/zookeeper-cluster/log
clientPort=2181
server.211=node-211:2888:3888
server.212=node-212:2889:3889
server.213=node-213:2890:3890

# node-211
# 数据目录配置项,myid 文件位于此目录下
dataDir=/hadoop/file/zookeeper-cluster/data
# 日志目录配置项,不设置的话默认使用 dataDir 配置的路径
dataLogDir=/hadoop/file/zookeeper-cluster/log
# 表示客户端连接 zookeeper 集群中的节点的端口号
clientPort=2181

# node-212
dataDir=/hadoop/file/zookeeper-cluster/data
dataLogDir=/hadoop/file/zookeeper-cluster/log
clientPort=2181

# node-213
dataDir=/hadoop/file/zookeeper-cluster/data
dataLogDir=/hadoop/file/zookeeper-cluster/log
clientPort=2181

# 启动Zookeeper
cat /hadoop/software/zookeeper/conf/zook-cluster.cfg
cd /hadoop/software/zookeeper/ && bin/zkServer.sh start conf/zook-cluster.cfg

# 查看状态
/hadoop/software/zookeeper/bin/zkServer.sh status conf/zook-cluster.cfg

# 停止
/hadoop/software/zookeeper/bin/zkServer.sh stop conf/zook-cluster.cfg

高可用

前提: 确保 ZookeeperHDFS 均已经启动

Spark-HA
# 编辑spark-env.sh
vi /hadoop/software/spark/conf/spark-env.sh

# 配置文件中固定master是谁, 那么就无法用到zk的动态切换master功能了
# # SPARK_MASTER_HOST=node-211 # 删除或注释掉

# 增加
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node-211:2181,node-212:2181,node-213:2181 -Dspark.deploy.zookeeper.dir=/hadoop/file/spark-ha"
# spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
# 指定Zookeeper的连接地址
# 指定在Zookeeper中注册临时节点的路径

# 将spark-env.sh 分发到每一台服务器上
scp /hadoop/software/spark/conf/spark-env.sh node-212:/hadoop/software/spark/conf/ && \
scp /hadoop/software/spark/conf/spark-env.sh node-213:/hadoop/software/spark/conf/

# 停止原有的spark集群, 重启
/hadoop/software/spark/sbin/stop-all.sh && /hadoop/software/spark/sbin/start-all.sh

# 在 其他节点上 启动也启动一个master
/hadoop/software/spark/sbin/start-master.sh

# 这时启动了两个master,通过web-ui可以看到一个节点处于ALIVE状态,另一个处于STANDBY
# 执行stop-master.sh,关闭ALIVE的master
# 稍等之后,会发现,处于STANDBY的master状态变成了ALIVE

总结

  • StandAlone HA的原理
    • 基于Zookeeper做状态的维护,开启多个Master进程
    • 一个作为活跃,其它的作为备份
    • 当活跃进程宕机,备份Master进行接管
    • 不会影响正在运行的Task
  • 为什么需要Zookeeper
    • 分布式进程是分布在多个服务器上的
    • 状态之间的同步需要协调,比如
      • 谁是master,谁是worker
      • 谁成了master后要通知worker等
    • 这些需要中心化协调器Zookeeper来进行状态统一协调

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区