HDFS核心设计

本文深入探讨了HDFS的心跳机制,解释了NameNode如何通过心跳感知DataNode的状态,以及NN进入安全模式的原理和常用操作。此外,还详细介绍了HDFS的副本存放策略和数据不平衡时的负载均衡方法。
摘要由CSDN通过智能技术生成

目录

心跳机制

解析:

NN感知DN掉线死亡时长计算:

安全模式

NameNode 进入安全模式的原理1

NameNode 进入安全模式的原理2

安全模式常用操作命令:

HDFS副本存放策略

作用:

方法:

修改副本数(将副本数修改为1):

负载均衡

数据不平衡原因

HDFS数据自动平衡方法1

HDFS数据自动平衡方法2

HDFS数据自动平衡方法3


心跳机制

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>

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值