冗余备份

每个文件存储成一系列数据块(Block)。为了容错,文件的所有数据块都会有副本(副本数量即复制因子,可配置)。

在 Hadoop1.x 当中, 文件的 block 块默认大小是 64M, hadoop2.x 当中, 文件的 block 块大小默认是 128M, block 块的大小可以通过 hdfs-site.xml 当中的配置文件进行指定

<property>
   <name>dfs.block.size</name>
   <value>块大小 以字节为单位</value>
</property>
  • 心跳检测

    NameNode 周期性地从集群中的每个 DataNode 接受心跳包和块报告,收到心跳包说明该 DataNode 工作正常DataNode掉线参数配置

    DataNode网络故障或者死亡,造成和NameNode无法完成通信,NameNode不会立刻移出该节点,要经过一定的时间之后才判断DataNode死亡不可用,默认该时间为10分30秒。

    心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟30秒没有收到某个DataNode的心跳,则认为该节点不可用

    超时时间计算公式为:

  • 副本存放

    采用机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率,以默认的副本数=3为例,第一个副本块存本机,第二个副本块存跟本机同机架内的其他服务器节点,第三个副本块存不同机架的一个服务器节点上

TimeOut=2*dfs.namenode.heartbeat.recheck-interval+10*dfs.heartbeat.interval
相关配置在hdfs-site.xml中配置

<!--NameNode检查心跳包的时间间隔-->

<property>

    <name>dfs.namenode.heartbeat.recheck-interval</name>

    <value>300000</value>

</property>

<!--DataNode发送心跳包的时间间隔-->

<property>

    <name>dfs.heartbeat.interval</name>

    <value>3</value>

</property>

安全模式

安全模式是 Hadoop 的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。

假设我们设置的副本数(即参数 dfs.replication)是 3,那么在 DataNode 上就应该有 3 个副本存在,假设只存在 2 个副本,那么比例就是 2/3=0.666。HDFS 默认的副本率是 0.999。我们的副本率 0.666 明显小于 0.999,因此系统会自动的复制副本到其他 DataNode,使得副本率不小于 0.999。如果系统中有5个副本,超过我们设定的 3 个副本,那么系统也会删除多余的 2 个副本。

在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。当整个系统达到安全标准时,HDFS 自动离开安全模式。

Hdfs集群退出安全模式条件:

hdfs-site.xml配置描述
dfs.namenode.safemode.min.datanodes最小可用datanode数量,默认0
dfs.namenode.safemode.threshold-pct副本数达到最小要求的block占系统总block数的百分比,默认0.999f。(只允许丢一个块)
dfs.namenode.safemode.extension稳定时间,默认值30000毫秒,即30秒

查看安全模式状态:

hdfs dfsadmin -safemode get

进入安全模式:

hdfs dfsadmin -safemode enter
离开安全模式
hdfs dfsadmin -safemode leave
  • 数据完整性检测

    HDFS 客户端软件实现了对 HDFS 文件内容的校验和(Checksum)审查。

为什么块的大小不能设置太小,也不能设置太大?

1、HDFS 的块设置太小,会增加寻址时间,程序一直在找块的开始位置;

2、如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

综上所属 HDFS 块的大小设置主要取决于磁盘传输速率。

举例说明:

1、假设找到文件对应块寻址时间为 10ms

2、寻址时间为传输时间的 1%,因此传输时间为 10ms/0.01=1000ms=1s

3、假设磁盘的传输效率为 100M/s,因此1秒可以传输 100M 的数据。




最后修改: 2023年12月27日 星期三 16:52