HDFS 2.X对比HDFS1.X 主要是HA—Zookeeper
HDFS2.X
- 解决了HDFS1.0中单点故障和内存受限问题(metaData将要加载到内存)
- 解决单点故障
HDFS HA:通过主备NameNode解决
如果住NameNode发生故障,则切换到备用的NameNode上
- 解决内存受限问题
HDFS Federation
水平扩展,支持多个NameNode
每个NameNode分管一部分目录
所有NameNode共享所有DataNode存储资源
- 2.X仅是架构发生了变化,使用方式不变
- 对HDFS使用者透明
- HDFS1.X中的命令和API任然可以使用
HDFS2.X HA
一个集群中只允许一个活动的NameNode(Active)。
NameNode的两个功能:
1.获取客户端的读写服务
2.存放元数据,元数据包括fsimage和edits文件
fsimage是NameNode格式化的时候产生的,edits是客户端操作读写上传下载文件等的日志。
HA时
1.Standby拷贝Active的fsimage文件
2.Active的edits文件,存放在内部集群中。把edits文件保存在JournalNodes上(图中绿色的)。fsimage文件和edits文件合并也是JournalNode机器来做。
Standby和Active的区别就是少了客户端的读写请求,其余一模一样。
- 主备NameNode
- 解决单点故障
主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换
所有DataNode同时向两个NameNode汇报数据块信息。
- 两种切换选择
手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
自动切换:给予Zookeeper实现
- 基于Zookeeper自动切换方案
Zookeeper Failover Controller:监控NameNode健康状态
并向Zookeeper注册NameNode
NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC锁的NameNode变为Active
一个Zookeeper集群为多个服务做高可用。
Zookeeper两大功能:
1.内存数据库保存NameNode的状态信息和位置信息,多副本
2.选举
通过NameService ID来区分不同的服务。
NameNodeID区分NameNode