hdfs架构分析

hdfs介绍

hadoop的分布式文件系统hdfs是依据谷歌的GFS论文来实现的,它是一个被设计成为运行在廉价的通用硬件之上,具有容错性的文件系统。hdfs的设计使得它能够提供很高的吞吐量,很适合大规模的数据集合。


hdfs架构

hdfs的设计如下图所示



hdfsNamenodeDatanode组成,NamenodeDatanode可以在任何异构的机器上运行。hdfs由java语言开发,这些机器上都安装jvm虚拟机,所以都可以很轻松的部署NamenodeDatanode。比较典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode,极大的缓解了中心节点namenode的压力。

hdfs具有高可用的特点,即使一台机器宕机,存在hdfs里的数据也不会丢失,这就要归功于hdfs的副本的特点了。HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。

Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。

如下图所示



hdfs读写

hdfs的读文件流程如下


客户端首先访问namenode,得到文件的块的存储位置,然后去datanode读取对应的数据块,然后再告知namenode关闭文件。

hdfs写文件的流程如下


客户端首先访问namenode,得到文件的分配到的块所在的datanode的服务器位置,然后写数据到第一个datanode,然后datanode依次向其他副本所在的datanode写入数据,等待所有的数据都写好了,九返回客户端写入成功,最终告知namenode关闭客户端。

你可能感兴趣的:(分布式系统,hadoop,hdfs,架构,分布式文件系统)