在Hadoop1.x版本的时候,Namenode存在着单点失效的问题。如果namenode失效了,那么所有的基于HDFS的客户端——包括MapReduce作业均无法读,写或列文件,因为namenode是唯一存储元数据与文件到数据块映射的地方。而从一个失效的namenode中恢复的步骤繁多,系统恢复时间太长,也会影响到日常的维护。

Hadoop的2.x版本在HDFS中增加了对高可用性的支持来解决单点失效的问题。

这一实现中简单说就是配置了一对活动-备用namenode。当活动namenode失效的时候,备用namenode就会接管它的任务并开始服务于来自客户端的请求,不会有任何明显中断。

下面我们来看一下HDFS实现高可用性的架构图:

从架构图我们可以看到:

Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。

主备切换控制器又称故障转移控制器,ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到NameNode 的健康状况,在主NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换。

Zookeeper 集群:为主备切换控制器提供主备选举支持。

共享存储系统:共享存储系统是实现NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主NameNode和备NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。

DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

最新文章

  1. Dell DRAC的重启方法
  2. 【CodeVS】P1041 car的旅行路线
  3. UVa725 - Division
  4. How to change Form & Property & Report font for current User [AX2012]
  5. phpnow升级php版本 php-5.2.14-Win32升级至5.3.5
  6. Source Insight的应用技巧、宏功能
  7. async await 异步编程杂记
  8. ECSTORE2.0 定时任务配置
  9. HDU5475
  10. spring 事务无效解决方法
  11. 【编程技巧】EXTJS中Ext.grid.GridPanel配置项autoExpandColumn的使用方法
  12. Java的动态代理
  13. TableVie优化方法和优化机制
  14. nginx set变量后lua无法改值
  15. Pycharm激活方法步骤
  16. MySQL内连接(INNER JOIN)
  17. java操作elasticsearch实现基本的增删改查操作
  18. WAS 手动删除server
  19. 深入理解Linux内核-内存管理
  20. jquery 直接访问图片路径

热门文章

  1. lapis 项目添加prometheus 监控
  2. Linux 性能分析调优 (四)——案例篇:系统中出现大量不可中断进程和僵尸进程怎么办
  3. 论 业务系统 架构 的 简化 (一) 不需要 MQ
  4. Linux shell 将字符串分割成数组
  5. Linux之用户组、文件权限详解
  6. JavaScript学习总结(二、隐式类型转换、eval())
  7. GPIO实验
  8. 通过U盘启动vmware虚拟机
  9. Java事件监听器的四种实现方式
  10. 解决js输出汉字乱码问题