Spark基于zookeeper的HA

本文详细介绍如何在Spark中配置基于Zookeeper的高可用性(HA)设置。首先准备Zookeeper环境并完成Spark集群的基本配置,然后通过修改spark-env.sh文件来指定Zookeeper的相关参数。最后,通过实际操作验证当主节点发生故障时,备用节点能够成功接管成为新的主节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark基于zookeeperHA

1.    准备

Zookeeper环境

参考:http://blog.youkuaiyun.com/mapengbo521521/article/details/41777721

Spark环境

参考:http://blog.youkuaiyun.com/mapengbo521521/article/details/49966677

2.    配置spark

进到spark的配置目录,在spark-env.sh修改如下

Export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop1:2181,spark2:2181 -Dspark.deploy.zookeeper.dir=/spark"

export JAVA_HOME=/home/hadoop/jdk/jdk1.7.0_21

#export SPARK_MASTER_IP= hadoop1

#export SPARK_MASTER_PORT=7077

export SPARK_WORKER_CORES=1

export SPARK_WORKER_INSTANCES=1

export SPARK_WORKER_MEMORY=1g

把这个配置文件分发到各个节点上去

scp spark-env.sh root@hadoop2: $SPARK_HOME /conf/

scp spark-env.sh root@hadoop3: $SPARK_HOME /conf/

 

启动spark集群

Sbin/start-all.sh

进入hadoop2节点,启动start-master.sh hadoop1节点挂掉时hadoop2顶上充当master

jps查看hadoop1 hadoop2 均存在Master进程

 

3.    测试HA是否生效

查看hadoop1 hadoop2 均存在Master进程,hadoop2处于待命状态

hadoop1上把master节点停掉 sbin/stop-master.sh

访问http://hadoop1:8080,发现已经挂掉。

访问http://hadoop2:8080,发现hadoop2已经已经接管了hadoop1成为主节点。

 

<think>我们正在配置Spark Standalone模式的高可用性(HA),使用ZooKeeper作为协调服务。 根据引用[2][3][4],配置步骤主要涉及修改spark-env.sh文件,注释掉SPARK_MASTER_HOST,并设置SPARK_DAEMON_JAVA_OPTS参数来指定ZooKeeper的地址和恢复模式。 同时,需要启动ZooKeeper集群(引用[1][2])。 步骤总结如下: 1. 停止所有Spark服务(如果正在运行)。 2. 修改每个节点(包括所有Master和Worker节点)的spark-env.sh配置文件: - 注释掉(或删除)SPARK_MASTER_HOST配置项,因为在高可用模式下,我们不再固定一个Master节点,而是由ZooKeeper管理多个Master节点。 - 添加SPARK_DAEMON_JAVA_OPTS环境变量,指定恢复模式为ZOOKEEPER,并配置ZooKeeper的URL以及ZooKeeper上存储Spark状态的路径。 3. 启动ZooKeeper集群(确保ZooKeeper集群已经配置并运行)。 4. 启动Spark集群:首先在一个节点上启动主Master,然后在其他节点上启动备用的Master,最后启动Worker节点。 详细步骤:</think>### 基于 ZooKeeperSpark Standalone HA 配置步骤 通过 ZooKeeper 实现 Spark Standalone 高可用性(HA)模式,需按以下流程操作(所有节点均需配置): --- #### 1. **基础环境准备** - **ZooKeeper 集群**:确保已部署正常运行的 ZooKeeper 集群(至少 3 节点)[^5] - **主机名解析**:所有节点 `/etc/hosts` 包含一致的域名解析: ```bash 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3 ``` --- #### 2. **修改 `spark-env.sh` 配置** 在所有 Spark 节点执行: ```bash cd $SPARK_HOME/conf vim spark-env.sh ``` **关键修改项**: ```bash # 注释或删除单点 Master 配置(重要!) # export SPARK_MASTER_HOST=node1 # 启用 ZooKeeper HA 模式 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha" ``` **参数说明**: | 参数 | 值示例 | 作用 | |------|--------|------| | `recoveryMode` | `ZOOKEEPER` | 启用 ZooKeeper 故障恢复 | | `zookeeper.url` | `node1:2181,node2:2181,node3:2181` | ZooKeeper 集群地址 | | `zookeeper.dir` | `/spark-ha` | ZooKeeper 存储路径(需唯一) | > 注:其他配置(如 `JAVA_HOME`, `SPARK_WORKER_MEMORY` 等)保持不变[^2][^4] --- #### 3. **启动集群服务** 按顺序执行: 1. **启动 ZooKeeper 集群**: ```bash # 在每台 ZooKeeper 节点执行 zkServer.sh start ``` 2. **启动首个 Master(主节点)**: ```bash # 在 node1 执行 $SPARK_HOME/sbin/start-master.sh ``` 3. **启动备用 Masters**: ```bash # 在 node2 和 node3 执行 $SPARK_HOME/sbin/start-master.sh ``` 4. **启动 Workers**: ```bash # 在所有节点执行(指向任一 Master) $SPARK_HOME/sbin/start-worker.sh spark://node1:7077 ``` --- #### 4. **验证 HA 状态** - **检查 Master 状态**: ```bash # 查看活跃 Master curl http://node1:8080 | grep "Status: ALIVE" # 查看备用 Master(应显示 STANDBY) curl http://node2:8080 ``` - **ZooKeeper 数据验证**: ```bash zkCli.sh -server node1:2181 ls /spark-ha/standalone # 应显示 leader_election 和 worker 目录 ``` --- #### 5. **故障转移测试** 1. 手动停止活跃 Master: ```bash $SPARK_HOME/sbin/stop-master.sh # 在 node1 执行 ``` 2. 30 秒内观察备用 Master(如 node2)自动升级为活跃状态 3. Workers 自动重连到新 Master(日志无中断) > 提示:Web UI 端口默认为 `8080`,可通过 `SPARK_MASTER_WEBUI_PORT` 修改[^2] --- ### 配置示例图 ```mermaid graph LR ZK[ZooKeeper集群] -->|协调选举| M1(Master-活跃) ZK -->|状态同步| M2(Master-备用) ZK -->|状态同步| M3(Master-备用) M1 --> W1[Worker] M1 --> W2[Worker] M2 -. 故障切换 .-> W1 ``` ### 关键注意事项 1. **ZooKeeper 路径权限**:确保 `/spark-ha` 路径在 ZooKeeper 中存在且可写 2. **防火墙开放**: - Master 通信端口:`7077` - ZooKeeper 端口:`2181`/`2888`/`3888` 3. **所有节点配置同步**:`spark-env.sh` 需在所有 Master/Worker 节点保持一致 > 实测数据:故障转移通常在 **10-30秒** 内完成,具体取决于 ZooKeeper 会话超时设置(默认 `tickTime=2000ms`)[^3] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值