`
m635674608
  • 浏览: 5027757 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spark Master High Availability(HA)高可用配置的2种实现

 
阅读更多

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题。如何解决这个单点故障的问题,Spark提供了两种方案:

  • 基于文件系统的单点恢复(Single-Node Recovery with Local File System)
  • 基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)

ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响。加入ZooKeeper的集群整体架构如下图所示。

本文的测试是在Spark0.9.0 Standalone ,同样适用于Spark1.0.0 Standalone 以上版本。

1.基于文件系统的单点恢复
主要用于开发或测试环境。当spark提供目录保存spark Application和worker的注册信息,并将他们的恢复状态写入该目录中,这时,一旦Master发生故障,就可以通过重新启动Master进程(sbin/start-master.sh),恢复已运行的spark Application和worker的注册信息。
基于文件系统的单点恢复,主要是在spark-env里对SPARK_DAEMON_JAVA_OPTS设置:

System property Meaning
spark.deploy.recoveryMode Set to FILESYSTEM to enable single-node recovery mode (default: NONE).(设成FILESYSTEM , 缺省值为NONE)
spark.deploy.recoveryDirectory The directory in which Spark will store recovery state, accessible from the Master's perspective.(Spark 保存恢复状态的目录)

可以考虑使用NFS的共享目录来保存Spark恢复状态。 

1.1配置

[root@bigdata001 spark]# vi conf/spark-env.sh

添加property

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/nfs/spark/recovery"

1.2测试

1.启动Spark Standalone集群:[root@bigdata001 spark]# ./sbin/start-all.sh 

2.启动一个spark-shell客户端并做部分操作后,然后用sbin/stop-master.sh杀死Master进程

[root@bigdata003 spark]# MASTER=spark://bigdata001:7077 bin/spark-shell

[root@bigdata001 spark]# ./sbin/stop-master.sh

3.测试结果:可以在bigdata003看到information,连接不上master。

复制代码
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN SparkDeploySchedulerBackend: Disconnected from Spark cluster! Waiting for reconnection...
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@bigdata001:7077: akka.remote.EndpointAssociationException: Association failed with [akka.tcp://sparkMaster@bigdata001:7077]
复制代码

4.重新启动一下master,可以恢复正常:

[root@bigdata001 spark]# ./sbin/start-master.sh 

 

2.Standby Masters with ZooKeeper

用于生产模式。其基本原理是通过zookeeper来选举一个Master,其他的Master处于Standby状态。

将Standalone集群连接到同一个ZooKeeper实例并启动多个Master,利用zookeeper提供的选举和状态保存功能,可以使一个Master被选举,而其他Master处于Standby状态。如果现任Master死去,另一个Master会通过选举产生,并恢复到旧的Master状态,然后恢复调度。整个恢复过程可能要1-2分钟。

注意:

  • 这个过程只会影响新Application的调度,对于在故障期间已经运行的 application不会受到影响。
  • 因为涉及到多个Master,所以对于应用程序的提交就有了一点变化,因为应用程序需要知道当前的Master的IP地址和端口。这种HA方案处理这种情况很简单,只需要在SparkContext指向一个Master列表就可以了,如spark://host1:port1,host2:port2,host3:port3,应用程序会轮询列表。

该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置(ZooKeeper URL 和目录)。

System property Meaning
spark.deploy.recoveryMode Set to ZOOKEEPER to enable standby Master recovery mode (default: NONE).
spark.deploy.zookeeper.url The ZooKeeper cluster url (e.g., 192.168.1.100:2181,192.168.1.101:2181).
spark.deploy.zookeeper.dir The directory in ZooKeeper to store recovery state (default: /spark).

 Master可以在任何时候添加或移除。如果发生故障切换,新的Master将联系所有以前注册的Application和Worker告知Master的改变。

注意:不能将Master定义在conf/spark-env.sh里了,而是直接在Application中定义。涉及的参数是 export SPARK_MASTER_IP=bigdata001,这项不配置或者为空。否则,无法启动多个master。

2.1 配置

[root@bigdata001 spark]# vi conf/spark-env.sh

添加Property

#ZK HA
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata001:2181,bigdata002:2181,bi
gdata003:2181 -Dspark.deploy.zookeeper.dir=/spark"

2.2 测试

1.前提:zookeeper集群已经启动。

2.关闭集群后,重新启动spark集群:

[root@bigdata001 spark]# ./sbin/stop-all.sh  
[root@bigdata001 spark]# ./sbin/start-all.sh 

3.在另一个节点上,启动新的master:[root@bigdata002 spark]# ./sbin/start-master.sh 

4.查看Web UI:http://bigdata001:8081/

5.启动一个spark-shell客户端:[root@bigdata003 spark]#MASTER=spark://bigdata001:7077,bigdata002:7077 bin/spark-shell

复制代码
MASTER is spark://bigdata001:7077,bigdata002:7077=-====
-----------------------/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar::/src/java/target/mesos-0.19.0.jar:/src/java/target/mesos-0.19.0.jar:/root/spark/conf:/root/spark/assembly/target/scala-2.10/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar
*********RUNNER=/home/zjw/jdk1.7/jdk1.7.0_51//bin/java
*********CLASSPATH=/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar:/home/zjw/tachyon/tachyon-0.4.1/target/tachyon-0.4.1-jar-with-dependencies.jar::/src/java/target/mesos-0.19.0.jar:/src/java/target/mesos-0.19.0.jar:/root/spark/conf:/root/spark/assembly/target/scala-2.10/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar
*********JAVA_OPTS=-Dspark.executor.uri=hdfs://192.168.1.101:8020/user/spark/spark-0.9.2.tar.gz -Dspark.akka.frameSize=20   -Djava.library.path= -Xms512m -Xmx512m
复制代码

6.停掉正在service的Master:[root@bigdata001 spark]# ./sbin/stop-master.sh

 spark-shell输出如下信息:用sbin/stop-master.sh杀死bigdata001 的Master进程,这时saprk-shell花费了30秒左右的时候切换到bigdata002 上的Master了。

复制代码
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN SparkDeploySchedulerBackend: Disconnected from Spark cluster! Waiting for reconnection...
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@bigdata001:7077: akka.remote.EndpointAssociationException: Association failed with [akka.tcp://sparkMaster@bigdata001:7077]
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@bigdata001:7077: akka.remote.EndpointAssociationException: Association failed with [akka.tcp://sparkMaster@bigdata001:7077]
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:01 WARN AppClient$ClientActor: Could not connect to akka.tcp://sparkMaster@bigdata001:7077: akka.remote.EndpointAssociationException: Association failed with [akka.tcp://sparkMaster@bigdata001:7077]
14/08/26 13:54:01 WARN AppClient$ClientActor: Connection to akka.tcp://sparkMaster@bigdata001:7077 failed; waiting for master to reconnect...
14/08/26 13:54:30 INFO AppClient$ClientActor: Master has changed, new master is at spark://bigdata002:7077
复制代码

7.查看UI监控器,这是Active Master是bigdata002。正在运行的Application资源没发生变化。

http://bigdata002:8082/

 

设计理念
      为了解决Standalone模式下的Master的SPOF,Spark采用了ZooKeeper提供的选举功能。Spark并没有采用ZooKeeper原生的Java API,而是采用了Curator,一个对ZooKeeper进行了封装的框架。采用了Curator后,Spark不用管理与ZooKeeper的连接,这些对于Spark来说都是透明的。Spark仅仅使用了100行代码,就实现了Master的HA。

进阶源码学习Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现

参考资料

http://www.cnblogs.com/hseagle/p/3673147.html

https://spark.apache.org/docs/0.9.0/spark-standalone.html#standby-masters-with-zookeeper

 

 

http://www.cnblogs.com/byrhuangqiang/p/3937654.html?utm_source=tuicool&utm_medium=referral

分享到:
评论

相关推荐

    通过案例实战掌握高可用HA下的Spark集群部署

    根据提供的信息,我们可以深入探讨如何通过案例实战来掌握高可用(High Availability,简称HA)环境下的Apache Spark集群部署。此部分将重点介绍高可用性在Spark集群中的意义、实现方式以及实战过程中的关键步骤。 ...

    hadoop、spark、zookeeper配置大全,绝对可用

    还需要配置Spark的master节点和slave节点的信息,以及Spark的HA(High Availability)集群。为了支持HA集群,需要在所有Spark的slave机器上执行start-master.sh脚本。 最后,是配置Zookeeper。在配置Zookeeper时,...

    spark 分布式集群搭建

    为了提高集群的可用性和容错能力,可以启用 High Availability (HA) 模式。主要包含两种方式: - **Standby masters with Zookeeper**: 使用 Zookeeper 来协调多个 Master 实例,实现主备切换。 - **Single-Node ...

    HA集群部署手册

    手册中涉及的技术包括Hadoop、Spark、Zookeeper以及HA(High Availability,高可用性)的概念。Hadoop是一个开源框架,它允许使用简单的编程模型对大规模数据集进行分布式处理。Spark是基于内存计算的大数据处理引擎...

    Master基于ZooKeeper的HighAvailability源码实现

    Spark可以选用ZooKeeper来实现HA。ZooKeeper提供了一个LeaderElection机制,利用这个机制可以保证虽然集群存在多个Master但是只有一个是Active的,其他的都是Standby,当Active的Master出现故障时,另外的一个...

    2022年全国职业院校技能大赛高职组大数据技术与应用赛项赛题任务书5.pdf

    1. **Hadoop High Availability (HA)**: Hadoop HA是一种容错机制,它允许NameNode在故障时自动切换到备用节点,确保服务不间断。在任务一中,需配置Hadoop HA,包括安装JDK、配置host和SSH免密登录、部署Zookeeper...

    03-Yarn安装部署及资源队列使用.pdf

    - ResourceManager存在单点故障问题,但是正在基于ZooKeeper实现高可用性(High Availability, HA)。如果ResourceManager发生故障,它负责重启失败的ApplicationMaster,并且ApplicationMaster需要处理内部任务的...

    国内大公司数据架构

    4. **高可用性实现**:淘宝在DAL层面实现了多种HA(High Availability)策略。其中一种是在出现故障时仅提供读服务,这种方式能够在保证系统基本可用性的前提下,避免因写操作可能导致的数据不一致问题。 5. **DAL...

    win10编译过的hadoo2.6.4包括hadoop.dll和winutils.exe

    此外,Hadoop 2.6.4还引入了HDFS HA(High Availability)高可用性特性,通过NameNode的热备,实现了NameNode故障时的无缝切换,增强了整个集群的稳定性。HDFS的另一改进是透明加密,可以在不改变应用程序的情况下,...

    windows hadoop-2.7.7免费下载

    此外,Hadoop 2.x系列还引入了HDFS HA(High Availability)和HDFS Federation,增强了HDFS的可靠性和效率。 为了在Windows上实际操作Hadoop,可以编写MapReduce程序,利用Hadoop的API处理数据。这些程序可以用Java...

    各个版本Hadoop大合集.rar

    在Hadoop 2.x系列中,Hadoop 2.2引入了HDFS HA(High Availability),提供了主NameNode的热备,增强了系统的可用性。而Hadoop 2.7则加强了安全性和稳定性。Hadoop 3.x系列进一步提升了性能,增加了对更大文件和支持...

    hadoop核心架构

    在Hadoop 2.2及更高版本中,引入了HA(High Availability)特性,以解决单点故障问题。HA通过使用多个NameNode(一个活动NameNode和一个备用NameNode)来确保系统的高可用性。当活动NameNode出现问题时,备用...

    hadoop2.2.0

    5. Hadoop HA:Hadoop 2.2.0引入了High Availability(HA)特性,通过NameNode的热备和故障切换,实现了HDFS服务的连续性。这包括两个活动NameNode(Active和Standby)和一个共享编辑日志(Journal Node),确保了...

    大数据及其常用组件介绍

    - **HA机制**:为了提高Hadoop集群的可用性,引入了HA(High Availability)机制。该机制通过配置两个NameNode节点(一个Active,一个Standby)来实现热备份,当Active NameNode发生故障时,Standby NameNode可以...

    hadoop2.2.0API

    此外,HDFS的**NameNode HA**(High Availability)和**Federation**特性使得NameNode的故障切换更加平滑,同时支持多个命名空间,提高了整个系统的可用性。 **MapReduce** MapReduce是Hadoop处理大数据的主要计算...

    hmyjsmst.docx

    - Hadoop HA(High Availability)是指在Hadoop集群中实现高可用性的机制,主要是通过设置多个活跃的NameNode来实现。 - **上课用图** - 通常会涉及到Hadoop HA的架构图,包括Active NameNode、Standby NameNode、...

Global site tag (gtag.js) - Google Analytics