初识HDFS

1、概览

HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。它是将一个大文件拆分成若干块保存在不同服务器上的不同节点上。通过联网让用户感觉像是在本地一样查看文件,为了降低文件丢失造成的错误,它会为每个小文件复制多个副本(默认为三个),以此来实现多机器上的多用户分享文件和存储空间。

选择 HDFS 存储数据,是因为 HDFS 具有以下优点
(1) 高容错性

  1. 数据自动保存多个副本。它通过增加副本的形式,提高容错性。

  2. 某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。

(2) 适合批处理

  1. 它是通过移动计算而不是移动数据。

  2. 它会把数据位置暴露给计算框架。

(3) 适合大数据处理

  1. 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。

  2. 文件规模:能够处理百万规模以上的文件数量,数量相当之大。

  3. 节点规模:能够处理10K节点的规模。

(4) 流式数据访问

  1. 一次写入,多次读取,不能修改,只能追加。

  2. 它能保证数据的一致性。

(5) 可构建在廉价机器上

  1. 它通过多副本机制,提高可靠性。

  2. 它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。

HDFS 缺点

(1) 不适合低延时数据访问;

  1. 比如毫秒级的来存储数据,这是不行的,它做不到。

  2. 它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况 下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。

改进策略

(2) 无法高效的对大量小文件进行存储

  1. 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

  2. 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。 改进策略

(3) 并发写入、文件随机修改

  1. 一个文件只能有一个写,不允许多个线程同时写。

  2. 仅支持数据 append(追加),不支持文件的随机修改

2、HDFS基本结构

在这里插入图片描述
如上图所示,HDFS基本结构分NameNode、SecondaryNameNode、DataNode这几个。

NameNode:是Master节点,有点类似Linux里的根目录。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

SecondaryNameNode:保存着NameNode的部分信息(不是全部信息NameNode宕掉之后恢复数据用),是NameNode的冷备份;合并fsimage和edits然后再发给namenode。(防止edits过大的一种解决方案)

DataNode:负责存储client发来的数据块block;执行数据块的读写操作。是NameNode的小弟。

热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

fsimage:元数据镜像文件(文件系统的目录树。)

edits:元数据的操作日志(针对文件系统做的修改操作记录)

namenode内存中存储的是=fsimage+edits。

3、NameNode详解

首先看namenode工作流程图:如下
在这里插入图片描述
作用:

Namenode起一个统领的作用,用户通过namenode来实现对其他数据的访问和操作,类似于root根目录的感觉。

Namenode包含:目录与数据块之间的关系(靠fsimage和edits来实现),数据块和节点之间的关系

fsimage文件与edits文件是Namenode结点上的核心文件。

Namenode中仅仅存储目录树信息,而关于BLOCK的位置信息则是从各个Datanode上传到Namenode上的。

Namenode的目录树信息就是物理的存储在fsimage这个文件中的,当Namenode启动的时候会首先读取fsimage这个文件,将目录树信息装载到内存中。

而edits存储的是日志信息,在Namenode启动后所有对目录结构的增加,删除,修改等操作都会记录到edits文件中,并不会同步的记录在fsimage中。

而当Namenode结点关闭的时候,也不会将fsimage与edits文件进行合并,这个合并的过程实际上是发生在Namenode启动的过程中。

也就是说,当Namenode启动的时候,首先装载fsimage文件,然后在应用edits文件,最后还会将最新的目录树信息更新到新的fsimage文件中,然后启用新的edits文件。

整个流程是没有问题的,但是有个小瑕疵,就是如果Namenode在启动后发生的改变过多,会导致edits文件变得非常大,大得程度与Namenode的更新频率有关系。

那么在下一次Namenode启动的过程中,读取了fsimage文件后,会应用这个无比大的edits文件,导致启动时间变长,并且不可控,可能需要启动几个小时也说不定。

Namenode的edits文件过大的问题,也就是SecondeNamenode要解决的主要问题。

SecondNamenode会按照一定规则被唤醒,然后进行fsimage文件与edits文件的合并,防止edits文件过大,导致Namenode启动时间过长。

4、SecondaryNameNode详解

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

5、DataNode详解

DataNode在HDFS中真正存储数据。

首先解释块(block)的概念:

  1. DataNode在存储数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。
  2. 假设文件大小是100GB,从字节位置0开始,每128MB字节划分为一个block,依此类推,可以划分出很多的block。每个block就是128MB大小。
  3. block本质上是一个 逻辑概念,意味着block里面不会真正的存储数据,只是划分文件的。
  4. block里也会存副本,副本优点是安全,缺点是占空间

6、工作原理

6.1、写操作

在这里插入图片描述

6.2、读操作

在这里插入图片描述

7、Hadoop HA工作流程图

在这里插入图片描述
1、1~4步骤实现了NN的热备。
2、5~8步骤实现了NN的状态切换。
3、9~12步骤实现了防止“脑裂”现象的发生。

QJM

ZKFC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值