Hadoop高级之HDFS&YARN HA架构剖析

1.为什么要用集群
学习过程中 单点够了

企业里面,伪分布式 每一个角色都是1个进程
HDFS:
NN 老大 master #假如master挂了,所有与nn交互的任务都会中断
SNN 1h checkpoint secondary #checkpoint一小时备份一次,会有丢失一小时数据的风险
DN

伪分布式中hadoop的访问地址是 hdfs://ip:9000/

NN节点挂了,就不能提供对外服务
两个NN节点(实时的,任何时刻只有1台active对外,
另外一台是standby 实时备份
随时准备着从standby切换active状态,对外服务)
NN1 active 11:00挂了 hdfs://ip1:9000/ 代码 shell脚本
NN2 standby active hdfs://ip2:9000/

我们在项目中不可能关注代码和脚本来切换ip1和ip2,是在命名空间中来做的,这对我们来说是无感知的
无感知的:两个NN可以来回切换,我们不必关注谁是active谁是standby
命名空间: nameservice1 CDH里默认的nameservice1

命名空间:namespace

在这里插入图片描述
注意:1、zk机器不是部署的越多越好,机器数20~100节点,zk数5/7/9/11台
    2、若机器数大于100台,zk组件独占物理机,不要部署别的进程
    3、zk、JN节点数生产约定是奇数个,因为他们的规则都是大于二分之一的节点是才算成功,如4台和3台机器的zk集群,挂一
    台都可用,挂2台都不可用,多部署一台反而是浪费资源,其次向zk、jn中写数据也是,写成功二分之一以上以及才算写入 
    4、NN standby节点有时不能切换active,很大时ZK选举夯住的原因
    5、ZKFC进程数和NN数是一致的
    6、JN部署数量和HDFS的请求量以及数据量有关,一般5/7/9
  7、JN、ZK数据副本数就是集群节点数,故JN以及ZK集群数不能太高

HDFS HA架构
在这里插入图片描述
HA是为了解决单点问题
通过JN集群共享状态
通过ZKFC选举active
监控状态,自动备援。
DN: 同时向NN1 NN2发送心跳和块报告。
ACTIVE NN: 操作记录写到自己的editlog
同时写JN集群
接收DN的心跳和块报告
STANDBY NN: 同时接收JN集群的日志,显示读取执行log操作(重演),
使得自己的元数据和active nn节点保持一致。
接收DN的心跳和块报告
JounalNode: 用于active standby nn节点的同步数据
一般部署2n+1

ZKFC: 单独的进程
监控NN监控健康状态
向zk集群定期发送心跳,使得自己可以被选举;
当自己被zk选举为active的时候,zkfc进程通过RPC协议调用使NN节点的状态变为active,
对外提供实时服务,是无感知的。

YARN HA

在这里插入图片描述
ZKFC: 线程
只作为RM进程的一个线程而非独立的进程存在

RMStateStore:
存储在zk的/rmstore目录下。
1.activeRM会向这个目录写APP信息
2.当activeRM挂了,另外一个standby RM通过
ZKFC选举成功为active,会从/rmstore读取相应的作业信息。
重新构建作业的内存信息,启动内部的服务,
开始接收NM的心跳,构建集群的资源信息,并且接收客户端的作业提交请求。

RM:
1.启动时候会向ZK的/rmstore目录写lock文件,写成功就为active,否则standby.
rm节点zkfc会一直监控这个lock文件是否存在,假如不存在,就为active,否则为standby.
2.接收client的请求,接收和监控NM的资源状况的汇报,负载资源的分配和调度。
3.启动和监控APPMASTER on NM节点的container。
applicationsmanager RM
applicationmaster NM container容器里 作业的主程序

NM:
节点资源的管理 启动容器运行task计算 上报资源

猜你喜欢

转载自blog.csdn.net/weixin_43212365/article/details/88981919