HA下的Spark集群工作原理解密

2 篇文章 0 订阅

第一阶段(1-3月):会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战。课程会涵盖Scala编程详解、Spark核心编程、Spark SQLSpark StreamingSpark GraphXSparkRMachine LearningSpark内核以及源码剖析、性能调优、企业级案例实战等部分

第二阶段(Spark超大规模大数据案例实战):使用了Spark技术生态栈中的Spark CoreSpark SQLSpark StreamingSparkRMachine Learning,进行离线计算和实时计算业务模块的开发、数据的关联性分析、用户行为模式和特征的训练与应用、用户网络的社区发现、用户影响力、能量传播、标签传播、标签推理、人群划分、年龄段预测、商品交易时序跳转

本期内容:

1 Spark高可用HA实战

2 Spark集群工作原理详解

通常资源指MemoryCPUMaster Slaves结构存在单点故障,即Master容易出现故障,为了应对单点故障,Spark在生产环境下通过zookeeperrHA现通常使用3MasterHA,即使有AvtiveMaster出现故障,另外两个STANDBY模式的Master会由zookeeper选出leader,替换故障的Master,变为Avtive Master,恢复集群状态,通过zookeeper保存集群的元数据恢复(Zookeeper中包含元数据,所有的WorkerDriver Application)。

只有STANDBY模式Master恢复了Avtive才能恢复集群的正常,而在此过程中不能提交作业,Master切换的过程中不会影响集群的作业的运行,因为程序在运行前,已经向Master申请过资源,申请过资源后,DriverWorker分配的Executor进行通信,此过程不需要Master参与,除非Executor故障。所以,切换Master的过程不影响作业运行,这是一种粗粒度的管理方式。

粗粒度:一次性分配好资源,之后只需使用或覆用,

优点:在于一次性分配好资源后无需再分配,DriverWorkerExecutor       正常交互不受Master切换的影响;

缺点:job较多的时候,只要有一个job没有运行完,作业没有运行完,为作 业分配的资源就会闲置起来,

细粒度:需要资源的时候在进行分配,使用完资源后立即释放,缺点:资源无法覆   用,任务启动非常慢,且有通信麻烦。

实现Spark高可用HA实战:

第一步:下载zookeeper 地址:http://zookeeper.apache.org/

第二步:解压配置环境

export /ZOOKEEPER_HOME=/usr/local/zookeeper-3.6.4

并在path中添加zookeeperbin目录(zookeeper安装和hadoopspark没有关系)

修改:1、进到conf目录下,把zoo_sample.cfg修改成zoo.cfg

    dataDir=.../zookeeper/zookeeper-3.6.4/data(若不修改,重启后会删除)

    dataLogDir=.../logs(datalogszookeeper安装目录下创建的目录)

    指定三台zookeeper集群

2、zookeeper安装目录下创建datalogs用来存放数据和日志,并在data   下创建文件myid,并在Mastermyid添加0


dataDir=/tmp/zookeeper
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

第三步:scp 拷贝到2Worker上面;将Worker1 myid中的0改为1Worker2上的 myid中的0改为2

第四步:分别启动zookeeperMasterWorker1Worker2):

.../bin/# zkServer.sh start

jps查看进程,多了进程QuorumPeerMain

第五步:Spark支持zookeeper

 vim spark-env.sh配置spark的支持信息,

1、将SPARK_DAEMON_JABA_OPTS

2、配置zookeeper所有做HA的机器

<p><span style="color:rgb(255,0,0);">export JAVA_HOME=/root/install/jdk1.7.0_21</span></p><p><span style="color:rgb(255,0,0);">#export SPARK_MASTER_IP=spark1</span></p><p><span style="color:rgb(255,0,0);">#export SPARK_MASTER_PORT=7077</span></p><p><span style="color:rgb(255,0,0);">export SPARK_WORKER_CORES=1</span></p><p><span style="color:rgb(255,0,0);">export SPARK_WORKER_INSTANCES=1</span></p><p><span style="color:rgb(255,0,0);">export SPARK_WORKER_MEMORY=1g</span></p><p><span style="color:rgb(255,0,0);">export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181 -Dspark.deploy.zookeeper.dir=/spark"</span></p><p><strong>其中:</strong></p><p>-Dspark.deploy.recoveryMode=ZOOKEEPER <span style="font-family:宋体;">:说明整个集群状态通过</span><span style="font-family:Times New Roman;">zookeeper</span><span style="font-family:宋体;">来维护</span><span style="font-family: Arial, Helvetica, sans-serif;">也说明整个集群状态恢复也是靠</span><span style="font-family: 'Times New Roman';">zookeeper</span></p><p>-Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181 <span style="font-family:宋体;">:说明</span><span style="font-family:Times New Roman;">zookeeper</span><span style="font-family:宋体;">做</span><span style="font-family:Times New Roman;">HA</span><span style="font-family:宋体;">的机器</span></p><p>-Dspark.deploy.zookeeper.dir=/spark"<span style="font-family:宋体;">:说明存放</span><span style="font-family:Times New Roman;">Spark</span><span style="font-family:宋体;">元数据,和</span><span style="font-family:Times New Roman;">spark</span><span style="font-family:宋体;">运行状态</span></p>

第六步:启动Spark集群

问题:为什么只在Master中有Master进程?

Spark配置文件Slaves中指定了Worker,此时需要手动启动Worker1Worker2上启动Master进程:./start-master.sh ,之后查看Worker1StatusSTANDB

   

状态所以的Workers,所有的Died、所有的Alive

第七步:测试HA

 ./spark-shell --master spark://Master7077,Worker1:7077,Worker2:7077

zookeeper去找一个ActiveMaster,只跟ActiveMaster进行交互。

client.AppClient$ClientActor: Master haschanged, new master is at spark://worker1:7077

关闭Active Master机器,恢复集群需要时间,哪台机器恢复快Active,就会与Apalication中的Driver进行交互,即该机器变为Master,此时Web界面无法访问,Master变为Worker1Master机器Status变为STANDBY(切换Master没有意义,且浪费时间),然后重启集群后,Maste任然变为Worker1

zookeeper做ha,以前一直认为可以从woker选举变为master级别,原来从master(standby)变为master(active),心跳貌似是2秒,默认。

Spark Runtime 

一般程序提交的时候,当Driver启动后,向Master进行注册初始化时完成,(Spark程序是在注册的时候完成资源分配)然后由Master分配资源,程序提交给MasterCoarseGraineSchedularBackend的子类SparkDeploySchedulerBackend进行管理。

DT大数据梦工厂

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

微信公众号:DT_Spark

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

TEL:18610086859

Email:18610086859@vip.126.com





  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值