HDFS 核心设计

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 挂掉了。!!!!!

Namenode 感知到 Datanode 掉线死亡的时长计算:

HDFS 默认的超时时间为 10 分钟+30 秒。
这里暂且定义超时时间为 timeout 计算公式为:
timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval
而默认的 heartbeat.recheck.interval 大小为 5 分钟,dfs.heartbeat.interval 默认的大小为 3 秒。需要注意的是 hdfs-site.xml 配置文件中的 heartbeat.recheck.interval 的单位为毫秒, dfs.heartbeat.interval 的单位为秒所以,举个例子,如果 heartbeat.recheck.interval 设置为 5000(毫秒),dfs.heartbeat.interval
设置为 3(秒,默认),则总的超时时间为 40 秒

heartbeat.recheck.interval
5000


dfs.heartbeat.interval
3

HDFS 安全模式
问题引出:集群启动后,可以查看目录,但是上传文件时报错,打开web页面可看到namenode 正处于 safemode 状态,怎么处理?
解释:safemode 是 namenode 的一种状态(active/standby/safemode 安全模式)

namenode 进入安全模式的原理:
a、 namenode 发现集群中的 block 丢失率达到一定比例时(0.1%),namenode 就会进入安全模式,在安全模式下,客户端不能对任何数据进行操作,只能查看元数据信息(比
如 ls/mkdir)
这个丢失率是可以手动配置的,默认是 dfs.safemode.threshold.pct=0.999f b、如何退出安全模式?
1、 找到问题所在,进行修复(比如修复宕机的 datanode)
2、 或者可以手动强行退出安全模式(但是并没有真正解决问题)
在 hdfs 集群正常冷启动时,namenode 也会在 safemode 状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可

正常启动的时候进入安全的原理:
(原理:namenode 的内存元数据中,包含文件路径、副本数、blockid,及每一个 block 所在 datanode 的信息,而 fsimage 中,不包含 block 所在的 datanode 信息,那么,当 namenode 冷启动时,此时内存中的元数据只能从 fsimage 中加载而来,从而就没有 block 所在的 datanode 信息——>就会导致 namenode 认为所有的 block 都已经丢失——>进入安全模式— —>datanode 启动后,会定期向 namenode 汇报自身所持有的 blockid 信息,——>随着 datanode 陆续启动,从而陆续汇报 block 信息,namenode 就会将内存元数据中的 block 所
在 datanode 信息补全更新——>找到了所有 block 的位置,从而自动退出安全模式)

安全模式常用操作命令:
hdfs dfsadmin -safemode leave //强制 NameNode 退出安全模式 hdfs dfsadmin -safemode enter //进入安全模式 hdfs dfsadmin -safemode get //查看安全模式状态
hdfs dfsadmin -safemode wait //等待,一直到安全模式结束

如果你使用的版本是 2.X 之前的版本,那么这个 hdfs 命令可以替换成 hadoop,它们都在 bin 目录下

HDFS 副本存放策略
1、 作用:
数据分块存储和副本的存放,是保证可靠性和高性能的关键
2、 方法:
将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分布在不同的机器节点上

3、 存放说明:在多数情况下,HDFS 默认的副本系数是 3
Hadoop 默认对 3 个副本的存放策略如下图:其中 Block1,Block2,Block3 分别表示 Block 的三个副本:

第一个 block 副本放在和 client 所在的 node 里(如果 client 不在集群范围内,则这第一个 node 是随机选取的,系统会尝试不选择哪些太满或者太忙的 node)。
第二个副本放置在与第一个节点不同的机架中的 node 中(近乎随机选择,系统会尝试不选择哪些太满或者太忙的 node)。
第三个副本和第二个在同一个机架,随机放在不同的 node 中。
4、 修改副本数:
第一种方式:修改集群文件 hdfs-site.xml

dfs.replication
1

第二种方式:命令设置
bin/hadoop fs -setrep -R 1 /

负载均衡
机器与机器之间磁盘利用率不平衡是 HDFS 集群非常容易出现的情况尤其是在 DataNode 节点出现故障或在现有的集群上增添新的 DataNode 的时候分析数据块分布和重新均衡 DataNode 上的数据分布的工具

命令:sbin/start-balancer.sh sbin/start-balancer.sh -threshold 5
自动进行均衡非常慢,一天能移动的数据量在 10G-10T 的级别,很难满足超大集群的需求原因:HDFS 集群默认不允许 balance 操作占用很大的网络带宽,这个带宽是可以调整的
hdfs dfsadmin -setBalanacerBandwidth newbandwidth hdfs dfsadmin -setBalanacerBandwidth 10485760
该数值的单位是字节,上面的配置是 10M/s,默认是 1M/s 另外,也可以在 hdfs-site.xml 配置文件中进行设置:

dfs.balance.bandwidthPerSec
10485760
Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.

sbin/start-balancer.sh -t 10%
机器容量最高的那个值 和 最低的那个值得差距 不能超过 10%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值