HDFS学习– Namenode and Datanode
2013-01-07 20:38
666 查看
个人小站,正在持续整理中,欢迎访问:http://shitouer.cn
小站博文地址:HDFS学习(三) – Namenode and Datanode
HDFS集群以Master-Slave模式运行,主要有两类节点:一个Namenode(即Master)和多个Datanode(即Slave)。
HDFS Architecture:
![](http://images.cnitblog.com/blog/79891/201212/28151428-391b65427e0c4f33afdfe24369c4be53.png)
Namenode结构图课抽象为如图:
![](http://images.cnitblog.com/blog/79891/201212/28162904-8e93a9ccbcaa470e897cc88323849998.png)
客户端(client)代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。
第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。Hadoop可以通过配置来让Namenode将他的持久化状态文件写到不同的文件系统中。这种写操作是同步并且是原子化的。比较常见的配置是在将持久化状态写到本地硬盘的同时,也写入到一个远程挂载的网络文件系统。
第二种方式是运行一个辅助的Namenode(Secondary Namenode)。 事实上Secondary Namenode并不能被用作Namenode它的主要作用是定期的将Namespace镜像与操作日志文件(edit log)合并,以防止操作日志文件(edit log)变得过大。通常,Secondary Namenode 运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。辅助Namenode保存着合并后的Namespace镜像的一个备份,万一哪天Namenode宕机了,这个备份就可以用上了。
但是辅助Namenode总是落后于主Namenode,所以在Namenode宕机时,数据丢失是不可避免的。在这种情况下,一般的,要结合第一种方式中提到的远程挂载的网络文件系统(NFS)中的Namenode的元数据文件来使用,把NFS中的Namenode元数据文件,拷贝到辅助Namenode,并把辅助Namenode作为主Namenode来运行。
更多有关Hadoop HA的介绍,可以参见HDFS学习(四) – HDFS Federation
HDFS系列文章:
《HDFS学习(一) – HDFS设计》
《HDFS学习(二) – HDFS Block介绍》
《HDFS学习(三) – Namenode and Datanode》
《HDFS学习(四) – HDFS Federation》
小站博文地址:HDFS学习(三) – Namenode and Datanode
HDFS集群以Master-Slave模式运行,主要有两类节点:一个Namenode(即Master)和多个Datanode(即Slave)。
HDFS Architecture:
![](http://images.cnitblog.com/blog/79891/201212/28151428-391b65427e0c4f33afdfe24369c4be53.png)
Namenode
Namenode 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。Namenode结构图课抽象为如图:
![](http://images.cnitblog.com/blog/79891/201212/28162904-8e93a9ccbcaa470e897cc88323849998.png)
客户端(client)代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。
Datanode
Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。Namenode容错机制
没有Namenode,HDFS就不能工作。事实上,如果运行namenode的机器坏掉的话,系统中的文件将会完全丢失,因为没有其他方法能够将位于不同datanode上的文件块(blocks)重建文件。因此,namenode的容错机制非常重要,Hadoop提供了两种机制。第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。Hadoop可以通过配置来让Namenode将他的持久化状态文件写到不同的文件系统中。这种写操作是同步并且是原子化的。比较常见的配置是在将持久化状态写到本地硬盘的同时,也写入到一个远程挂载的网络文件系统。
第二种方式是运行一个辅助的Namenode(Secondary Namenode)。 事实上Secondary Namenode并不能被用作Namenode它的主要作用是定期的将Namespace镜像与操作日志文件(edit log)合并,以防止操作日志文件(edit log)变得过大。通常,Secondary Namenode 运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。辅助Namenode保存着合并后的Namespace镜像的一个备份,万一哪天Namenode宕机了,这个备份就可以用上了。
但是辅助Namenode总是落后于主Namenode,所以在Namenode宕机时,数据丢失是不可避免的。在这种情况下,一般的,要结合第一种方式中提到的远程挂载的网络文件系统(NFS)中的Namenode的元数据文件来使用,把NFS中的Namenode元数据文件,拷贝到辅助Namenode,并把辅助Namenode作为主Namenode来运行。
更多有关Hadoop HA的介绍,可以参见HDFS学习(四) – HDFS Federation
HDFS系列文章:
《HDFS学习(一) – HDFS设计》
《HDFS学习(二) – HDFS Block介绍》
《HDFS学习(三) – Namenode and Datanode》
《HDFS学习(四) – HDFS Federation》
相关文章推荐
- HDFS学习(三) – Namenode and Datanode
- Hadoop学习笔记(老版本,YARN之前),MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- Hadoop学习(三)— hdfs : NameNode与DataNode的实现机制
- Hadoop学习(三)— hdfs : NameNode与DataNode的实现机制
- HDFS Namenode Audit Design and Implemention
- hdfs2.6.2源码学习:Day2-DataNode启动流程分析
- Hadoop学习笔记,MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- Hdfs(NameNode&DataNode)和Hive迁移总结
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
- Hadoop学习笔记:MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)
- HDFS datanode源码分析
- Experience on Namenode backup and restore --- checkpoint......
- HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)
- HDFS源码分析心跳汇报之DataNode注册
- HDFS DataNode 设计实现解析
- 【HDFS】datanode注册信息都有啥?
- Java 实现HDFS API接口 与获取Active NameNode Address
- HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)
- org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /