Hdfs学习笔记

Published: by Creative Commons Licence

  • Tags:

基本架构

HDFS是一个Master/Slave结构的分布式系统。

其中名字节点是HDFS的主节点。名字节点管理着文件系统的命名空间,包括文件系统目录树、文件/目录信息、文件的数据库索引。这些信息以两个文件的形式永久保存在名字节点的本地磁盘上,即命名空间镜像文件和编辑日志文件。同时名字节点还维护着数据块到数据节点的对应关系,这部分内容没有保存在名字节点的磁盘上,而是在名字节点启动的时候动态构建的。HDFS客户端会通过名字节点获取上述信息,之后读写文件数据。

名字节点是唯一的,因此一旦故障了会导致整个系统不可用。为了解决名字节点的单点问题,Hadoop 2.X中引入了名字节点高可用(HA)的支持。在HA实现中,同一个HDFS集群中会配置两个名字节点,一个活动一个备用。活动节点和备用节点是完全同步的,那么在活动名字节点发生故障而停止服务的时候,备用名字节点可以立即切换为活动状态,而不会影响名字节点的可用性。

名字节点的内存中除了保存文件系统的命名空间外,还保存了文件系统中所有数据块与数据节点的对应关系。这意味着数据块很多的时候,名字节点的内存消耗量会非常大。因此Hadoop 2.X版本引入了联邦HDFS机制,联邦HDFS机制允许添加名字节点实现命名空间的扩展,其中每个名字节点都管理文件系统命名空间的一部分,是一个独立的命名空间卷。每个名字节点是独立关系,两两不通信,即使其中一个下线,其余的也不会发现。比如一个名字节点管理所有/tmp下的文件,而另外一个名字节点管理所有/etc下的文件。

数据节点是HDFS中的从节点,数据节点会根据HDFS客户端请求或Namenode调度将新的数据块写入本地存储,或者读出本地存储保存的数据块。

数据节点作为HDFS的从节点,会不断地向名字节点发送心跳,数据块汇报以及缓存汇报,名字节点会向数据节点发送指令,数据节点会执行这些指令。

参考资料

  • 《Hadoop 2.X HDFS源码剖析》