对HDFS架构和原理的理解
阅前须知: 在学习HDFS相关操作之前,需要对HDFS架构和原理进行深入的理解,在查阅资料的基础上,写一下我对于HDFS的深入理解。
HDFS的作用:
HDFS全称为(Hadoop Distributed File System)即 Hadoop分布式文件系统 HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
HDFS的主要优点:
1 可以存储超大文件**
这里的“超大文件”是指几百MB、GB甚至TB级别的文件。一般来说 hadoop的文件系统会存储TB级别或者PB级别的数据。
2 访问模式高效: 一次写入、多次读取(即流式数据访问)**
HDFS的数据处理规模比较大,应用一次需要访问大量的数据,这些应用一般都是批量处理,而不是用户交互式处理。应用程序能以流的形式访问数据集。主要的是数据的吞吐量,而不是访问速度。
3 检测和快速应对硬件故障**
在HDFS中硬件故障是常态,而不是异常。整个HDFS系统将由数百或数千个存储着文件数据片段的服务器组成。实际上它里面有非常巨大的组成部分,每一个组成部分都很可能出现故障,这就意味着HDFS里的总是有一些部件是失效的,因此,故障的检测和自动快速恢复是HDFS一个极大的优点
4 简化的一致性模型**
大部分HDFS操作文件时,需要一次写入,多次读取。在HDFS中,一个文件一旦经过创建、写入、关闭后,一般就不需要修改了。这样简单的一致性模型,有利于提高吞吐量。
5 可以运行在普通廉价的服务器上**
HDFS能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错和恢复机制来保证数据的高可用。一个副本丢失,可通过其他副本来恢复
HDFS的缺点:
1 不适合低延迟数据访问**
低延迟数据访问:和用户进行交互的应用,需要数据在毫秒或秒的范围内得到响应。由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟数据访问来说,不适合用hadoop
2 不适合大量的小文件储存**
HDFS支持超大的文件,是通过数据分布在数据节点,数据的元数据保存在名字节点上。名字节点的内存大小,决定了HDFS文件系统可保存的文件数量。虽然现在的系统内存都比较大,但大量的小文件还是会影响名字节点的性能。
3 不支持多用户写入,修改文件
HDFS的文件只能有一次写入,不支持多线程写入,也不支持修改。仅支持数据追加。因为只有这样数据的吞吐量才能大
4 不支持超强的事务
不能像关系型数据库那样,对事务有强有力的支持
HDFS架构图
HDFS 采用Master/Slave的架构来存储数据,这种架构主要由HDFS Client(客户端)、NameNode(master)、DataNode(slave)和Secondary NameNode。
客户端(client):
1)从DataNode中读取数据
2)用命令来管理 HDFS,例如:启动,访问,关闭HDFS。
3) 通过访问NameNode来获取文件的位置信息
Master(NameNode):
1)管理文件系统的命名空间。
2)记录每个文件数据块在各个DataNode上的位置和副本信息。
3)协调客户端对文件的访问。
4)记录命名空间内的改动或者空间本省属性的改动。
5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件 存储文件系统的命名空间,包括文件映射,文件属性等。
slave(DataNode):
1)将HDFS 数据以文件的形式存储在本地的文件系统中
2)执行数据的读/写操作
Secondary NameNode:
一般重要的元数据信息会有备份,这些备份都存储在Secondary NameNode里面。
扩展一下:数据块(block):大文件会被分割成多个block进行存储,block大小在Hadoop1.0的时候默认为64MB,但是到了Hadoop2.0的时候大小变成了128M。每一个block会在多个datanode上存储多份副本,默认是3份。
元数据操作(Metadata ops)
从客户端访问HDFS的文件:
1)首先从NameNode中获得组成这个文件的数据块位置列表。
2)接下来根据位置列表知道存储数据块的DataNode
3)最后访问DataNode获取数据。
注意:NameNode并不参与数据实际传输。
HDFS保证数据存储的可靠性原理
1)冗余副本策略,所有的数据都有副本,副本的数目可以在hdfs-site.xml中设置相应的复制因子。
2)机架感知感应,即Client会从离自己最近的保存有它要读取数据的DataNode上读取数据(比如说,现在有两个DataNode都存有Client想要读取的数据,其中一个与Client只隔着一台交换机,另一个与Client则隔着3台交换机,那么Client便会从离它近的那个DataNode上读取数据,这就是机架感应)
3)安全模式,NameNode启动时会先经过一个“安全模式”阶段。会先检查数据块的完整性,用于保证集群中的数据块的安全性。
4)回收站,删除的文件会先到回收站,如果误删,里面文件可以快速恢复。
5)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。
6)元数据保护,映像文件和事务日志是NameNode的核心数据,可以配置为拥有多个副本。
7)校验和,客户端获取数据通过检查校验和,确定数据块是否损坏,从而确定是否要读取副本。
8)心跳机制 当master启动的时候,会开一个ipc server在那里。
之后slave启动时,会连接master,并每隔3秒钟主动向master发送一个“心跳”,将自己的状态信息告诉master,然后master也是通过这个心跳的返回值,向slave节点传达指令。通过心跳机制确保操作的运行。