该文章参考 Hadoop权威指南
引言
随着数据爆炸式增长,数据的存储和分析作为一个大的难题。多年来硬盘存储容量增长的同时,访问速度-数据从硬盘读取的速度,未内与时俱进。比如1990年, 一个磁盘存储1370M需要4.4MB/s的速度,我们只需5分钟就能读取整个磁盘的
数据。20年过去了,1TB(=1024GB)级别的磁盘驱动器很正常。传输的速度在100MB/s左右, 因此需要2个半小时以上的时间才能读取整个驱动器的数据。从一个磁盘驱动器读取所有数据需要花那么长时间,写更慢。一个简单的解决方法是
同时从多个磁盘读取时间,试想如果100个磁盘,每个磁盘存储1%的数据,如果并行运行,我们不到2分钟时间就可以读取所有数据。但是面临很多问题。
第一个问题,硬件故障,硬件设施增加,出现故障概率会增加。
第二个问题,大部分任务需要通过某种方式将数据合并起来,分布式系统能够组合多个数据源信息,如何保证正确性是个非常难的挑战。
为此,hadoop的hdfs,分布式文件系统有什么好处?
第一,一个文件可以大于网络上任意一个磁盘容量,不需要存储在一个磁盘上,可以分块利用集群从存储任意一个磁盘上。
第二, 利用块抽象单元而不是文件简化存储子系统,比如说传统文件系统每个文件都会带有文件名,文件大小等信息,导致元数据冗余。
第三, 如果块损坏以及磁盘故障,每个块在少数其他机器上进行复制,如果一个块损坏还可以再其他机器读取副本。
为什么HDFS中的块设置为128M?
HDFS的块比磁盘的大,目的是为了减少寻址的开销,通过一个块足够大,从磁盘转移数据的时间能够远大于定位这个块开始端的时间,因此传送一个由多个块组成的文件时间取决于磁盘传输速率。
如果寻址时间是10毫秒左右,传输速率是100M/s,为了使寻址时间为传输时间的1%,我们需要100M左右大小,考虑到其他因素HDFS设置为128M的块,这一个数字将以后随着新一代磁盘传输速度加快而做调整。
在实际生产情况下,如果CPU性能差,也就是寻址时间比较慢,block文件要加大。如果带宽比较小,CPU性能比较好,block文件要调小。
什么叫做元数据?
元数据(Meta Data), 又称中介数据, 中继数据,为描述数据的数据(data about data),主要是为了描述数据属性(property)信息, 用来支持如指示数据的存储位置,历史数据,资源查找,文件记录等功能。
数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。
HDFS的架构
HDFS集群有两个节点,以管理者-工作者的模式进行,即一个名称节点(NameNode)管理者和多个数据节点(DataNode)工作者。
1. 名称节点NameNode
- 管理文件的命名空间,以“/"为根目录
- 管理管路目录树上的文件元数据信息。元数据持久化到磁盘上:fsimage文件和edits文件(记录操作日志)。NameNode接到客户端对文件读写操作,首先更改内存里面元数据信息,然后把操作记录到edits文件里面。
- 接受客户端对文件的控制访问,比如更改文件名,权限等。
- 接受客户端对文件的读写请求,但不是真正执行读写操作。
- 接受DataNode的心跳信息,维护集群上的DataNode列表。
- 接收DataNode上报存储的块列表。
NameNode的启动过程:
2. 数据节点DataNode
3. 辅助节点SecondaryNameNode,checkPoint检查点节点
合并流程:
HDFS写文件流程
HDFS读文件流程