第12课:HA下的Spark集群工作机制解密

Spark HA需要先安装zookeeper,推荐稳定版zookeeper-3.4.6,具体安装如下:

1) 下载Zookeeper

进入http://www.apache.org/dyn/closer.cgi/zookeeper/,你可以选择其他镜像网址去下载,用官网推荐的镜像:http://mirror.bit.edu.cn/apache/zookeeper/

下载zookeeper-3.4.6.tar.gz。

 2) 安装Zookeeper

提示:下面的步骤发生在master服务器。

以ubuntu14.04举例,把下载好的文件放到/usr/local/spark目录,用下面的命令解压:

cd /usr/local/spark

tar -zxvf zookeeper-3.4.6.tar.gz

解压后在/usr/local/spark目录会多出一个zookeeper-3.4.6的新目录,解压后配置zookeeper环境变量。

3) 配置Zookeeper

提示:下面的步骤发生在master服务器。

a. 配置.bashrc,添加ZOOKEEPER_HOME环境变量

export ZOOKEEPER_HOME=/usr/local/spark/zookeeper-3.4.6

b. 将zookeeper的bin目录添加到path中

export PATH=${JAVA_HOME}/bin:${ZOOKEEPER_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SCALA_HOME}/bin:${SPARK_HOME}/bin:${SPARK_HOME}/sbin:${HIVE_HOME}/bin:

${KAFKA_HOME}/bin:$PATH

c. 使配置的环境变量立即生效:source ~/.bashrc

d. 创建data和logs目录,data目录用来存放元数据信息,logs用来存放运行日志

- cd $ZOOKEEPER_HOME

- mkdir data

- mkdir logs

e. 创建并打开zoo.cfg文件

- cd $ZOOKEEPER_HOME/conf

- cp zoo_sample.cfg zoo.cfg

- vim zoo.cfg

d. 配置zoo.cfg

# 配置Zookeeper的日志和服务器身份证号等数据存放的目录。

# 千万不要用默认的/tmp/zookeeper目录,因为/tmp目录的数据容易被意外删除。

      dataDir=/usr/local/spark/zookeeper-3.4.6/data

      dataLogDir=/usr/local/spark/zookeeper-3.4.6/logs

# Zookeeper与客户端连接的端口

clientPort=2181

# 在文件最后新增3行配置每个服务器的2个重要端口:Leader端口和选举端口

# server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;

# B 是这个服务器的hostname或ip地址;

# C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;

# D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,

# 选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

# 如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信

# 端口号不能一样,所以要给它们分配不同的端口号。

      server.0=Master:2888:3888

      server.1=Work1:2888:3888

      server.2=Work2:2888:3888

e. 创建并打开myid文件

- cd $ZOOKEEPER_HOME/data

- touch myid

- vim myid

f. 配置myid

按照zoo.cfg的配置,myid的内容就是0。

4) 同步Master的安装和配置到Work1和Work2

- 在master服务器上运行下面的命令

cd /root

scp ./.bashrc [email protected]:/root

scp ./.bashrc [email protected]:/root

cd /usr/local/spark

scp -r ./zookeeper-3.4.6 [email protected]:/usr/local/spark

scp -r ./zookeeper-3.4.6 [email protected]:/usr/local/spark

--修改Work1中data/myid中的值

vim myid

按照zoo.cfg的配置,myid的内容就是1。

--修改Work2中data/myid中的值

vim myid

按照zoo.cfg的配置,myid的内容就是2。

5) 启动Zookeeper服务

- 在Master服务器上运行下面的命令

zkServer.sh start

- 在Work1服务器上运行下面的命令

source /root/.bashrc  //使配置的zookeeper环境变量生效

zkServer.sh start

- 在Work2服务器上运行下面的命令

source /root/.bashrc  //使配置的zookeeper环境变量生效

zkServer.sh start

6) 验证Zookeeper是否安装和启动成功

- 在master服务器上运行命令:jps和zkServer.sh status

[email protected]:/usr/local/spark/zookeeper-3.4.6/bin# jps

3844 QuorumPeerMain

4790 Jps

zkServer.sh status  //需在安装的各个节点启动zookeeper

[email protected]:/usr/local/spark/zookeeper-3.4.6/bin# zkServer.sh status

JMX enabled by default

Using config: /usr/local/spark/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: follower

- 在Work1服务器上运行命令:jps和zkServer.sh status

source /root/.bashrc

[email protected]:/usr/local/spark/zookeeper-3.4.6/bin# jps

3462 QuorumPeerMain

4313 Jps

[email protected]:/usr/local/spark/zookeeper-3.4.6/bin# zkServer.sh status

JMX enabled by default

Using config: /usr/local/spark/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: follower

- 在Work2服务器上运行命令:jps和zkServer.sh status

[email protected]Work2:/usr/local/spark/zookeeper-3.4.6/bin# jps

4073 Jps

3277 QuorumPeerMain

[email protected]Work2:/usr/local/spark/zookeeper-3.4.6/bin# zkServer.sh status

JMX enabled by default

Using config: /usr/local/spark/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: leader

至此,代表Zookeeper已经安装和配置成功。

Zookeeper安装和配置完成后,需配置Spark的HA机制,进入到spark安装目录的conf目录下,修改spark-env.sh文件

vim spark-env.sh

添加zookeeper支持,进行状态恢复:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Work1:2181,Work2:2181 -Dspark.deploy.zookeeper.dir=/spark"

注释掉:因为用zookeeper进行HA机制,不需要指定Master

#export SPARK_MASTER_IP=Master

将配置好的文件同步到Work1及Work2上面

scp spark-env.sh [email protected]:/usr/local/spark/spark-1.6.1-bin-hadoop2.6/conf

scp spark-env.sh [email protected]:/usr/local/spark/spark-1.6.1-bin-hadoop2.6/conf

通过完成后,启动spark集群

./start-all.sh

启动后如下所示:

    这里问个问题,我们上面在spark-env.sh中注释掉了SPARK_MASTER_IP=Master,那为什么我们启动spark,会启动Master,为什么?

原因是我们在slaves文件中配置了Work1和Work2节点,故这里默认启动了Master,但是这里我们只有一个Master,我们上面通过zookeeper配置了3台master进行HA,

所以我们需要手动到Work1和Work2上启动Master

./start-master.sh

通过jps查看Master是否启动成功,这时候我们spark集群有3个master。

通过Work1:8080和Work2:8080地址查看Master状态为 STANDBY,在等待服务中,暂时什么也没有,只有Master上有。

现在来测试下Spark HA,启动Spark shell,注意:我们现在没有明确指定哪台机器为Master,所以我们不能只写一台,具体命令如下:

./spark-shell --master spark://Master:7077,Work1:7077,Work2:7077

这时候程序运行在集群上,需要向zookeeper去找一台Master=ALIVE的机器,会和3台机器进行连接,最后只会和ALIVE机器进行交互

这时候如果我们手动停止Master,这时候会失去了对Master的连接,这时候会等待被选中的Master去连接他,这时候zookeeper就会在Work1和Work2上去恢复,谁恢复完谁就是Leader,这中间需要时间

适集群情况而定。

这时候可以看到Master从Master机器切换到Work1机器上,也可以通过WebUI去查看,这时候发现Master:7077无法启动,Work1:7077变成了ALIVE,如果在Master机器上重新启动Master,可以发现

Work1:7077还是处于ALIVE状态,Master节点不会进行切换。

Spark HA机制就分享到这。

备注:

资料来源于:DT_大数据梦工厂(IMF传奇行动绝密课程)-IMF

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580

Life is short,you need to Spark.

时间: 2024-10-06 03:32:00

第12课:HA下的Spark集群工作机制解密的相关文章

HA下Spark集群工作原理(DT大数据梦工厂)

Spark高可用HA实战 Spark集群工作原理详解 资源主要指内存.CPU 如果是单点的话,Master如果出现故障,则集群不能对外工作 Spark通过Zookeeper做HA,一般做HA是一个active级别,standby active就是当前工作 standby是随时准备active的挂了之后会切换成为active级别 以前一般是2台机器,一个active,一个standby 现在一般是3台机器,一个active,两个standby,甚至3台以上 Zookeeper包含了哪些内容:所有的

[Elasticsearch] 集群工作 - 第二部分

本文翻译自Elasticsearch官方指南的life inside a cluster一章. 添加故障转移(Failover)功能 仅仅执行一个节点意味着可能存在着单点失败(Single point of failure)的问题 - 由于没有冗余.幸运的是.解决问题我们仅仅须要启动还有一个节点. 启动第二个节点 为了试验当你加入第二节点时会发生什么,你须要像启动第一个节点那样启动第二个节点(參见执行ES).能够在同一个文件夹下 - 多个节点可以共享同样的文件夹. 仅仅要第二个节点也拥有和第一个

zhihu spark集群

spark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗?修改 我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongodb数据库.我是否可以让它们只统计自身数据库的内容,然后将结果汇总到一台服务器上的数据库里?目前我的代码如下,但是最终只统计了master里的数据,另一个worker没有统计上. val config = new Configuration() //以下代码表示只统计本机数据库上的数据,猜测问题可能出

第2节 Spark集群安装:1 - 3;第3节 Spark HA高可用部署:1 - 2

三. Spark集群安装 3.1 下载spark安装包 下载地址spark官网:http://spark.apache.org/downloads.html 这里我们使用 spark-2.1.3-bin-hadoop2.7版本. 3.2 规划安装目录 /export/servers 3.3 解压安装包 tar -zxvf spark-2.1.3-bin-hadoop2.7.tgz 3.4 重命名目录 mv spark-2.1.3-bin-hadoop2.7 spark 3.5 修改配置文件 配置

HA分布式集群配置三 spark集群配置

(一)HA下配置spark 1,spark版本型号:spark-2.1.0-bin-hadoop2.7 2,解压,修改配置环境变量 tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz mv spark-2.1.0-bin-hadoop2.7 /usr/spark-2.1.0 vim /etc/profile export JAVA_HOME=/usr/java export SCALA_HOME=/usr/scala export HADOOP_HOME=/usr/h

Spark 在Hadoop HA下配置HistoryServer问题

我的Spark机群是部署在Yarn上的,因为之前Yarn的部署只是简单的完全分布式,但是后来升级到HA模式,一个主NN,一个备NN,那么Spark HistoryServer的配置也需要相应的做修改,因为不做修改会报错 Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native

如何在Spark集群的work节点上启动多个Executor?

默认情况下,Spark集群下的worker,只会启动一个Executor,只运行了一个 CoarseGrainedExecutorBackend 进程.Worker 通过持有 ExecutorRunner 对象来控制 CoarseGrainedExecutorBackend 的启停.那么如何启动多个executor呢?通过设置参数来解决: 1.设置每个executor使用的cpu数为4 spark.executor.cores 4 2.限制cpu使用数量,这里会启动3个executor(12/4

Spark学习笔记5:Spark集群架构

Spark的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展计算能力.Spark可以在各种各样的集群管理器(Hadoop YARN , Apache Mesos , 还有Spark自带的独立集群管理器)上运行,所以Spark应用既能够适应专用集群,又能用于共享的云计算环境. Spark运行时架构 Spark在分布式环境中的架构如下图: 在分布式环境下,Spark集群采用的是主/从结构.在Spark集群,驱动器节点负责中央协调,调度各个分布式工作节点.执行器节点是工作节点,作为独立的Ja

实验室中搭建Spark集群和PyCUDA开发环境

1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心.另外两台计算机作为worker节点,一个配置有GeForce GTX 650显卡,另外一个配置有GeForce GTX 750 Ti显卡,拥有640个CUDA核心. 在每台计算机均创建hadoop用户并赋予root权限,本文所有的操作都将在hadoop用户下进行. 1.1.2安装前准备 用以下命令来