关于HDFS的一些总结

一,HDFS的架构
1.x版本的架构存在SPOF(单点失效)的问题。每个集群只有一个NN,如果该NN挂掉,则整个集群就挂掉。(这里不讨论1.x)
2.x的解决了SPOF问题,同时还加入了Federation HDFS功能,该功能理论上能够支持datanode数据块无限拓展!
对2.x的架构理解,简要总结一下
2.x的HA典型架构如下图(注,该图重点在于描述HA方案的实现,不涉及Fedaration):
这里写图片描述

个人总结了几点:
1),JNs包含两个层面,其一是指存储edits log的物理存储地址,其二是一组(共奇数个)JNs守护进程;
2),正常时,JNs守护进程负责将Active的修改用edits log记录,同时Standby会通过JNs来读取edits,更新Standby内部的命名空间。
3),故障时,JNs会告知Standby切换到Active状态。在任何时间,JNs只允许一个NN是Active。
4),在进行故障转移时,为了保证只会有一个Active NN,系统会采用一系列的规避措施。典型如会将先前的Acticve NN杀死,形象地称为STONITH(shoot the other node in the head——将其他节点爆头)

2.x的Fedaration典型架构如下图
这里写图片描述

关于2.x架构(HA & Federation)更详细的运行机制及过程,参考下面链接
http://blog.csdn.net/bigdata_player/article/details/51932437
http://www.cnblogs.com/tgzhu/p/5790565.html
https://www.iteblog.com/archives/833.html

二,FsImage 和 FsEdit的意义及它们的运行机制

FsImage。存储的是元数据镜像文件,具体讲是存储某一时段NameNode内存元数据信息。
FsEdit。操作日志文件。比如说,上传一个文件或删除一个文件,这些操作。

从而引申出以下几个问题:
1),什么是元数据?
简单来讲,就是HDFS文件的属性信息(文件名、目录名等等属性信息)、文件内容信息(文件块情况、副本数等等内容信息)、datanode映射的相关信息等。详细见如下链接:http://blog.csdn.net/xiaming564/article/details/23165253
因此,通过FsImage的元数据信息,理论上就可以找到任意的数据块内容。
2),FsImage和FsEdit是怎么存储的?
FsEdit只会存于磁盘上。因为只是记录数据块的修改这个动作,不记录实际的数据块内容,因此每次记录的信息很少(即FsEdit对吞吐量几乎没有要求)。可以直接写在磁盘上,不用写在内存中。(多一句嘴,分布式系统普遍是这么处理的,如elasticsearch)
FsImage 内存中存一份,磁盘中存一份,两者内容总是保持一致,即都是保存着元数据信息。
3),FsImage 和 FsEdit 为什么要进行合并?
首先讲什么是合并。通俗点讲,就是FsImage会按照FsEdit记录的数据块的改变“轨迹”进行顺次的“推演”,且FsImage会在元数据中进行相应的改变。
再讲为何要合并。在NameNode运行期间,HDFS的所有更新操作都是直接写到Edits中,久而久之Edits文件将会变得很大;虽然这对NameNode运行时候是没有什么影响的,但是我们知道当NameNode重启的时候,NameNode先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行Edit中的记录,当Edits文件非常大的时候,会导致NameNode启动操作非常地慢,而在这段时间内HDFS系统处于安全模式(简单理解为不让写入),这显然不是用户要求的。因此就一定要进行合并。
4),为什么要每隔一段时间才进行image的合并呢?为什么不实时的在image中进行合并?
因为同步合并是非常耗费资源的操作,会使得namenode的压力过大。那为了减轻namenode的压力,我们通常会用另外的一个namenode中进行合并操作(1.x中是secondary namenode进行合并,2.x中是standby namenode进行合并),且也只是每个一段时间进行合并操作,太频繁的合并没有必要、且也会增加合并的namenode的压力。而真正的active namenode只负责来自于集群中所有客户端的操作。这样做到各司其职!
5),关于namenode 和 datanode中的文件的含义。
http://blog.csdn.net/levy_cui/article/details/60144621
6),如果datanode巨多,即数据块巨多,则内存中的FsImage也会变得非常大。夸张一点,FsImage有1000G之巨,那一台机器的内存就绝对行不通?怎么办?
答案是采用Federation HDFS。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值