大数据Hadoop(五)HDFS的原理之核心设计(1)

大家好,我是脚丫先生 (o^^o)

前面介绍了HDFS的API操作,那么接下来就对HDFS原理之核心设计工作机制进行详细的分析。

好了,我们开始今天的正文。
在这里插入图片描述


一、HDFS心跳机制

在网络环境中,一定会存在数据丢失和延迟的可能。因此HDFS文件系统中对于DataNode的就有两个设计:

  • 1 如果DataNode一上线,就直接向NameNode汇报,下线也汇报(但是,很多时候DataNode下线的时候根本来不及报告)
  • 2 动物的心跳,每隔一段时间跳动一次,因此DataNode向NameNode汇报也采取心跳的话,那么从DataNode一上线开始,就每隔一段时间汇报,如果隔了一段时间NameNode还没有接受到DataNode的汇报信息的话,就可以猜测,它是不是挂了。

NameNode去判断DataNode到底是死了还是活呢? 也有两方面

  • 1 心跳:DataNode每隔一段时间向NameNode发送一个心跳数据包
  • 2 检查:当某个DataNode达到一定时间的时候, NameNode也没有收到心跳数据NameNode就默认它已经挂掉了。但是还不能确认。所以启动检查机制:检查两次, 每次间隔五分钟。

HDFS文件系统里的进程启动顺序:

先启动namenode
再启动所有的datanode
然后启动secondarynamenode

总结 :

  • 1 Hadoop 中包含了两个独立的主从架构(Master / Slave)的集群:HDFS 和 YARN。HDFS的主节点的守护进程是:NameNode,从节点的守护进程是 DataNode。YARN的主节点的守护进程是:ResourceManager,从节点的守护进程是 NodeManager。(以下Master为NameNode,slave为DataNode)
  • 2 Master 启动的时候会启动一个 IPC(Inter-Process Comunication,进程间通信)Server 服务,等待 Slave 的链接。
  • 3 Slave 启动时,会主动链接 Master 的 IPC 服务,并且每隔3秒链接一次 Master,这个间隔时间是可以调整的,参数为 dfs.heartbeat.interval,这个每隔一段时间去连接一次的机制,我们形象的称为心跳。Slave 通过心跳汇报自己的信息给 Master,Master 也通过心跳给Slave下达命令
  • 4 NameNode 通过心跳得知 DataNode 的状态,ResourceManager 通过心跳得知 NodeManager 的状态。 如果 master 长时间都没有收到 slave 的心跳,就认为该slave挂掉了。

注意: Namenode感知到Datanode掉线死亡的时长计算:
HDFS 默认的超时时间为 10分钟+30秒,也就是 630s。 这里暂且定义超时时间为 timeout 计算公式为:

timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

默认的 heartbeat.recheck.interval 大小为5分钟,dfs.heartbeat.interval 默认的大小为3秒。

需要注意的是 hdfs-site.xml配置文件中的 heartbeat.recheck.interval 的单位为毫秒,dfs.heartbeat.interval 的单位为秒 所以,举个例子,如果heartbeat.recheck.interval设置为5000(毫秒),dfs.heartbeat.interval设置为3(秒,默认),则总的超时时间为40秒。

<property>
        <name>heartbeat.recheck.interval</name>
        <value>5000</value>
</property>
<property>
        <name>dfs.heartbeat.interval</name>
        <value>3</value>
</property>

二、HDFS安全模式

HDFS的安全模式的进入条件有两种情况:

  • 1 刚启动的时候,还没有接受到所有的datanode的汇报所以不确定哪些文件齐全,哪些文件由数据丢失。等待所有的datanode都汇报了达到一个效果 所有的数据都都还在,HDFS的安全会自动退出。反之,也是自动进入的。
  • 2 当HDFS的数据块丢失达到一定比例时:0.1% 。HDFS也会自动进入安全模式。
  • 3 可以通过手动的方式让HDFS进入安全模式。

在 HDFS 集群正常冷启动时,NameNode 也会在 SafeMode 状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可

正常启动的时候进入安全的原理:

  • 1、NameNode的内存元数据中,包含文件存储目录的路径、副本数、blockid,及每一个block所在
    DataNode的信息,而fsimage中,不包含block所在的DataNode信息

  • 2、当NameNode冷启动时,此时内存中的元数据只能从fsimage中加载而来,从而就没有block所在的
    DataNode信息,就会导致NameNode认为所有的block都已经丢失

  • 3、从而HDFS会自动进入安全模式

  • 4、伴随着每个DataNode启动后,会定期向NameNode汇报自身所持有的blockid信息,随着DataNode陆续启动,从而陆续汇报block信息,NameNode就会将内存元数据中的block所在DataNode信息补全更新

  • 5、当HDFS集群中的每个文件都找到了所有block的位置,从而自动退出安全模式

安全模式常用操作命令:

hdfs dfsadmin -safemode leave       //强制NameNode退出安全模式
hdfs dfsadmin -safemode enter       //进入安全模式
hdfs dfsadmin -safemode get         //查看安全模式状态
hdfs dfsadmin -safemode wait        //等待,一直到安全模式结束

注意:

  • 1 安全模式下用户可以进行的操作(不修改元数据的操作):ls查询、cat查看文件内容、get下载
  • 2 安全模式下用户不可以进行的操作(修改了元数据的操作):创建目录、上传、修改文件名、文件追加

三、HDFS副本存放策略

四、HDFS负载均衡

猜你喜欢

转载自blog.csdn.net/shujuelin/article/details/120122599