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

  • Post author:
  • Post category:其他



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

前面介绍了HDFS的API操作,那么接下来就对HDFS原理之

核心设计



工作机制

进行详细的分析。

好了,我们开始今天的正文。

在这里插入图片描述




一、HDFS心跳机制



在网络环境中


,一定会存在数据丢失和延迟的可能。

如果

DataNode节点

一上线,就直接向

NameNode

汇报,下线也汇报。但是,很多时候由于网络环境问题,DataNode下线的时候根本来不及报告。


因此在设计中,就模仿了动物的心跳,每隔一段时间跳动一次。


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都已经丢失从而HDFS会自动进入安全模式

  • 3、伴随着每个DataNode启动后,会定期向NameNode汇报自身所持有的blockid信息,随着DataNode陆续启动,从而陆续汇报block信息,NameNode就会将内存元数据中的block所在DataNode信息补全更新 ,当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负载均衡



版权声明:本文为shujuelin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。