HDFS原理

由三个组件构成:Namenode、SecondaryNamenode、Datanode

Namenode

管理着文件系统的命名空间,维护着文件系统树,及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件(fsimage)编辑日志文件(edits)。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息在系统启动时由数据节点重建。

:Hadoop的块为什么如此大?

HDFS的块比磁盘块大,目的是为了最小化寻址开销。如果块设置的足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。

Hadoop为什么更倾向存储大文件?

因为文件越小,存储同样大小文件所需的元信息就越多, Namenode存储压力越大。

Datanode

存储并检索数据块(受客户端和Namenode调度);定期向Namenode发送它们所存储块的列表;Datanode之间进行通信,实现块的副本处理。

SecondaryNamenode

SecondaryNamenode所做的不过是在文件系统中设置一个检查点来帮助Namenode更好工作,不是取代namenode,也不是namenode的备份。

首先来看看namenode怎么工作的:

NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。

 

上面的这张图片展示了NameNode怎么把元数据保存到磁盘上的。这里有两个不同的文件:

1)fsimage - 它是在NameNode启动时对整个文件系统的快照

2)edit logs - 它是在NameNode启动后,对文件系统的改动序列

只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在产品集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大。在这种情况下就会出现下面一些问题:

1)edit logs文件会变的很大,怎么去管理这个文件是一个挑战。

2)NameNode的重启会花费很长时间,因为有很多改动要合并到fsimage文件上。

3)如果NameNode挂掉了,那我们就丢失了很多改动因为此时的fsimage文件非常旧。

SecondaryNameNode就是来帮助解决上述问题的,它的职责是合并NameNode的edit logs到fsimage文件中。

 

上面的图片展示了Secondary NameNode是怎么工作的:

1)首先,它定时到NameNode去获取edit logs,并更新到fsimage上。[Secondary NameNode自己的fsimage]

2)一旦它有了新的fsimage文件,它将其拷贝回NameNode中。

3)NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。

所以,Secondary NameNode的整个目的是在HDFS中提供一个检查点它只是NameNode的一个助手节点,大型集群中Secondary NameNode需要运行在一台专用机器上。

创建检查点的触发条件受两个配置参数控制:

1)每隔一小时(fs.checkpoint.period,单位秒)创建检查点;

2)编辑日志文件达到64MB(fs.checkpoint.size,单位字节),即使未满一小时也会创建,系统每隔五分钟检查一次编辑日志的大小。

机架感知策略:

HDFS写流程:

HDFS读流程:

HDFS-2.0新特性:

安全模式

Namenode启动时,首先会把镜像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作,一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志,此时,namenode开始监听RPC和HTTP请求,但是,此时namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。

在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块位置信息后,即课高效运行文件系统,注意系统中数据块的位置并不是由namenode维护的,而是以块列表的形势存储在datanode中。

如果满足最小副本条件(默认是1,由dfs.replication.min属性设置),namenode会在30秒后退出安全模式。在启动一个刚刚格式化的集群时,因为系统中还没有任何块,所以namenode不会进入安全模式。

查看属否处于安全模式:hadoop dfsadmin safemode get

运行某条命令之前先退出安全模式:hadoop dfsadmin safemode wait

进入安全模式:hadoop dfsadmin safemode enter

离开安全模式:hadoop dfsadmin safemode leave

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值