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包含了哪些内容:所有的Woker、Driver、Application,当active挂了之后,Zookeeper会选取一台standby作为leader然后恢复Woker、Driver、Application,这些都完成之后,leader才会编程covering,才能编程active,只有当它变成active之后才能对外继续提供服务,进行正常的作业提交

一个集群的运行会不会因为Master的切换影响业务程序的运行?粗粒度下不会,因为程序在运行之前,已经向Master 申请过资源了,之后的作业只是worker和excutor之间的交互,和Master没关系,这个是切换之前已经分配好资源了。这个是粗粒度的情况下。细粒度下会。

细粒度弊端,任务启动非常慢。正常一般大数据处理,实际情况下,一般都是粗粒度。

开始动手:

==========下载Zookeeper============

http://zookeeper.apache.org/

下载好之后解压到/usr/local/ 下,然后配置环境变量

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6

export PATH=$PATH:${ZOOKEEPER_HOME}/bin

zookeeper是单独安装的

因为是做分布式的,所以zookeeper要放到多台机器上

我们把它放到Worker1、Worker2中

进入到zookeeper下,创建data和logs两个目录

[email protected]:/usr/local/zookeeper-3.4.6# mkdir data

[email protected]:/usr/local/zookeeper-3.4.6# mkdir logs

[email protected]:/usr/local/zookeeper-3.4.6/conf# vi zoo_sample.cfg

dataDir这个必须修改,不然重启之后数据就会被删除

[email protected]:/usr/local/zookeeper-3.4.6/conf# cp zoo_sample.cfg zoo.cfg

[email protected]:/usr/local/zookeeper-3.4.6/conf# vi zoo.cfg

修改(做3台机器的集群)

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

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

server.0=Master:2888:3888

server.1=Worker1:2888:3888

server.2=Worker2:2888:3888

[email protected]:/usr/local/zookeeper-3.4.6/conf# cd ../data/

为机器编号

[email protected]:/usr/local/zookeeper-3.4.6/data# echo 0>myid

[email protected]:/usr/local/zookeeper-3.4.6/data# echo 0>>myid

[email protected]:/usr/local/zookeeper-3.4.6/data# ls

myid

[email protected]:/usr/local/zookeeper-3.4.6/data# cat myid

[email protected]:/usr/local/zookeeper-3.4.6/data# vi myid

[email protected]:/usr/local/zookeeper-3.4.6/data# cat myid

0

[email protected]:/usr/local/zookeeper-3.4.6/data#

到这个时候一台机器已经配置好了

Zookeeper配置好集群之后,当spark重启之后,可以把上次集群的信息全部同步过来。不然spark重启就一切重头再来。

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

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

然后分别进去Worker1和Worker2更改myid为1和2

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

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

README.txt    zkCli.cmd  zkEnv.cmd  zkServer.cmd

zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh

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

bash: cd: bin: No such file or directory

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

然后三台机器分别启动

下一步就是让Spark支持zookeeper下HA

到spark-env.sh中配置

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/conf# vi spark-env.sh

//整个集群的状态的维护和恢复都是通过zookeeper的,状态信息都是

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

已经配置集群了,所以还要注释

#export SPARK_MASTER_IP=Master

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

spark-env.sh                                  100%  500     0.5KB/s   00:00

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

spark-env.sh                                  100%  500     0.5KB/s   00:00

然后就是启动Spark,./start-all.sh

为什么Master里面有Master进程,Worker1、2没有?

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/sbin# cd ../conf/

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/conf# cat slaves

Master

Worker1

Worker2

由于我们只有一个master,所以必须到Worker1和2上启动master

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/bin# cd $SPARK_HOME/sbin

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/sbin# ./start-master.sh

starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-Worker1.out

[email protected]:/usr/local/zookeeper-3.4.6/bin# cd $SPARK_HOME/sbin

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/sbin# ./start-master.sh

starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.master.Master-1-Worker2.out

http://master:8080/看情况

http://worker1:8080/

没有worker,是standby状态,完全是备胎状态

http://worker2:8080/

没有worker,是standby状态,完全是备胎状态

用spark-shell来实验HA

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/conf# cd $SPARK_HOME/bin

[email protected]:/usr/local/spark-1.6.0-bin-hadoop2.6/bin# ./spark-shell --master spark://Master:7077,Worker1:7077,Worker2:7077

启动日志有注册:

16/02/04 21:12:29 INFO client.AppClient$ClientEndpoint: Connecting to master spark://Master:7077...

16/02/04 21:12:29 INFO client.AppClient$ClientEndpoint: Connecting to master spark://Worker1:7077...

16/02/04 21:12:29 INFO client.AppClient$ClientEndpoint: Connecting to master spark://Worker2:7077...

但实际只跟active的那台机器交互

来cd $SPARK_HOME/sbin

./stop-master.sh

看到spark-shell里面有动静了

scala> 16/02/04 21:17:11 WARN client.AppClient$ClientEndpoint: Connection to Master:7077 failed; waiting for master to reconnect...

16/02/04 21:17:11 WARN cluster.SparkDeploySchedulerBackend: Disconnected from Spark cluster! Waiting for reconnection...

16/02/04 21:17:11 WARN client.AppClient$ClientEndpoint: Connection to Master:7077 failed; waiting for master to reconnect...

16/02/04 21:17:44 INFO client.AppClient$ClientEndpoint: Master has changed, new master is at spark://Worker1:7077

Worker1变成Active花了半分钟,不会是马上变的,编程Active视集群规模而言

http://master:8080/  连不上了

http://worker1:8080/

http://worker2:8080/ 还是刚才那样

运行下PI计算

./spark-submit  --class org.apache.spark.examples.SparkPi --master spark://Master:7077,Worker1:7077,Worker2:7077 ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100

然后启动Master机器的master

此时Master机器变成了standby模式

http://master:8080/

一般生产环境100、200G内存

王家林老师名片:

中国Spark第一人

新浪微博:http://weibo.com/ilovepains

微信公众号:DT_Spark

博客:http://blog.sina.com.cn/ilovepains

手机:18610086859

QQ:1740415547

邮箱:[email protected]

时间: 2024-10-13 11:49:59

HA下Spark集群工作原理(DT大数据梦工厂)的相关文章

彻底解密WordCount运行原理(DT大数据梦工厂)

主要内容: 数据流动视角解密WordCount RDD依赖关系视角解密WordCount DAG与Lineage的思考 ==========数据流动视角============ 新建文件,里面输入 Hello Spark Hello Scala Hello Hadoop Hello Flink Spark is awesome 修改代码: package com.dt.spark.SparkApps.cores; import java.util.Arrays; import java.util

Spark高级排序彻底解密(DT大数据梦工厂)

内容: 1.基础排序算法实战: 2.二次排序算法实战: 3.更高局级别排序算法: 4.排序算法内幕解密: 为啥讲排序?因为在应用的时候都有排序要求. 海量数据经常排序之后要我们想要的内容. ==========基础排序算法============ scala> sc.setLogLevel("WARN") scala> val x = sc.textFile("/historyserverforSpark/README.md", 3).flatMap(_

Spark on Yarn彻底解密(DT大数据梦工厂)

内容: 1.Hadoop Yarn的工作流程解密: 2.Spark on Yarn两种运行模式实战: 3.Spark on Yarn工作流程解密: 4.Spark on Yarn工作内幕解密: 5.Spark on Yarn最佳实践: 资源管理框架Yarn Mesos是分布式集群的资源管理框架,和大数据没关系,但是可以管理大数据的资源 ==========Hadoop Yarn解析============ 1.Yarn是Hadoop推出的资源管理器,是负责分布式(大数据)集群计算的资源管理的,负

从Spark架构中透视Job(DT大数据梦工厂)

内容: 1.通过案例观察Spark架构: 2.手动绘制Spark内部架构: 3.Spark Job的逻辑视图解析: 4.Spark Job的物理视图解析: Action触发的Job或者checkpoint触发Job ==========通过案例观察Spark架构 ============ jps看到的master,作用:管理集群的计算资源,主要指内存.CPU,也会考虑磁盘或者网络:还做接受客户端提交的作业请求,分配资源.说明:作业粗粒度,提交的时候就分配资源,作业运行的过程时候,一般用已分配的资

Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!

http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group 一.分片和分区的区别? 分片是从数据角度,分区是从计算的角度,其实都是从大的状态,split成小的. 二.spark分区理解 rdd作为一个分布式的数据集,是分布在多个worker节点上的.如下图所示,RDD1有五个分区(partition),他们分布在了四个worker nodes 上面,RDD2有三个分区,分布在了三个worker nodes上面. 三.默认分区

Spark Executor内幕彻底解密(DT大数据梦工厂)

内容: 1.Spark Executor工作原理图: 2.ExecutorBackend注册源码解密: 3.Executor实例化内幕: 4.Executor具体是如何工作的? 1.Master发指令给Worker启动Executor: 2.Worker接受到Master发送来的指令,通过ExecutorRunner启动另外一个进程来运行Executor: 3.此时会启动粗粒度的ExecutorBackend(CoarseGrainedExecutorBackend): 4.CoarseGrai

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

DT大数据梦工厂第三十五课 Spark系统运行循环流程

本节课内容: 1.     TaskScheduler工作原理 2.     TaskScheduler源码 一.TaskScheduler工作原理 总体调度图: 通过前几节课的讲解,RDD和DAGScheduler以及Worker都已有深入的讲解,这节课我们主要讲解TaskScheduler的运行原理. 回顾: DAGScheduler面向整个Job划分多个Stage,划分是从后往前的回溯过程:运行时从前往后运行的.每个Stage中有很多任务Task,Task是可以并行执行的.它们的执行逻辑完

DT大数据梦工厂Spark机器学习相关视频资料

大数据未来几年发展的重点方向,大数据战略已经在十八届五中全会上作为重点战略方向,中国在大数据方面才刚刚起步,但是在美国已经产生了上千亿的市场价值.举个例子,美国通用公司是一个生产飞机发动机的一个公司,这家公司在飞机发动机的每一个零部件上都安装了传感器,这些传感器在飞机发动机运作的同时不断的把发动机状态的数据传到通用公司的云平台上,通用公司又有很多数据分析中心专门接受这些数据,根据大数据的分析可以随时掌握每一家航空公司发动机的飞行状况,可以告知这些航空公司发动机的哪些部件需要检修或保养,避免飞机事