Hadoop文件系统简介
Hadoop家族中,最重要的两部分内容就是MapReduce和HDFS,其中MapReduce是一种编程范型,这种范型比较适合用来在分布式环境下进行批处理计算。另一部分就是HDFS,即hadoop分布式文件系统。Hadoop环境下可以兼容多种文件系统,包括本地文件系统,体现在文件系统API层面上就是有一个文件系统接口,这个接口可以有多种实现,包括本地文件系统或者分布式文件系统等。
一:HDFS的设计目标
HDFS是用来将数据存储到多台计算机上(计算机集群)为主要设计目标的,它与传统的文件系统有许多不同之处。
(1)首先,HDFS主要用来存储大文件,包括几百M,几百G,几百T大小的文件等,目前HDFS已经有可以用来支持PB级数据存储的Hadoop集群。
(2)HDFS主要用来处理一次写入多次读取的操作,小部分的内容修改不是hadoop擅长的。
(3)HDFS使用商用服务器来组成集群运行hdfs系统。因为没有使用昂贵的硬件,所以单点故障是不可避免的,因此HDFS需要有很强的容错性。即使在单点故障的情况下仍然可以正常运行。
(4)HDFS是为实现高数据吞吐量来优化的,因此少量的数据要求快速访问并不适合。
(5)HDFS使用主从架构,有一个负责管理整个系统的Name节点,这个节点保存整个文件系统的元数据。并且这些数据放到内存中方便快速读取,HDFS中每个文件都会保存相关的系统到Name节点的内存中,因此Name节点是整个系统可存放文件数目的瓶颈。可以使用联邦Name节点机制来扩展HDFS。也因为这个原因,HDFS中不适合存放大量小文件。
(6)HDFS不允许多用户写入,而且写入数据也只是在文件末尾写入,不支持任意位置的写入。
二:HDFS中的基本概念
数据块
1. 磁盘是存储文件的地方,文件系统是基于磁盘进行构建的。磁盘有数据块的概念,数据块是磁盘进行数据读/写的基本单位。磁盘数据块的大小一般为512字节,文件系统中也有数据块的概念,文件系统的数据块大小一般为磁盘数据块大小的整数倍,一般为几千字节。
2. hdfs中也有块的概念,与普通的文件系统一样,hdfs也会将一个文件分成块大小的多个块(chunk),作为独立的存储单元。hdfs中的块很大,默认为64MB。另外,hdfs中小于块大小的文件不会占据整个块的空间。将块设置的如此大的原因是为了最小化寻址时间,使数据请求中传输磁盘数据的时间远大于寻址时间(找到文件块的开始位置)。
3. 使用数据块概念的好处:一个文件大小可以超过网络中任意一个磁盘的大小,可以简化子系统的设计(将数据块与元数据分开),分块可以便于数据备份提高容错能力。
namenode与datanode
1. hdfs以master-slaver模式工作,其中有一个namenode作为主节点,slaver作为从节点。namenode负责管理整个文件系统的命名空间,它是通过在本地磁盘保存两个文件来实现的,分别是命名空间镜像文件和编辑日志文件。namenode保存文件块的相关信息,但不永久保存。因为这些信息会在datanode启动时重建。
2. datanode节点是文件系统的工作节点,存储并且检索数据块,并且定期向namenode发送所存储的块的列表。
3. namenode容错机制,一种是备份组成文件系统元数据持久状态的文件,另一种是运行一个辅助namenode。
4. 联邦hdfs,因为当文件系统中的文件数目巨大时,namenode需要将元数据信息存放到内存中,此时内存成为文件系统的瓶颈,可以利用联邦hdfs机制,使用多个namenode来管理文件系统的元数据,每个namenode管理文件系统中的一部分元数据。