hdfs学习

NameNode

    Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。应用程序可以设置HDFS保存的文件的副本数目。

文件副本的数目称为文件的副本系数,这个信息也是由Namenode保存的。

    Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。

块状态报告包含了一个该Datanode上所有数据块的列表。

NameNode的HA(High Available)

    NameNode管理着所有的元数据,通常元数据都保存在内存里,这样对元数据的访问能够高效。但是有个隐患,就是如果NameNode节点宕机了,那么所有的元数据就一去不复返了。

如果我们能够把元数据在内存里保存一份,同时在硬盘上也保存一份,那么即使掉电也能将数据再恢复过来。checkpoint机制就是将元数据实时在硬盘上保存一份的机制。

    先介绍几个相关的概念

  • 元数据:元数据存储在NameNode的内存中,主要包括两个部分
    • 目录树,目录树管理着HDFS中存储的所有的文件信息
    • 块数据和datanode的对应关系
  • edits:日志文件,记录对元数据的各种操作
  • fsimage:元数据的镜像文件,可以理解为元数据保存在磁盘上的一个副本

 

    现在来介绍一下checkpoint机制的流程

  • secondary namenode请求namenode暂时停止使用edits,把日志记录在edits.new文件中
  • secondary namenode从namenode复制fsimage、edits到本地 
  • secondary namenode合并fsimage、edits为fsimage.ckpt 
  • secondary namenode发送fsimage.ckpt到namenode 
  • namenode用新的fsimage覆盖旧的fsimage,用新的edits覆盖旧的edits 
  • 更新checkpoint时间

Namenode安全模式

    NameNode的安全模式本质上是HDFS集群的一种只读模式,此时集群不允许任何对文件系统或者数据块修改的操作 Namenode启动后会进入一个称为安全模式的特殊状态。

    处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的 Datanode接收心跳信号和块状态报告。

块状态报告包括了某个Datanode所有的数据块列表(前面提到过)。每个数据块都有一个指定的最小副本数。当Namenode检测确认某个数据块的副本数目达到这个最小值,

那么该数据块就会被认为是副本安全(safely replicated)的;在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),

Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并下发指令将这些数据块复制到其他Datanode上。

Datanode

    集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上,

HDFS中的文件总是按照128M(老版本是64M)被切分成不同的块,一个文件被切出来的各个块尽可能地存储于不同的Datanode中。

 

文件名

副本系数

块id

/users/sameerp/data/part-021,3
/users/sameerp/data/part-132,4,5

此处共使用了8个Datanode来存放文件data

数据复制

    客户端创建文件的请求其实并没有立即发送给Namenode,事实上,在刚开始阶段HDFS客户端会先将文件数据缓存到本地的一个临时文件。

应用程序的写操作被透明地重定向到这个临时文件。当这个临时文件累积的数据量超过一个数据块的大小,客户端才会联系Namenode。

    假设该文件的副本系数设置为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本。

然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4 KB)地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中第二个Datanode节点。

第二个Datanode也是这样,一小部分一小部分地接收数据,写入本地仓库,并同时传给第三个Datanode。最后,第三个Datanode接收数据并存储在本地。

因此,Datanode能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的方式从前一个Datanode复制到下一个。


参考:https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值