标签:bsp 调用 line 命名 名称 架构 code 记录 cti
为什么要用集群
在企业中主要使用集群
在学习的过程中使用伪分布式即可,就是单点
HDFS中的
NN
SNN
DN
YARN 的
RM 老大
NM
每个组件只有一个即可
如果nn挂了就不能再继续对外提供服务,例如客户端请求的读写,put get那些。
为了解决这个问题,企业一般都会准备两台nn,对外提供服务的只有一台,处于active状态,另一台是standby状态,进行实时备份随时准备从standby状态切换到active状态
同时,拥有两台nn基本上就不需要snn了,因为nn会进行实时备份,而snn只是进行合并备份的工作,一个小时checkpoint。如果用snn只能恢复checkpoint点的数据,如果中途挂掉,那中间那半小时的数据就会丢失。
主从架构 master-slave
比如hdfs读写请求都是先NN节点;
但是:hbase 读写请求不是经过老大master
命名空间:当我们有两台nn的时候分别为nn1和nn2,我们执行HDFS命令和我们只有一台nn进程有什么区别呢?
hdfs dfs -ls / 这是我们在伪分布里执行的HDFS命令。当我们执行这个命令的时候,就会去core.site.xml和hdfs.site.xml两个配置文件里去寻找配置的信息,以便于找到服务器执行相应的命令。
但是当我们有两个nn进程的时候上边的那个命令就不能这样执行了,要加上你要执行命令的服务器名称等等
hdfs dfs -ls hdfs://ip:9000 / 这两个nn分别对应着两个ip,这里的ip是谁就通过哪个执行命令。但是在shell脚本或者代码之中,如果active的nn挂了,我们再执行命令的时候不可能再改代码改脚本,所以这里引出一个命名空间的概念,我们的脚本或者代码先连接命名空间,命名空间再去尝试连接active的nn,这个过程我们是无感知的。
命名空间的工作流程,命名空间从客户端接到命令以后,会先尝试连接其中一台nn,这里我们就假设先连接nn2,发现nn2是standby状态,然后再去尝试连接nn1,发现是active状态,这时候nn1会接受请求并执行命令。
- 流程
- 1、客户端根据命名空间发起请求
- 2、命名空间按照配置顺序寻找active节点
- 3、NN1记录editlog并写入JN集群
- 4、NN2节点实时读取JN集群的数据,并进行重演
- 重点
- 1、DN节点会向所有的NN节点汇报心跳状况
- 2、ZKFC是单独的进程
HDFA的 HA的架构部署
环境准备 3台机器
hadoop001:ZK NN ZKFC JN DN
hadoop002:ZK NN ZKFC JN DN
hadoop003:ZK JN DN
每个组件的作用
NN:fsimage editlog(读写请求记录)
ZK(2n+1 奇数台):负责选举,决定active和standby在哪台节点
ZKFC(zookeeperFailOverControl):节点真正挂掉,负责将standy状态的节点切换到active状态
JN:同步editlog的进程
ZK是一个单独的进程集群
以下是企业ZK集群部署台数参考
20台节点: 5台
20~100台节点: 7/9/11台
>100台节点: 11台
但是: 不是说zk节点越多越好,因为zk节点越多做出选举的决策的时间就越长。
几百台节点, zk部署的机器就它一个进程,这是为了提高选举效率
HA出现的主要原因就是为了解决单点问题,监控状态自动备援
通过jn共享状态
ZKFC
通过ZKFC切换nn的syandby状态到active状态
ZKFC是一个单独的进程
向ZK集群定期发送心跳,使得自己可以被选举
监控NN的健康状态
当自己被选为active的时候,ZKFC通过RPC协议调用使standby的节点切换为active状态,对外提供服务。这个过程是无感知的。
DN
同时向NN1和NN2发送心跳和块报告
active的NN:
操作记录写到自己的editlog
同时把editlog里的内容写到JN集群里
接收DN的心跳和块报告
standby的NN
接收JN的集群日志
显示读取执行log操作(重演),使得自己的元数据和active的nn的数据保持一致
也要接收DN的心跳和块报告。
标签:bsp 调用 line 命名 名称 架构 code 记录 cti
原文地址:https://www.cnblogs.com/xuziyu/p/10658323.html