Hadoop分布式文件系统(一)

概述

Hadoop分布式文件系统HDFS,即Hadoop Distributed Filesystem。HDFS被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
HDFS整体架构如图1。
Hadoop分布式文件系统(一)

文件

文件(File)由一个inode和一系列数据块(block)组成。inode用于存储文件的元数据,例如:访问权限、文件大小、创建时间等。数据块(block)用于存储文件的实际的数据,一个块默认为64MB。
Hadoop分布式文件系统(一)

数据块

每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的整数倍。文件系统块一般为几千字节,而磁盘块一般为512字节。
HDFS中块(block)要大得多,默认为64MB。与单一磁盘上的文件系统类似,HDFS上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。但与其他文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间。
对分布式文件系统的块进行抽象会带来很多好处。
1、 一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上,因此他们可以利用集群上的任意一个磁盘进行存储。
2、 使用块作为存储单元,大大简化了存储子系统的设计。将存储子系统控制单元设置为块,可简化存储管理(由于块的大小是固定的,因此计算单个磁盘能存储多少个块就相对容易)。同时也消除了对元数据的顾虑(块只是存储数据的一部分,而文件的元数据,如权限信息,并不需要与块一同存储,其他系统就可以单独管理这些元数据)。
3、 块还非常适合用于数据备份进而提供数据容错能力和提高可用性。将每个块复制到少数几个独立的机器上(默认为3个),可以确保在块、磁盘或机器故障后数据不会丢失。如果发现一个块不可用,系统会从其他地方读取另一个复本,而这个过程对用户是透明的。一个因损坏或机器故障而丢失的块可以从其他候选地点复制到另一台可以正常运行的机器上,以保证复本的数量回到正常水平。