一、Namenode 和 Datanode
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
简单来说就是datanode把文件切成多个小块,存储在不同的机器上,namenode负责维护整个文件系统的目录树。
Namenode和Datanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统(OS)。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。
二、副本存放:
把一个文件分成多个小块,存储到不同的机器上,如果某台机器出现故障,那么就没办法获取到完整的文件了,这时候就出现了副本存放,即每个datanode上都存放N份小块的副本:
在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。于此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。三分之一的副本在一个节点上,三分之二的副本在一个机架上,其他副本均匀分布在剩下的机架中,这一策略在不损害数据可靠性和读取性能的情况下改进了写的性能。
三、特性:
hdfs适应一次写入,多次读出的场景,并不支持文件的修改,不适合做网盘应用,因为不便修改,延迟大、网络开销大。适合数据分析。
- 容量可以在线扩展
- 数据存储高可靠
- 分布式运算处理很方便
- 数据访问延迟较大,不支持数据的修改操作
- 适合一次写入,多次读出的场景
更多详情可以参考官方文档(Hadoop分布式文件系统:架构和设计):http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html
原文地址:https://www.cnblogs.com/wange/p/9853662.html