HDFS体系结构简介

来源:互联网 发布:阿里云服务器申请退款 编辑:程序博客网 时间:2024/06/06 01:43

HDFS体系结构简介

 

 

1、HDFS设计基础与目标:

  1.1、硬件错误是常态。因此需要冗余

1.2、流式数据访问。即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事

务处理

  1.3、大规模数据集

  1.4、简单一致性模型。为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,即是文件一经写入,关闭,就再也不能修改

  1.5)、程序采用“数据就近”原则分配节点执行

 

2、HDFS 体系结构:

2.1、NameNode:

              2.1.1、管理文件系统的命名空间

             2.1.2、记录每个文件数据块在各个Datanode上的位置和副本信息

              2.1.3、协调客户端对文件的访问

              2.1.4、记录命名空间内的改动或空间本身属性的改动

              2.1.5、Namenode使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等

 

映像文件为fsimage:

[hadoop@baolibin current]$ pwd/usr/hadoop/tmp/dfs/name/current[hadoop@baolibin current]$ lsedits  fsimage fstime  VERSION[hadoop@baolibin current]$

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存最近一次checkpoint的时间

SecondaryNameNode:

执行过程:
从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,
在本地保存,并将其推送到NameNode,同时重置NameNode的edits.默认在安装在NameNode节点上

2.2、DataNode:

         2.2.1、负责所在物理节点的存储管理

              2.2.2、一次写入,多次读取(不修改)

              2.2.3、文件由数据块组成,典型的块大小是64MB

              2.2.4、数据块尽量散布到各个节点

 

3、读取数据流程

       3.1、客户端要访问HDFS中的一个文件

       3.2、首先从namenode获得组成这个文件的数据块位置列表

       3.3、根据列表知道存储数据块的datanode

       3.4、访问datanode获取数据

       3.5、Namenode并不参与数据实际传输

 

4、HDFS的可靠性

       4.1、冗余副本策略

              4.1.1、可以在hdfs-site.xml中设置复制因子指定副本数量

              4.1.2、所有数据块都有副本

              4.1.3、Datanode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给namenode

       4.2、机架策略

              4.2.1、集群一般放在不同机架上,机架间带宽要比机架内带宽要小

              4.2.2、HDFS的“机架感知”

              4.2.3、一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提高带宽利用率

       4.3、心跳机制

              4.3.1、Namenode周期性从datanode接收心跳信号和块报告

              4.3.2、Namenode根据块报告验证元数据

              4.3.3、没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求

              4.3.4、如果datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机进行重新复制

              4.3.5、引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等

       4.4、安全模式

              4.4.1、Namenode启动时会先经过一个“安全模式”阶段

              4.4.2、安全模式阶段不会产生数据写

              4.4.3、在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的

              4.4.4、在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束

              4.4.5、当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数

       4.5、校验和

              4.5.1、在文件创立时,每个数据块都产生校验和

              4.5.2、校验和会作为单独一个隐藏文件保存在命名空间下

              4.5.3、客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏

              4.5.4、如果正在读取的数据块损坏,则可以继续读取其它副本

 

校验和为:dncp_block_verification.log.curr

 

[hadoop@baolibin current]$ pwd/usr/hadoop/tmp/dfs/data/current[hadoop@baolibin current]$ ll总用量 16-rw-rw-r--. 1 hadoop hadoop   4 2月  15 21:24blk_8347220751536874094-rw-rw-r--. 1 hadoop hadoop  11 2月  15 21:24blk_8347220751536874094_1002.meta-rw-rw-r--. 1 hadoop hadoop 289 2月 15 22:17 dncp_block_verification.log.curr-rw-rw-r--. 1 hadoop hadoop 158 2月 15 21:23 VERSION[hadoop@baolibin current]$


       4.6、回收站

              4.6.1、删除文件时,其实是放入回收站/trash

              4.6.2、回收站里的文件可以快速恢复

              4.6.3、可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块

       4.7、元数据保护

              4.7.1、映像文件刚和事务日志是Namenode的核心数据。可以配置为拥有多个副本

              4.7.2、副本会降低Namenode的处理速度,但增加安全性

              4.7.3、Namenode依然是单点,如果发生故障要手工切换

       4.8、快照机制

              4.8.1、支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态

 

 

 

一代Hadoop中的HDFS

 

 

0 0