1、HDFS中的三个进程:NameNode(NN)、DataNode(DN)、SecondNameNode(SNN)
2、NameNode(NN)
1、作用:
1、接收客户端的一个读、写的服务,在namenode上存储了数据文件和datanode的映射的关系。
2、存储元数据信息,会将文件的一些属性、文件的大小、文件的权限都存储在namenode上面,和存储block的位置信息,在每次开启集群的时候datanode会向namenode汇报block的信息。
集群启动的时候:
首先在启动的时候,namenode是不会存储任何datanode与block的映射关系,是datanode会自动的将这种映射关系汇报给namenode,然后namenode会根据datanode的提供的关系自动的生成映射关系。
集群运行的时候:
namenode会与datanode保持一个心跳机制,每三秒一次,保证客户端在进行读写的需求的时候,namenode能够知道dataname的健康状态
可以让客户端读取存活的DN节点,如果NN与DN三秒没有心跳则认为DN出现异常,此时不会让新的数据写到这个异常的DN中,客户端访问的时候不提供异常DN节点地址,
如果超过十分钟没有心跳,那么NN会将当前DN节点存储的数据转移到其他的节点
3、NameNode为了效率,会将所有的操作都在内存中执行。这样的操作速度比较快,NameNode不会和磁盘进行任何的数据交换
但是会出现两个问题,那就是数据的持久化的问题和数据安全的问题,因为数据是存储在内存中,当出现意外的时候,数据容易丢失。
2、DataNode(DN):
1、作用:
1、存放的是文件的数据信息(block块),以及验证文件完整性的校验文件(以meta结尾的文件)
2、数据是存储在硬盘中
3、会向NN做汇报
1、在启动的时候,会先检验一下自身的block文件时候存在毁坏等问题,向NN汇报DN上面的block信息。
2、在运行的时候,和NN保持心跳机制
4、客户端在进行读写请求的时候,会先去NN中查询文件和block与DN的映射的关系,然后客户端就会与DN建立联系,然后读写数据。
3、SecondNameNode:
1、作用:
主要是负责合并NameNode的edit logs到fsimage文件中。
NN也会将存储的元数据信息存储到磁盘中,此时会使用到两个文件,分别是
- fsimage - 它是在NameNode启动时对整个文件系统的快照
- edit logs - 它是在NameNode启动后,对文件系统的改动序列
只有在NameNode重启时,edit logs才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在实际的生产中,集群中NameNode是很少重启的,这也意味着当NameNode运行了很长时间后,edit logs文件会变得很大,此时SNN就会将edit logs与原先旧的fsimage进行合并,产生一个新的fsimage。
主要的工作的流程是:
- 首先,它定时到NameNode去获取edit logs,并更新到fsimage上。[笔者注:Secondary NameNode自己的fsimage]
- 一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
- NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
4、安全模式:
安全模式是HDFS中的一种工作状态,出于安全模式的状态下,只向用户提供文件的只读的模式,不接受对命名空间的修改,同时NN也不会进行数据块的复制和删除。
强制退出安全模式:hdfs dfsadmin -safemode leave 进入安全模式的命令:hdfs dfsadmin -safemode enter查看安全模式:hdfs dfsadmin -safemode get等待安全模式退出:hdfs dfsadmin -safemode wait
5、机架感知
是为了保证副本在集群中的安全。需要将不同的节点存放在不同的节点上面。