hdfs namenode secondaryNameNode datanode

83 阅读2分钟

概述

客户端在向hdfs发送读写请求的时候,首先会访问hdfs的namenode。namenode告诉该文件路径在哪个datanode或者应该将这个文件写到哪个datanode。也就是namenode管理着hdfs集群的所有元数据信息。而且这些信息元数据信息都是保存在内存中的。一般namenode的机器内存比较大。

这样有一个问题:元数据在内存中,如果宕机了怎么办?存在文件里?如果只是在文件里,namenode又无法满足性能要求(因为每个请求都要先请求namenode)。

需要在内存和文件中都有。内存中的数据用于应对访问请求,文件中的数据用于恢复。

namenode

namenode的元数据有3类:

  • 内存中的元数据
  • fsimage 镜像文件。保存在磁盘。相当于内存中的镜像文件。
  • edits文件。用于每次元数据发生变更时的变更日志的保存。

image.png

namenode还有一个editsInProcessing文件,用于记录所有对元数据的写操作。namenode会经常将editsInProcessing的数据合并到内存。

namenode会定时的将fsimage和edits文件进行合并操作。而namenode的负载已经很高了,因此增加了一个secondaryNameNode来做这件事。

secondaryNameNode每3600s(可配置)或者edits文件变更了1百万次,就会往namenode发送checkpoint请求:namenode会将edtisInProcessing文件(每次对元数据的写操作都是追加这个文件)进行滚动生成新的edits文件,从namenode同步最新的fsimage和所有edits文件到secondaryNameNode,然后secondaryName开始合并操作,合并之后,回传给namenode。

datanode

datanode负责具体的数据存储。

image.png

datanode启动之后,会自动发现namenode,然后向namenode注册自己。