Hadoop分布式文件系统HDFS
Hadoop分布式文件系统HDFS 是一种被设计运行在任何通用硬件上的分布式文件系统。是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
1、分布式文件系统
N台计算机联网协同工作,就像单台系统一样解决问题,也就是说它们可以横跨多台计算机的存储系统,存储在分布式系统上的数据自动分布在不同的节点上。
分布式文件系统在大数据时代具有广泛的应用前景,它们为储存和处理来自网络和其他地方超大规模数据提供所需的扩展能力。
2、分离元数据和数据 NameNode 和 DataNode
存储到文件系统中的每一个文件都有相关联的元数据。元数据包括文件名、i节点数、数据块位置;而数据则是文件的实际内容。
在传统的文件系统里,因为文件系统不会跨越多台机器,那么元数据和数据都存储在同一台机器上。
因而为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且并不需要知道其他客户端的活动,那么元数据需要在客户端之外维护。HDFS的设计理念就是拿出一台或者多台机器来保存元数据,并让剩下的机器来保存文件的内容。NameNode和DataNode是HDFS的两个主要组件。其中元数据存放在NameNode上,而数据存在DataNode的集群上,NameNode不仅要关联存在HDFS上的内容元数据,而且要记录一些事情,比如那些节点是集群的一部分,某个文件有几分备份等。它还要决定当集群的节点宕机或数据副本丢失时系统需要做什么。
存储在HDFS上的每一份数据片有多份副本(replication)在不同的服务器上,从本质上,NameNode是HDFS的主服务器(master),DataNode是slave(从服务器)。
3、HDFS写过程
NameNode负责管理存储在HDFS上的所有文件的元数据,它会确认客户端的请求,并记录下文件的名称和存储这个文件的DataNode集合,把该信息在内存中的文件分配表里进行存储。
举个栗子:
客户端发送一个请求给NameNode,将test.log文件写入HDFS中,具体的流程
1、客户端发送消息给NameNode,说要将“test.log”文件写入
2、NamdNode发送消息给客户端,叫客户端写到DataNodeA、B和D,并直接联系DataNodeB
3、客户端发送消息给DataNode B叫他保存一份“test.log”,并将一份副本给DataNode D
4、DataNode A发送消息给DatanNode D,并发送一份副本给DataNode D
5、DataNode A发送消息给DataNode D,保存文件
6、DataNode D发送确认信息给DataNode A
7、DataNode A 发送信息给DataNode B
8、DataNode B发送确认消息给客户端,即为写入成功
--------------------------------------------------------------------------------------------------------------------------------