目录
1 心跳机制
hdfs启动之前,要做集群的时间同步
datanode每三秒向namenode发送心跳包,可配置,在hdfs-default.xml中配置,heartbeat.interval
namenode如果有10次没有收到心跳包,就发起检查,一次检查5分钟(可配置,heartbeat.recheck),
如果两次之后还不通,认为dn挂掉了,一共 是 3 s*10+5min*2=630s
2 安全模式
先讲一下元数据的组成:
a 抽象目录树 b 数据与块之间的关系 c 数据块的存储位置
内存存储: a b c
磁盘中存储 a b
集群启动时,处于安全模式,这个时候 nn在做以下的事情
1 把磁盘中的 ab加载到内存中
2 接受dn的心跳,心跳中包含有 c ,把c也放到内存中
3 启动secondaryNN
安全模式下:
可用操作的是查询类的:get cat ls 等
不可操作修改元数据类的:mkdir put等
安全模式的命令
hdfs dfsadmin -safemode enter :进入安全模式
leave: 离开安全模式
get : 获取状态 on/off
wait : 等待自行退出
3 机架策略
图是网上抄的:
1、第一个副本放在和Client相同机架的节点上(如果Client不在集群范围,第一个Node是随机选取不太满或者不太忙的节点,离上传Client最近的节点(减少网络传输的时间))
2、第二个副本放在与第一个机架不同的机架中的任意节点上
3、第三个副本放在与第二个节点所在机架的不同的节点.
hdfs-site.xml中 dfs.replication 来配置副本的 个数
4 负载均衡
产生负载不均衡的原因可能有:
1 新增或者删除节点
2 总是把某个节点当客户端
3 某些主机硬盘较小
负载不均衡的危害:
1 map任务会被分配到没有数据的节点,导致计算变慢
搞负载均衡时不能影响集群的正常运行
负载均衡算法:一共有七步
1 RS向nn获取node的数据报告
2 RS汇总数据的分布情况,计算好 数据图,以及迁移的最佳路径
3 开始迁移,PSDN开始复制数据
4 PSDN把数据再次复制到 目标的DN上
5 PSDN告知NN已经好了,NN通知删除原来的数据块
6 目标DN向 PSDN确认已经迁移
7 PSDN告知RS本次迁移成功!
阈值管理

假如threshold=20,此时集群的平均使用是40
那么over组:>60
Above组 40-60
below组 20-40
under组 <20
集群会把 上面两个数据,往下面的两个迁移
这么看来: threshold设置得约低,集群就越均衡
- Over组:此组中的DataNode的均满足
DataNode_usedSpace_percent > Cluster_usedSpace_percent + threshold
- Above组:此组中的DataNode的均满足
Cluster_usedSpace_percent + threshold > DataNode_ usedSpace _percent >Cluster_usedSpace_percent
- Below组:此组中的DataNode的均满足
Cluster_usedSpace_percent > DataNode_ usedSpace_percent > Cluster_ usedSpace_percent – threshold
- Under组:此组中的DataNode的均满足
Cluster_usedSpace_percent – threshold > DataNode_usedSpace_percent
负载均衡操作
#启动数据均衡,默认阈值为 10%
$Hadoop_home/bin/start-balancer.sh
#启动数据均衡,阈值 5%
bin/start-balancer.sh –threshold 5
#停止数据均衡
$Hadoop_home/bin/stop-balancer.sh
在hdfs-site.xml文件中可以设置数据均衡占用的网络带宽限制
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</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>