1. 所需知识:
- Hadoop
- Zookeeper
2. 目前Hadoop集群存在的问题:
2.1 如果NameNode故障后,应该怎么办?
Prior to Hadoop 2.0.0, the NameNode was a single point of failure (SPOF) in an HDFS cluster.
Each cluster had a single NameNode, and if that machine or process became unavailable,
the cluster as a whole would be unavailable until the NameNode was either restarted or brought up on a separate machine.
1)因为NameNode是HDFS的中心.所有的DN都要围绕着NN工作,如果NN故障后,整个HDFS不能在正常进行服务.
2)如上的问题就是比较典型的单点故障.
3)解决办法是: 搭建多个NameNode,其中一个是Active状态,就是正常对外提供服务.
其他的NameNode都是standby状态,是不能对外提供服务的.只有当Active的NN故障后,
StandBy状态的NN才有机会上位,代替之前的NN对外提供服务.
4)待解决问题:
a. 多个StandBy NN 如何保证与 Active NN 中的数据保持一致?
使用journalNode做为共享存储, ActiveNN 将edits写到JN中, StandByNN 从JN中读取edits
在内存中进行重构,重构完后,就能保障StantByNN 和ActiveNN元数据一致.对于2NN所负责的事,StandByNN就可以完成.
b. 多个StandBy NN 之间的争夺上位问题
脑裂问题: 一个集群中出现多个Active的NN
手动故障转移: 完全由开发人员控制.
自动故障转移: 争抢. 每个NN都对应一个ZKFC进程(Zookeeper的客户端对象), ZKFC负责监控NN的健康状态以及故障转移. ZKFC会在自己所维护的NN为健康状态的情况下,到ZK中争抢znode锁,如果获取锁成功,则将自己所维护的NN切换为Active状态.如果ZKFC所维护的NN为Active状态,当NN不健康后(ZKFC认为的),zkfc会断开与zk的连接,这样的话,在zk中拥有的锁也就释放,别的ZKFC发现没有别的ZKFC拥有锁的情况下,会尝试获取Znode锁,如果获取成功,则将自己所维护的NN切换为Active状态. 从而实现自动故障转移.
自动故障转移如何解决脑裂问题:
一个ZKFC所负责的NN为Active状态,当ZKFC认为NN不健康后,会触发自动故障转移,
此时,其他的ZKFC会尝试获取znode锁,假如获取成功, 为了保证不出现脑裂问题,
会SSH到原先ActiveNN的机器,执行Kill Namenode的命令. 扫清一切障碍后,
然后才会将自己负责的NN切换为Active状态.
2.2 如果ResourceManager故障后,应该怎么办?
-
HDFS HA 搭建:
-
安装Hadoop,修改配置文件(参考文档)
-
修改环境变量 HADOOP_HOME ,配置成ha集群的位置
例如: HADOOP_HOME=/opt/module/ha/hadoop-3.1.3 -
避免一些不必须的问题,删除每台机器/tmp目录下的内容
-
在每台机器启动JN:
hdfs --daemon start journalnode -
在任意一台nn上进行格式化操作,例如:nn1
nn1: hdfs namenode -format -
其他的nn同步nn1的数据
nn1: hdfs --daemon start namenode
nn2: hdfs namenode -bootstrapStandBy
nn3: hdfs namenode -bootstrapStandBy -
启动nn2 nn3
nn2: hdfs --daemon start namenode
nn3: hdfs --daemon start namenode -
在每台机器上启动DN
hdfs --daemon start datanode -
将其中的一个nn切换成Active状态
hdfs haadmin -transitionToActive nn1
-
-
自动故障转移HDFS HA 集群规划:
hadoop102 : Namenode Datanode JournalNode ZKFC ZK
hadoop103 : Namenode Datanode JournalNode ZKFC ZK
hadoop104 : Namenode Datanode JournalNode ZKFC ZK -
自动故障转移HDFSHA 搭建:
- 添加相应的配置(参考文档)
- 搭建Zookeeper集群并启动
- 关闭hdfs服务
stop-dfs.sh - 初始化HA在zk中的状态
hdfs zkfc -formatZK - 启动hdfs服务
start-dfs.sh
-
YARN HA 集群规划:
hadoop102 : Namenode Datanode JournalNode ZKFC ZK ResourceManager NodeManager
hadoop103 : Namenode Datanode JournalNode ZKFC ZK ResourceManager NodeManager
hadoop104 : Namenode Datanode JournalNode ZKFC ZK ResourceManager NodeManager -
YARN HA 搭建:
- 添加相应的配置(参考文档)
- 启动
start-yarn.sh
-
Hadoop HA 总结:
8.1 HDFS HA
1) 主要解决NameNode单点故障问题
2) 手动故障转移(过渡,没有实际意义)
3) 自动故障转移(基于手动故障转移的基础来搭建,生产环境使用的)
8.2 YARN HA
1) 主要解决ResourceManager单点故障问题 -
Hadoop 联邦架构:
- NameNode瓶颈:
内存不足。 - 通过多NameNode分割不同业务的数据,进行分步管理。
- NameNode瓶颈: