目录
心跳机制
IPC:Inter-Process Comunication,进程通信协议
解析:
Hadoop是master/slave结构,
1 master包含NameNode和ResourceManager
slave 包含Datanode和NodeManger
2 master启动的时候会启动一个IPC服务,等待slave的连接。
3 slave启动时,会主动连接master的IPCserver服务,并且每个3秒连接一次master,这个间隔时间是可以调整的,参数为dfs.heartbeat.interval,这个每隔一段时间去连接一次的机制,我们形象地称为心跳。slave通过心跳回报自己的信息给master,master也通过心跳给slave下达命令;
4NN通过心跳得知DN的状态,RM通过心跳得知NM状态
master长时间没有收到slave心跳,slave挂掉。
NN感知DN掉线死亡时长计算:
1 HDFS 默认的超时时间为 10 分钟+30 秒,这里暂且定义超时时间为 timeout。
2 计算公式为:
timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
默认的 heartbeat.recheck.interval 大小为 5 分钟,dfs.heartbeat.interval 默认的大小为 3 秒。
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>
安全模式
集群启动后,可以查看目录,但是上传文件时报错,打开 web 页面可看到 NameNode正处于 safemode 状态,怎么处理?
解释: safemode 是 NameNode 的一种状态(active/standby/safemode 安全模式)
NameNode 进入安全模式的原理1
1 NameNode 发现集群中的 block 丢失率达到一定比例时(0.1%), NameNode 就会进入安全模式,在安全模式下,不允许客户端进行任何修改文件的操作,包括上传文件、删除文件、重命名等操作,只能查看元数据信息(比如 ls)。
2 配置丢失率
配置文件hdfs-default.xml 中定义了最小的副本率为默认dfs.safemode.threshold.pct=0.999f 。
NameNode 进入安全模式的原理2
在 HDFS 集群正常启动时, NameNode 也会在 safemode 状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可 。
在刚运行命令start-dfs.sh时,50070页面显示的信息:
安全模式常用操作命令:
hdfs dfsadmin -safemode leave //强制 NameNode 退出安全模式
hdfs dfsadmin -safemode enter //进入安全模式
hdfs dfsadmin -safemode get //查看安全模式状态
hdfs dfsadmin -safemode wait //等待,一直到安全模式结束
HDFS副本存放策略
作用:
数据分块存储和副本的存放,是保证可靠性和高性能的关键 。
方法:
将每个文件的数据进行分块存储, 每一个数据块又保存有多个副本, 这些数据块副本分布在不同的机器节点上 。
第一个 block 副本存放在 client 所在的 node 中(如果 client 不在集群范围内,则第一个 node是随机选取的,系统会尝试不选择那些太满或者太忙的 node);
第二个副本放置在与第一个 node 相同的机架的不同 node 中(近乎随机选择,系统会尝试不选择那些太满或者太忙的 node);
第三个副本和放在与第二个不同机架上,随机放在不同的 node 中。
其他副本随机存放
详细说明:
在多数情况下, HDFS 默认的副本系数是 3。Hadoop 默认对 3 个副本的存放策略,如下图:
修改副本数(将副本数修改为1):
第一种方式: 修改集群文件 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
第二种方式: 命令设置hadoop fs -setrep -R 1 /
负载均衡
数据不平衡原因
1机器与机器之间磁盘利用率不平衡是 HDFS 集群非常容易出现的情况
情况一:在 DataNode 节点出现故障
情况二:在现有的集群上增添新的 DataNode 的时候
HDFS数据自动平衡方法1
影响Balancer的几个参数:
-threshold
默认设置:10,参数取值范围:0-100
参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡。
dfs.balance.bandwidthPerSec
默认设置:1048576(1M/S)
参数含义:Balancer运行时允许占用的带宽
HDFS数据自动平衡方法2
命令:
sbin/start-balancer.sh 启动数据均衡,默认阈值为 10%
sbin/start-balancer.sh –threshold 5 启动数据均衡,阈值 5%
sbin/stop-balancer.sh 停止数据均衡
自动进行均衡非常慢, 一天能移动的数据量在 10G-10T 的级别,很难满足超大集群的需求。
原因: HDFS 集群默认不允许 balance 操作占用很大的网络带宽,这个带宽是可以调整的。
HDFS数据自动平衡方法3
调整带宽:
(1)命令: hdfs dfsadmin -setBalanacerBandwidth 10485760
该数值的单位是字节,上面的配置是 10M/s,默认是 1M/s
(2) 在hdfs-site.xml 中设置:
<property>
<name>dfs.balance.bandwidthPerSec</name> <value>10485760</value>
</property>