HDFS分布式文件系统



一、HDFS简介

1、相关概念

1Block

HDFS中的块Block是个抽象的概念,它比一般文件系统中的块要大得多。

当我们在配置Hadoop系统参数时会看到,HDFS默认的Block64MB

HDFS分布式文件系统的文件也被分成块进行存储,这是文件存储处理

基本逻辑单元。

HDFS作为分布式文件系统,被设计用来处理大文件的,使用抽象

Block有很多好处。好处一:可以存储任意大的文件,不会受到网络中

单个节点磁盘大小的限制。一般情况下,单个节点存储500TB的数据是

不可能的,但是由于逻辑块的设计,HDFS可以将这个超大的文件划分

成很多很多Block,然后存储到集群中的各台机器上。好处二:简化文件

存储子系统的管理。HDFSBlock的大小是固定的(可参数配置),这

样就简化了存储系统的管理,特别是元数据信息(目录、文件名、节点

位置….)可以和文件块内容分开存储。而且,Block更有利于分布式文件

系统复制容错的实现。为处理节点故障,HDFS默认将文件块副本数设定

3(可参数配置),分别存储在集群的不同节点上。当一个文件块损坏

时,系统会通过NameNode获取元数据信息,在另外的机器上读取一个副

本并进行存储,这个过程对用户来说是透明的。

2NameNodeDataNode

HDFS体系结构中有两类节点,分别是NameNodeDataNode它们的职责分别如下:

NameNode职责:

1) 接收用户的操作请求,比如创建目录、上传文件、下载文件等等;

2) 管理和维护整个文件系统的命名空间、文件目录树和文件的索引目录,这些信息

fsImage(文件系统镜像)和EidtLog(编辑改动日志)两种形式存储在本地文件系

统中。注意:这些信息不是永久存储的,NameNode会在系统每次重启时重建这些信

息。当运行任务时,客户端通过NameNode获取元数据信息,然后和DataNode交互

访问整个文件系统。

3) 管理文件和Block块之间的关系,blockDataNode节点之间的位置映射关系。

 

DataNode职责:

1) 通过心跳(heartbeat)定时向NameNode发送所存储的文件块信息;

2) 文件分成Block存储到磁盘上;

3)为保证数据安全,文件存有多个副本。

 

 

二、HDFS的体系架构

二话不说,先上图:



1、副本存放和数据读写

HDFS采用机架感知(rack-aware)策略来保证数据的可靠性和网络带宽的利用率。

大型HDFS实例经常运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机

器之间的通信需要通过交换机,这样无疑增加了数据传输的成本。

通过机架的感知过程,NameNode可以确定每个DataNode所属的机架ID。目前,

HDFS采取的策略是将副本存放在不同的机架上。这样一来,可有效防止当整个机

架失效时数据的丢失,而且允许读取数据时充分利用多个机架的网络带宽。这有利

于将副本均匀分布在集群中,有利于在组件失效时的负载均衡。但是,由于写操作

需要传输数据块到多个机架,这无形增加了写操作的成本。

那么,HDFS的副本到底采用什么样的策略才比较靠谱呢?我们知道,副本默认值

3,其存放策略是:将一个副本存放在本地机架的节点上,另一个副本存放在同

一机架的不同节点上,最后一个副本存放在不同机架的节点上。这样,减少了机架

间的数据传输,也就提高了写数据的效率。同时,由于数据块只存放在两个不同的

机架上,所以这个策略减少了读取数据时需要的网络传输总带宽。这样,在不影响

数据可靠性和读取性能的情况下,大大提高了写操作的性能。

另外,在读取数据时,为减少整体的带宽消耗和带宽延时,HDFS会让读取程序

优先读取离客户端最近的副本。假如在读取程序所在的机架上有一个副本,那么就

读取该副本。如果HDFS集群跨越了多个数据中心,同样也是优先读取本地数据中心

副本。


(1) HDFS正常写数据







(2) HDFS正常读取数据



(3)非正常写数据



(4)描述异常  DataNode掉线、宕机;数据块坏了;  NameNode宕机 )



(5)发现异常  ( dn掉线、宕机;数据块坏了;  nn宕机 )  



2、安全模式

NameNode启动后,会进入安全模式这种特殊状态,此时的NameNode是不会进行数据块的复制的

而是从所有的DataNode上接收心跳信号(heartbeat)和块状态报告(block report)。块状态报告包括某个

DataNode所有的数据块列表。当NameNode检测确认某个数据块的副本数目达到最小值时,那么,该数据

块被认为是副本安全的;在一定的百分比(可参数配置)的数据块被NameNode检测确认安全之后(外加30

秒的等待时间)NameNode将退出安全模式。然后,它还会确定哪些数据块的副本还没有达到指定数目,

并将这些数据块复制到其他DataNode上。

3、文件安全

NameNode的重要性不言而喻。如果NameNode出现故障,那么意味着整个文件系统的全部文件会

丢失,因为我们无法通过DataNode上的数据块来重构文件。那么,Hadoop是通过什么机制来保证

NameNode的安全呢?

NmaeNode运行的同时,系统中运行着一个SecondaryNameNode守护进程。其职责是:从NameNode

上下载元数据信息(fsImageedits),然后把二者在本地合并,产生新的fsImage,然后将其推送到NameNode

上,同时重置NameNodeeditsSecondaryNameNode的运行通常需要大量的CPU和内存做合并操作,这就要

求其运行在一台单独的机器上。在这台机器上,会存储合并过的FsImage,当NameNode宕机时做替补使用。

但是,SecondaryNameNode的备份总滞后于NameNode,所以丢失部分数据是必然的。合并过程详见图示:


最后,让我们来看看这个过程对应的源代码具体是如何实现的:

void doCheckpoint() throws IOException {

    // Do the required initialization of the merge work area.
    startCheckpoint();

    // Tell the namenode to start logging transactions in a new edit file
    // Retuns a token that should be used to verify the downloaded image file.
    CheckpointSignature sig = (CheckpointSignature)namenode.rollEditLog();

    // error simulation code for junit test
    if (ErrorSimulator.getErrorSimulation(0)) {
      throw new IOException("Simulating error0 " +
                            "after creating edits.new");
    }

    downloadCheckpointFiles(sig); // Fetch fsimage and edits
    doMerge(sig);                 // Do the merge
    
    // Upload the new image into the NameNode, providing the new checksum for
    // the image file.
    putFSImage(sig);

    // error simulation code for junit test
    if (ErrorSimulator.getErrorSimulation(1)) {
      throw new IOException("Simulating error1 " +
                            "after uploading new image to NameNode");
    }

    // Then tell the Namenode to make this new uploaded image as the most
    // current image.
    namenode.rollFsImage();
    checkpointImage.endCheckpoint();

    LOG.info("Checkpoint done. New Image Size: "
              + checkpointImage.getFsImageName().length());
  }




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值