HDFS基本概念

HDFS的基本概念

  • HDFS(Hadoop Distributed Filesystem)是一个易于扩展的分布式文件系统,运行在成百上千台低成本的机器上。它与现有的分布式文件系统有许多相似之处,都是用来存储数据的系统工具,而区别于HDFS具有高度容错能力,旨在部署在低成本机器上。HDFS主要用于对海量文件信息进行存储和管理,也就是解决大数据文件(如TB乃至PB级)的存储问题。
    | NameNode(名称节点) | DataNode(数据节点) |
    | — | — |
    | 存储元数据 | 存储文件内容 |
    | 元数据保存在内存中 | 文件内容保存在磁盘上 |
    | 保存文件、Block与DataNode之间的映射关系 | 维护Block标识到DataNode本地文件的映射关系 |

1、NameNode(名称节点)

  • NameNode是HDFS集群的主服务器,通常称为名称节点或者主节点。一旦NameNode关闭,就无法访问Hadoop集群。NameNode主要以元数据的形式进行管理和存储,用于维护文件系统名称并管理客户端对文件的访问;NameNode记录对文件系统名称空间或其属性的任何更改操作;HDFS负责整个数据集群的管理,并且在配置文件中可以设置备份数量,这些信息都由NameNode存储。
  • 名称节点负责管理分布式文件系统命名空间(NameSpace),保存了两个核心的数据结构:fsimage和edits。元数据镜像文件fsimage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。用户操作日志文件edits中记录了所有针对文件的创建、删除、重命名等操作。

2、DataNode(数据节点)

  • DataNode是HDFS集群中的从服务器,通常称为数据节点。文件系统存储文件的方式是将文件切分成多个数据块,这些数据块实际上是存储在DataNode节点中的,因此DataNode机器需要配置大量磁盘空间。它与NameNode保持不断的通信,DataNode在客户端或者NameNode的调度下,存储并检索数据块,对数据块进行创建、删除等操作,并且定期向NameNode发送所存储的数据块列表。

3、Block(数据块)

  • 每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位,HDFS同样也有块(block)的概念,它是抽象的块,而非整个文件作为存储单元,在Hadoop2.x版本下,默认大小是128M,且备份3份,每个块尽可能地存储于不同的DataNode中。按块存储的好处主要是屏蔽了文件的大小,提供数据的容错性和可用性。
  • HDFS采用抽象块概念的优点
    | 优点 | 具体说明 |
    | — | — |
    | 支持大规模文件存储 | 文件以块为单位进行存储,一个大规模文件可以被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上,因此,一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量。 |
    | 简化系统设计 | 首先,大大简化了存储管理,因为文件块大小是固定的,这样就可以很容易计算出一个节点可以存储多少文件块;其次,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其它系统负责管理元数据。 |
    | 适合数据备份 | 每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性。 |

Client:客户端

  • 文件切分,Client负责将上传到HDFS的文件分成一个一个Block
  • 与Namenode交互,获取文件的位置信息
  • 与Datanode交互,读取或者写入数据
  • Client提供一些命令管理HDFS并对数据进行增删改查操作

4、Rack(机架)

  • Rack是用来存放部署Hadoop集群服务器的机架,不同机架之间的节点通过交换机通信,HDFS通过机架感知策略,使NameNode能够确定每个DataNode所属的机架ID,使用副本存放策略,来改进数据的可靠性、可用性和网络带宽的利用率。
什么是机架感知

通常大型 Hadoop 集群是以机架的形式来组织的,同一个机架上的不同节点间的网络状况比不同机架之间的更为理想,NameNode 设法将数据块副本保存在不同的机架上以提高容错性。
HDFS 不能够自动判断集群中各个 DataNode 的网络状况情况,Hadoop 允许集群的管理员通过配置 net.topology.script.file.name 参数来确定节点所处的机架,配置文件提供了 ip 到 rackid 的翻译。NameNode 通过这个配置知道集群中各个 DataNode 机器的 rackid。如果 net.topology.script.file.name 没有设定,则每个 ip 都会被翻译成 /default-rack。机器感知如下图所示:

图中的 D 和 R 是交换机,H 是 DataNode,则 H1 的 rackid = /D1/R1/H1,有了 rackid 信息(这些 rackid 信息可以通过 net.topology.script.file.name 配置)就可以计算出任意两台 DataNode 之间的距离。
distance(/D1/R1/H1 , /D1/R1/H1) = 0 相同的 DataNode
distance(/D1/R1/H1 , /D1/R1/H2) = 2 同 rack 下的不同 DataNode
distance(/D1/R1/H1 , /D1/R2/H4) = 4 同 IDC 下的不同 DataNode
distance(/D1/R1/H1 , /D2/R3/H7) = 6 不同 IDC 下的 DataNode
说明:

当没有配置机架信息时,所有的机器 Hadoop 都在同一个默认的机架下,名为 “/defult-rack”,这种情况的任何一台 DataNode 机器,bug物理上是否属于同一个机架,都会被认为是在同一个机架下。
一旦配置 net.topology.script.file.name,就按照网络拓扑结构来寻找 DataNode:net.topology.script.file.name 这个配置选项的 value 指定为一个可执行程序,通常为一个脚本。

Hadoop机架感知的作用
不开启机架感知的缺点

默认情况下,hadoop 的机架感知是没有被启用的。所以,在通常情况下,hadoop 集群的 HDFS 在选机器的时候,是随机选择的。
也就是说,如果实际节点不完全在相同的机架,但是又没有配置机架感知很有可能在写数据时:
hadoop 将第一块数据 block1 写到了 rack1 上,然后随机的选择下将 block2 写入到了 rack2 下,此时两个 rack 之间产生了数据传输的流量,再接下来,在随机的情况下,又将 block3 重新又写回了 rack1,此时,两个 rack 之间又产生了一次数据流量。在 job 处理的数据量非常的大,或者往 hadoop 推送的数据量非常大的时候,这种情况会造成 rack 之间的网络流量成倍的上升,成为性能的瓶颈,进而影响作业的性能以至于整个集群的服务。

开启机架感知的优势

不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架;
为了提高容错能力,DataNode 会尽可能把数据块的副本放到多个机架上。

5、Metadata(元数据)

  • 元数据从类型上分可分三种信息形式,一是维护HDFS文件系统中文件和目录的信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等;二是记录文件内容存储相关信息,例如文件分块情况、副本个数、每个副本所在的DataNode信息等;三是用来记HDFS中所有DataNode的信息,用于DataNode管理。

(三)HDFS的特点

  • 随着互联网数据规模的不断增大,对文件存储系统提出了更高的要求,需要更大的容量、好更的性能以及安全性更高的文件存储系统,与传统分布式文件系统一样,HDFS分布式文件系统也是通过计算机网络与节点相连,也有传统分布式文件系统的优点和缺点。

1、HDFS的优点

1)高容错性

  • 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
    -某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。

(2)适合批处理

  • 它是通过移动计算而不是移动数据。
  • 它会把数据位置暴露给计算框架。

(3)适合大数据处理

  • 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。
  • 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
  • 节点规模:能够处理10K节点的规模。
  • HDFS默认会将文件分割成block,128M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。

(4)流式数据访问

  • 一次写入,多次读取,不能修改,只能追加。
  • 它能保证数据的一致性。

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

  • 如普通PC、Linux系统上

2、HDFS的缺点

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

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

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

  • 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
  • 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。 改进策略

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

  • 一个文件只能有一个写,不允许多个线程同时写。
  • 仅支持数据 append(追加),不支持文件的随机修改。

HDFS写数据原理

DataNode选择

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据
节点距离:两个节点到达最近的共同祖先的距离总和

如图,图中标红的n-1和n-2的共同祖先为集群d1
n-1到其机架r2的距离为1,机架r2到集群d1的距离为1
n-2到其机架r3的距离为1,机架3到集群d1的距离为1
所以,两节点之间的距离为1+1+1+1=4
副本节点选择
第一个副本在Client所处的节点上,如果客户端在集群外,随机选择一个
第二个副本在另一个机架的随机节点
第三个副本在第二个副本所处机架的随机节点

6.HDFS读数据流程

(1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode首先会判断权限并检查是否有对应的数据,如果符合,NameNode通过查询元数据,找到文件块所在的DataNode地址返回个客户端
(2)创建FSDataInputStream,挑选一台DataNode(就近原则)服务器,如果该服务器访问量太大,会随机访问其他节点,请求读取数据
(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)
(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件,是串行读,即读取文件的某一块后,再读其他的部分进行追加组成完整的数据

8.DataNode工作机制

(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳
(2)DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息
(3)心跳DN向NN发送,每3秒一次,收到心跳返回带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟+30秒没有收到某个DataNode的心跳,则认为该节点不可用
(4)集群运行中可以安全加入和退出一些机器
DataNode数据完整性
如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢?
DataNode节点保证数据完整性的方法如下
(1)当DataNode读取Block的时候,它会计算CheckSum,HDFS写入的时候计算出校验和,然后每次读的时候再计算校验和
(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏
(3)Client读取其他DataNode上的Block
(4)常见的校验算法crc(32),md5(128),sha1(160)
(5)DataNode在其文件创建后周期验证CheckSum

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值