Hadoop HDFS概念学习系列之HDFS Block(八)

  1. 云栖社区>
  2. 博客>
  3. 正文

Hadoop HDFS概念学习系列之HDFS Block(八)

技术小哥哥 2017-11-21 16:35:00 浏览692
展开阅读全文

 是文件系统中的一个很重要的概念。在UNIX/Linux系统中有一个数据块(Data Block)的概念,Data Block是文件系统读写的最小数据单元。一般在文件系统中数据块的大小是512字节,一个文件所占的大小就是数据块大小的整数倍.对于用户来讲对文件的访问/存取都是透明的,同样系统管理员可以利用系统本身的命令对数据块进行相关操作。因此单从文件系统来讲,HDFS也有一个块(Block)的概念,不同之处在于HDFS为了满足大数据的效率和整个集群的吞吐量选择了更大的数值,默认为64MB。和一般的文件系统不同的是:虽然块设置得比较大,但是当一个文件的大小小于HDFS的块大小时,实际存储所占的大小并不占用一个块的大小

  客户端在读取HDFS上的一个文件时就以块为基本的数据单元。例如一次简单读取,首先,客户端把文件名和程序指定的字节偏移,根据固定的Block大小,转换成文件的Block索引。然后,客户端把文件名和Block索引发送给Master节点,Master节点将相应的Block标识和副本的位置信息返回给客户端,客户端用文件名和Block索引作为key缓存这些信息,之后客户端发送请求到其中的一个副本,一般会选择最近的。请求信息包含了Block的标识和字节范围。在对这个Block的后续读取操作中,客户端不必再和Master节点通信了,除非缓存的元数据信息过期或文件被重新打开。实际上,客户端通常会在一次请求中查询多个Block信息,Master节点的回应也可能包含了紧跟着这些被请求的Block后面的Block的信息。在实际应用中,这些额外的信息在不花费任何代价的情况下,避免了客户端和Master节点未来可能会发生的几次通信。

  我们知道,在操作系统中都有一个文件块的概念,文件以块的形式存储在磁盘中,此处块的大小代表系统读/写可操作的最小文件大小。也就是说,文件系统每次只能操作磁盘块大小的整数倍数据。通常来说,一个文件系统块大小为几千字节,而磁盘块大小为512字节。文件的操作都由系统完成,这些对用户来说都是透明的。

  这里,我们所要介绍的HDFS中的块是一个抽象的概念,它比上面操作系统中所说的块要大得多。在配置Hadoop系统时会看到,它的默认块大小为64MB。和单机上的文件系统相同,HDFS分布式文件系统中的文件也被分成块进行存储,它是文件存储处理的逻辑单元。

  HDFS作为一个分布式文件系统,设计是用来处理大文件的,使用抽象的块会带来很多好处。一个好处是可以存储任意大的文件而又不会受到网络中任一单个节点磁盘大小的限制。可以想象一下,单个节点存储100TB的数据是不可能的,但是由于逻辑块的设计,HDFS可以将这个超大的文件分成众多块,分别存储在集群的各台机器上 另外一个好处是使用抽象块作为操作的单元可简化存储子系统。这里之所以提到简化,是因为这是所有系统的追求,而对故障出现频繁和种类繁多的分布式系统来说,简化就显得尤为重要。在HDFS中块的大小固定,这样它就简化了存储系统的管理,特别是元数据信息可以和文件块内容分开存储。不仅如此,块更有利于分布式文件系统中复制容错的实现。在HDFS中,为了处理节点故障,默认将文件块副本数设定为3份,分别存储在集群的不同节点上。当一个块损坏时,系统会通过NameNode获取元数据信息,在另外的机器上读取一个副本并进行存储,这个过程对用户来说都是透明的。当然,这里的文件块副本冗余量可以通过文件进行配置,比如在有些应用中,可能会为操作频率较高的文件块设置较高的副本数最以提高集群的吞吐量。

  在HDFS中,可以通过终端命令直接获得文件和块信息,比如以下命令可以列出文件系统中组成各个文件的块。

   hadoop  fsck/ -files  -blocks

 

  我们知道数据块(Block)

  在讨论文件系统的时候,特别是在分析文件系统的实现时,我们知道,为了便于管理,设备往往将存储空间组织成为具有一定结构的存储单位。如磁盘,文件是以块的形式存储在磁盘中,块的大小代表系统读/写操作的最小单位;在Linux的Ext3文件系统中,块大小默认为4095字节。文件系统通过一个块大小的整数倍的数据块,来使用磁盘。磁盘上的数据块管理属于文件系统实现的内部细节,对于通过系统调用读写文件的用户来说,是透明的。

  HDFS也有块的概念,不过是更大的单元,默认FiDFS数据块大小是64MB。和普通文件系统类似,HDFS上的文件也进行分块,块作为单独的存储单元,以Linux上普通文件的形式保存在数据节点的文件系统中。数据块是HDFS的文件存储处理的单元。

  HDFS是针对大文件设计的分布式系统,使用数据块带来了很多的好处,具体如下:

  1) HDFS可以保存比存储节点单一磁盘大的文件。
文件块可以保存在不同的磁盘上。其实,在HDFS中,文件数据可以存放在集群上的任何一个磁盘上,不需要保存在同一个磁盘上。或同一个机器的不同磁盘上。
2)简化了存储子系统。
简单化是所有系统的追求,特别是在故障种类繁多的分布式系统,将管理“块”和管理“文件”的功能区分开,简化了存储管理,也消除了分布式管理文件元数据的复杂性。
3)方便容错,有利干数据复制。
在HDFS中,为了应对损坏的块以及磁盘、机器故障,数据块会在不同的机器上进行复制(一般副本数为3,即一份数据保存在3个不同的地方),如果一个数据块副本丢失或者损坏了,系统会在其他地方读取副本,这个过程对用户来说是透明的,它实现了分布式系统中的位置透明性和故障透明性。同时,一个因损坏或机器故障而丢失的块会从其他地方复制到某一个正常运行的机器,以保证副本数目恢复到正常水平。该正常水平的副本数,也称副本系数。
HDFS的数据块比前面讨论过的磁盘块大得多,一个典型HDFS系统中,磁盘块的大小为64MB,也有使用128MB和256MB数据块大小的集群。为什么在HDFS中要使用这么大的数据块呢?原因和在磁盘上使用大磁盘块的原理是一样的。在普通文件系统中使用较大的磁盘块,可以减少管理数据块需要的开销,如在Linux中可以减少保存在i-node中磁盘地址表中的信息链的长度:同时,在对文件进行读写时,可以减少寻址开销,即磁盘定位数据块的次数。HDFS中使用大数据块,可以减少名字节点上管理文件和数据块关系的开销,同时,对数据块进行读写时,可以有效地减少建立网络连接需要的成本。

 

 

 

 

本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5081487.html,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小哥哥
+ 关注