概述
1、HADOOP 心跳机制(heartbeat)
1、 Hadoop 是 主从(Master/Slave )结构,Master 中包括 NameNode 和 ResourceManager,Slave 中包括 Datanode 和 NodeManager 。 2、 Master 启动的时候会启动一个 IPC(Inter-Process Comunication,进程间通信)server 服务,等待 slave 的连接 。 3、 Slave 启动时,会主动连接master 的 ipc server 服务,并且每隔 3 秒链接一次 master(这个间隔时间是可以调整的,参数为 dfs.heartbeat.interval),这个每隔一段时间去连接一次的机制,我们形象的称为心跳。Slave 通过心跳汇报自己的信息给 master,master 也通过心跳给slave下达命令 。 4、 NameNode 通过心跳得知 Datanode 的状态, ResourceManager 通过心跳得知 NodeManager 的状态 。 5、 如果 master 长时间都没有收到 slave 的心跳,就认为该 slave 挂掉了。 |
*** hdfs getconf -confkey dfs.heartbeat.interval #查看心跳机制频次(默认3秒)
*** hdfs getconf -confKey heartbeat.recheck.interval #复查心跳机制的时间(默认300000毫秒=300秒=5分钟)
-- hdfs getconf -confKey dfs.namenode.heartbeat.recheck-interval ##复查心跳机制的时间(更新命令)
*** Namenode 感知到 Datanode 掉线死亡的时长计算:
公式:timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval |
默认:timeout = 2*300 + 10*3 = 630秒 = 10分钟30秒 |
*** dfs.heartbeat.interval 和 dfs.namenode.heartbeat.recheck-interval 配置文件修改默认时间
---- vim hdfs-site.xml (cd /home/hadoop/hadoop-2.7.7/etc/hadoop目录下)
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoopdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoopdata/data</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop03:50090</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>4</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>400000</value>
</property>
</configuration>
*** 测试
hadoop-daemon.sh stop datanode #关闭一下namenode等待10分30秒后才会判定为namenode掉线死亡。
访问http://hadoop01:50070看状态
2、安全模式safemode
***1、safemode的概率
-
safemode是namenode的一种状态(namenode的三种模式:active/standby/safemode)。进入safemode后,集群中的文件不能被操作(自我保护),只能查看。
***2、进入safemode的状况
-
hdfs getconf -confkey dfs.namenode.safemode.threshold-pct #查看安全模式界定值(默认值0.999f),当然界定值是可以修改的,默认block块丢失率达到0.1%后进入安全模式safemode。
***3、退出safemode
-
---修复宕机的节点(推荐),自动退出
-
---强制退出safemode(没有解决问题,有可能再次出现数据丢失)
***4、集群冷启动先进入safemode,然后又会自动推出安全模式。
-
block所在的datanode的信息存在于内存中,而不在磁盘中,所以冷启动时,刚开始找不到block所在的节点的。
原理:namenode 的内存元数据中,包含文件路径、副本数、blockid,及每一个 block 所在 datanode 的信息,而 fsimage 中,不包含 block 所在的 datanode 信息,那么,当 namenode 冷启动时,此时内存中的元数据只能从 fsimage 中加载而来,从而就没有 block 所在的 datanode 信息——>就会导致 namenode 认为所有的 block 都已经丢失——>进入安全模式— —>datanode 启动后,会定期向 namenode 汇报自身所持有的 blockid 信息,——>随着 datanode 陆续启动,从而陆续汇报 block 信息,namenode 就会将内存元数据中的 block 所 在 datanode 信息补全更新——>找到了所有 block 的位置,从而自动退出安全模式 |
***5、安全模式常用操作命令:
-
--- hdfs dfsadmin -safemode get #获取当前的safemode状态
-
--- hdfs dfsadmin -safemode enter #进入safemode状态
-
--- hdfs dfsadmin -safemode leave #退出safemode状态
-
--- hdfs dfsadmin -safemode wait #等待
3、HDFS副本存放策略
*** 1、作用: 数据分块存储和副本的存放,分散冗余存储,保证可靠性和高性能
*** 2、方法: 将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块 副本分布在不同的机器节点上
***3、修改副本数:
---修改集群文件 hdfs-site.xml #方法1:vim hdfs-site.xml (cd /home/hadoop/hadoop-2.7.7/etc/hadoop目录下)
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
---bin/hadoop fs -setrep -R 2 / #方法2:命令设置可以指定某个文件修改
4、负载均衡
***1、节点的磁盘利用率尽可能的均等
***2、如果出现节点宕机或者新添加节点,都可能导致出现负载不均衡(节点中负载时动态)
***3、如何实现负载均衡
--- 按照默认移动速度启动:在cd /home/hadoop/hadoop-2.7.7/sbin/目录下执行
start-balancer.sh: 实现负载均衡,默认移动速度1M/s(带宽考虑,还有其他读写操作)
start-balancer.sh -t 15%: 负载最高的节点和最低节点之间的数据差距比例在15% 范围内
---修改移动速度
hdfs dfsadmin -setBalanacerBandwidth 10485760 #用命令修改移动速度为10485760 =10M/s
vim hdfs-site.xml #配置文件中设置(cd /home/hadoop/hadoop-2.7.7/etc/hadoop目录下)
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value>
<description> Specifies the maximum bandwidth that each datanode can utilize for
the balancing purpose in term of the number of bytes per second.
</description>
</property>
最后
以上就是开放楼房为你收集整理的9、HDFS核心设计--心跳机制、安全模式、副本存放策略、负载均衡的全部内容,希望文章能够帮你解决9、HDFS核心设计--心跳机制、安全模式、副本存放策略、负载均衡所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复