HDFS核心的设计思想
HDFS 集群中,主要的角色有 NameNode 和 DataNode 两大角色 (SecondaryNamenode 和 Client);
NameNode 负责管理文件系统的元数据,并响应 Client 的请求;
DataNode 负责存储用户的文件块(block),进行读写文件,并向 NameNode 发送心跳信息。
文件会按照固定的大小切分成块(block),每一个 block 的默认大小为 128M;
每一个 block 都会存在多个副本,形成备份存在于不同的 DataNode 中,默认的副本数为 3 ;
DataNode 会向 NameNode 定期的发送心跳,其中包含 bolck 的信息及 DataNode 自身状态;
HDFS 的内部工作机制对 Client 是保持透明的,客户端通过 NameNode 访问文件系统;
一、Hadoop 心跳机制
1、Hadoop 中使用的是主从架构 Master/Slave,Master 中有 NameNode、ResourceManage,Salve 中有 DataNode、NodeManage;
2、Master 启动的时候,会启动一个 IPC 服务,等待 Slave 的链接;
3、Slave 启动的时候,会主动的链接 Master 的 ipc server 服务;
4、Slave 会每隔 3 秒(默认值)访问一次 Master 的 ipc server 服务;
5、将这种 每隔 3 秒访问一次的机制称之为心跳机制;
6、心跳的间隔时长可以通过 dfs.heartbeat.interval 的参数进行设置;
7、NameNode 通过心跳得知 DataNode 的状态;ResourceManager 通过心跳得知 NodeManager 的状态;
8、如果 Master 长时间没有收到 Slave 的心跳,则认为该 Slave 节点挂掉了;
9、NameNode 感知 DataNode 掉线死亡的时长计算公式:2 倍的尝试重新连接时间 + 10 倍的心跳时间;默认值 2 倍的 5 分钟 + 10 倍的 3 秒 = 10 分钟 30 秒;
二、安全模式
1、在启动集群的时候,会发现 NameNode 进去了安全模式,即 SafeMode;
2、SafeMode 是 NameNode 的一种状态 (active/standby/safemode);
3、当 NameNode 发现集群中的 block 的丢失率达到一定比例时(默认为 0.1%),NameNode 会进入 SafeMode,在安全模式下,Client 只能对文件进行查看操作,不能对文件进行读写移动等的操作;
4、SafeMode 的丢失率可以通过参数 dfs.safemode.threshold.pct 配置 默认为 0.999f;
5、修复宕机的 DataNode 和 手动强制,可以使 NameNode 退出 SafeMode;
正常启动集群的时候 NameNode 进入 SafeMode 的原理:
1、NameNode 中储存集群的元数据,包含文件路径、副本数、blockId、每个 block 位置及 block 所在的 DataNode 的信息。
2、NameNode 启动的时候会将磁盘中的 fsimage 文件内信息加载到内存,但是 fsimage 不包含 DataNode 的信息;
3、所以 NameNode 会认为此时全部的 DataNode 都挂掉了,且 block 全部丢失;
4、当全部的 DataNode 启动完毕,并且向 NameNode 发送心跳,发送 block 的信息之后;
5、NameNode 会将元数据中的 block 和 DataNode 的信息补全;
6、此时 NameNode 才会退出 SafeMobe;
三、副本存放策略
HDFS 中,将文件分块并进行副本存放,是保证数据的可靠性和高性能的关键;
受到网络带宽,服务器机架,保持高可靠性等因素的影响,HDFS 具有一套副本存放策略;
副本存放策略(默认副本为 3 ):
1、当前 Client 所在的节点存在 DataNode,那么第一块副本将放在 和 Client 同节点的 DataNode 上;
2、当前 Client 所在的节点不存在 DataNode,那么系统随机的选择不繁忙的 DataNode 进行存储;
3、第二块副本放在与第一个节点不同的机架中的不繁忙的 DataNode 中;
4、第三个副本放在与第二个相同的机架,但不同的节点中;
5、HDFS 设定副本数不超过 DataNode 的总数,所以就算设置了多于 DataNode 数量的副本数,但是 HDFS 存储的副本数也和 DataNode 的总数相同;
6、副本数可以通过配置文件,或者上传文件时的 configuration 进行设置;参数名称:dfs.replication
四、负载均衡
节点与节点之间的磁盘利用率不平衡是 HDFS 集群非常容易出现的情况;
尤其是存在 DataNode 故障,和为集群添加新的 DataNode 的时候;
HDFS 存在自动的平衡机制,当最多存储的磁盘利用率大于最小存储的节点的利用率到一定的阈值时(默认为 10%),HDFS 将启动自动均衡;
但是 HDFS 的自动均衡非常的缓慢,因为 HDFS 被设置为不允许 balance 操作占用很大的网络带宽;带宽的默认值(1M/s)可以调整(hdfs dfsadmin -setBalanacerBandwidth newbandwidth);
版权归原作者 车了个车子 所有, 如有侵权,请联系我们删除。