集群的好处:
每一个角色都是一个进程;
HDFS:NN(老大),SNN,DN
YARN:RM(老大),NM
老大挂了怎么办?
大数据所有的组件都是主从架构的 master-slave
比如,hdfs读写请求都是先NN节点,但是hbase 读和写的请求不经过老大master,建表语句经过
一般配置两个NN节点(实时的,任何时刻只有一台对外,另外一台standby 做实时备份 随时准备着从standby切换到active状态,对外服务) NN1,NN2
配2个NN节点后,SNN就没有必要了
两个NN节点的切换是无感知的,可以来回切换
命名空间 nameservice1 CDH
dw
NN: fsimage editlog 读写请求记录
HA的进程: 3台机器的情况下
hadoop001: ZK NN ZKFC JN DN
hadoop002: ZK NN ZKFC JN DN
hadoop003: ZK JN DN
Journal Node:生产上部署需要考虑hdfs的数据量和请求量,小文件多的话jn搞多一些
ZK集群 部署2n+1台 选举 谁做老大 standby
20台节点:5台zk
但是,不是说zk节点越多越好,越多选举时会变慢
生产上,部署zk的机器就只部署zk一个进程
架构流程:
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
hadoop001: zk rm(zkfc) nm
hadoop002: zk rm(zkfc) nm
hadoop003: zk nm
ZKFC: 线程
只作为RM进程的一个线程而非独立的进程存在
RMStateStore:
存储在zk的/rmstore目录下。
1.activeRM会向这个目录写APP信息
2.当activeRM挂了,另外一个standby RM通过
ZKFC选举成功为active,会从/rmstore读取相应的作业信息。
重新构建作业的内存信息,启动内部的服务,
开始接收NM的心跳,构建集群的资源信息,并且接收客户端的作业提交请求。
1.启动时候会向ZK的/rmstore目录写lock文件,写成功就为active,否则standby.
rm节点zkfc会一直监控这个lock文件是否存在,假如不存在,就为active,否则为standby.
2.接收client的请求,接收和监控NM的资源状况的汇报,负载资源的分配和调度。
3.启动和监控APPMASTER on NM节点的container。
applicationsmanager RM
applicationmaster NM container容器里 作业的主程序
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计算 上报资源
面试点:
1.ZKFC是线程
2./rmstore存储在哪里?