1. HDFS系统架构

HDFS(Hadoop Distributed File System),及Hadoop分布式文件系统
作用: 为Hadoop分布式计算框架提供高性能,高可靠,高可扩展的存储服务
架构:典型的主(NameNode)从(DataNode)架构,两者一对多的关系,一个节点对应一个DataNode,NameNode是整个文件系统的管理节点(文件系统的最高管理者), 负责对文件系统命名空间的
管理与维护,另外, 也负责面向于客户端对文件的操作,控制,存储统一管理与分配,而DataNode则是存储具体文件
数据类型:在HDFS上,有两种数据类型,分别是元数据类型(Metadata由NameNode存储在镜像文件中),所谓元数据就是文件除了实际内容外所有表示文件信息的数据,即MetaNode
     另外一种数据类型则是实际的文件数据了,在DataNode上存储形式是块(block,Hadoop1.x:64M;Hadoop2.x:128M),每个块可能有多个副本(默认3个,可自定义),因为由于副本机制,提高了文件数据的可靠性
     NameNode启动时加载镜像文件(fsimage.xxx)和操作文件(edits.xxx)到内存,并等待DataNode上报元数据,形成文件系统结构,一旦NameNode宕掉,则导致整个HDFS无法正常服务

2. HA定义

HA(High Availability,高可用性):系统对外提供正常服务时间的百分比
举个例子:Hadoop运行时会有两种情况
1. 是Hadoop正常提供服务时间(MTTF),
2. 是不能提供正常服务时间(MTTR), 所以HA=MTTF/(MTTF+MTTR)*100%
通过上面可以看出,HA能精确度量系统对对外提供正常服务的能力,也就是说系统的高可用程度
HDFS出现无法提供正常服务情况: 正常的软硬件升级,维护;客户误操作导致HDFS发生故障绝大部分是由于软件导致

3. HDFS HA 原因分析及应对措施

可靠性: NameNode作为管理节点,统一维护和控制HDFS文件系统,而DataNode存储实际文件,且有副本护驾,
    也就是说NameNode成为了HDFS系统的单一故障点,NameNode能否正常运行决定了HDFS的可靠性
可维护性: 一旦NameNode无法提供正常服务,如果元数据没有损坏,那就好说,重新启动即可,
     但元数据一旦损坏且没有任何措施,那么,NameNode的维护时间将无限大;
     DataNode因为副本的原故,既是块文件损坏,也会很快恢复,NameNode也决定了系统的可维护性,
     精确一点是NameNode元数据的可维护性决定HDFS的可维护性

4. 现有HDFS HA解决方案

主要是从使用者的角度出发,提高元数据的可靠性,减少NameNode服务恢复时间,措施主要是给元数据做备份,另外HDFS自身就有多种机制来确保元数据的可靠性,减少NameNode服务恢复时间的措施有两种思路:
1. 基于NameNode重启恢复模式,对NameNode自身启动过程进行分析,优化加载过程,减少启动时间
2. 启动一个NameNode热备节点,当主节点不能正常提供服务,切换为热节点,切换时间成为恢复时间
从效率上分析,第一种思路尽管进行了优化,但NameNode的启动时间仍受文件系统规模的限制,
第二种则突破了这种限制,现有比较成熟的HA解决方案有:
a. Hadoop元数据备份
  利用Hadoop自身元数据备份机制,NameNode可以将元数据保存到多个目录,一般是一个本地目录,有个远程目录(通过NFS进行共享),当NameNode发生故障,可以启动备用机器NameNode,加载远程目录中的元数据信息提供服务
优点:
  Hadoop自带机制,成熟可靠,使用简单方便,无需开发,配置即可
  元数据有多个备份,可有效保证元数据的可靠性,并且元数据内容保持在最新状态
缺点:
  元数据需要同步写入多个备份目录,效率低于单个NameNode
  恢复NameNode也就是重启NameNode,这样恢复时间与文件系统规模成正比
  由于备份的元数据在远程目录上,那么NFS在操作阻塞情况下,将无法提供正常服务  
b. Hadoop的SecondaryNameNode方案
  启动一个SecondaryNameNode节点,定期从元数据信息(fsimage)和元数据操作日志(edits)下载,然后两个文件合并生生成新的镜像文件,推送给NameNode并重置edits,NameNode启动时,只需加载新的fsimage
优点:
  Hadoop自带机制,成熟可靠,使用简单方便,无需开发,配置即可
  减少NameNode启动所需时间,防止edits文件过去庞大
缺点:
  没有做热备,那么重启时,文件系统的规模和启动时间成正比
  有概率在NameNode宕掉时,SecondaryNameNode并未做同步,也就可能一部分操作数据会丢失,重启后的文件系统并不是最新的
c. Hadoop 的 CheckPoint Node 方案
  CheckPoint(检查点)原理基本与SecondaryNameNode相同,实现方式不同,该方案利用Hadoop 的CheckPoint机制进行备份,配置一个CheckPoint Node节点,该节点定期区合并元数据镜像文件和用户操作日志edits,在本地形成最新的CheckPoint
  并上传到Primary NameNode 进行更新,一旦NameNode宕掉,可以启动备份NameNode节点读取CheckPoint信息,并提供服务
优点:
  使用简单方便,无需开发,配置即可
  元数据有多个备份
缺点:
  没有做热备,切换节点时间长和SecondaryNameNode一样
  有概率恢复的元数据信息不是最新的
d. Hadoop 的Backup Node 方案
  利用Hadoop自身的Failover措施,配置一个Backup Node,Backup Node 在内存和本地都保存一份HDFS最新的命名空间元数据信息,一旦NameNode宕掉,可使用Backup Node中最新的元数据信息
优点:
  Hadoop自带机制,无需开发,配置即用
  Backup Node的内存中保留了最新的元数据信息避免NFS挂载进行备份的所带来的风险,Backup Node可以直接利用内存中的元数据信息进行CheckPoint并保存到本地,效率比从
  NameNode下载元数据进行CheckPoint效率高,Backup Node在内存中保存,一旦有操作日志,Backup Node内存同步,并更新本地磁盘的edits,两个步骤都成功,整个操作才算成功,并保证了元数据的最新状态
缺点:
  该方案还不成熟,NameNode无法提供服务时,Backup Node 还不能直接接替NameNode提供服务
  Backup Node未保存Block的位置信息,等待DataNode上报,即便后期实现了热备,仍需要一部分时间进行切换,当前版本只允许一个Backup Node 连接到NameNode
e. DRDB方案
  利用DRDB方案机制进行元数据备份,也就是在NameNode无法提供服务时,启动备用机器的NameNode,读取DRDB备份的元数据信息
优点:
  比较成熟的备份机制
  元数据有多个备份,保证了元数据的最新状态
  备份工作由DRDB完成,对于新的操作日志,NameNode无需同步到多个备份目录,效率上优于元数据备份
缺点:
  没有做热备,切换机器启动NameNode时间长
  元数据的可靠性没有保障,需要引入新的机制去保证
f. FaceBook 的AvatarNode方案
  一种热备机制,首先AvatarNode作为Primary NameNode对外提供服务,Standby Node处于SafeMode模式,在内存中保存Primary NameNode最新的元数据信息,两者依靠NFS进行交互,
  DataNode报告操作日志时会同时向两个Node中发送Block位置信息,因此保证了元数据的最新状态一但Primary NameNode宕掉,直接由Standby Node接替并成为Primary Node对外提供服务,大大缩短切换时间
优点:
  提供热备、切换时间大大缩短
  集成在FaceBook自用的Hadoop中,并部署到了自己的集群
缺点:
  修改了部分源码,增加了一定的复杂性,在软件维护上带来一定问题
  参考资料少,只提供一个备份节点

5. 方案优缺点比较

  

Hadoop_HDFS HA 及解决方案的更多相关文章

  1. hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案

    我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...

  2. HDFS HA: 高可靠性分布式存储系统解决方案的历史演进

    1. HDFS 简介 HDFS,为Hadoop这个分布式计算框架提供高性能.高可靠.高可扩展的存储服务.HDFS的系统架构是典型的主/从架构,早期的架构包括一个主节点NameNode和多个从节点Da ...

  3. hadoop(二):hdfs HA原理及安装

    早期的hadoop版本,NN是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法使用.为了解决这个问题,出现了一堆针对HDFS HA的解决方案(如:Linux ...

  4. hadoop2.610集群配置(包含HA和Hbase )

    .修改Linux主机名2.修改IP3.修改主机名和IP的映射关系######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等)/etc/hosts里面要配置的是内 ...

  5. hadoop高可靠性HA集群

    概述 简单hdfs高可用架构图 在hadoop2.x中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态.Active NameNode对外提供服务,而Standb ...

  6. Hadoop2.41的HA的配置与启动

    我配置HA机制创建了7台虚拟机 1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为云主机.阿里云主机等) ...

  7. Hadoop2.0 Namenode HA实现方案

    Hadoop2.0 Namenode HA实现方案介绍及汇总 基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2 ...

  8. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  9. Zookeeper 三台主机 Ha集群的搭建

    前期准备1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 /etc/hosts ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等 ...

随机推荐

  1. 第十三篇:在SOUI中使用有窗口句柄的子窗口

    前言: 无论一个DirectUI系统提供的DUI控件多么丰富,总会有些情况下用户需要在DUI窗口上放置有窗口句柄的子窗口. 为了和无窗口句柄的子窗口相区别,这里将有窗口句柄的子窗口称之为真窗口. 每一 ...

  2. ios录音

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

  3. 通信原理实践(五)——2PSK 与2DPSK 通信系统

    一.一些Matlab函数 二.2PSK调制解调,性能分析 1.2PSK调制 (1)图示 (2)Matlab代码 function [ s_t ,bb_t,bits] = psk2_module( nS ...

  4. 课堂随笔 set (集合)

    1.什么是集合:set   (集合)为无序不重复的序列. 2.如何创建一个集合:(1)set()  这样就创建了一个空的集合(2)s1={11,22,33}这样也创建了一个集合.(3)s2=set([ ...

  5. [POJ1015]Jury Compromise

    题目大意:要求你从n个人中选出m个,每个人有两个值p[i],D[i],要求选出的人p总和与D总和的差值最小.若有相同解,则输出p总+D总最大的方案. 动态规划. 一直在想到底是n枚举外面还是m放外面, ...

  6. kafka 集群安装与安装测试

    一.集群安装 1. Kafka下载:wget https://archive.apache.org/dist/kafka/0.8.1/kafka_2.9.2-0.8.1.tgz 解压 tar zxvf ...

  7. git 学习笔记1--config & help

    1. config 配置用户名和邮箱: git config --global user.name 'pzdn2009' git config --global user.email 10502441 ...

  8. [转]HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

  9. javaScript怪癖分析

    最近了解到javascript中有些编程怪癖现象,很有意思,有必要总结一下: 1.未知变量名创建全局变量 在我们平常的编写javascript程序的时候,有的人写法不是很正规,在定义变量的时候 直接定 ...

  10. 获取ItemsControl中当前item的binding数据

    直接用 {Binding} 就可以了,如下: <ItemsControl ItemsSource="{Binding Path=ProcessItems}"> < ...