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

发送心跳报告的作用:

                1)报告自己的存活状况

                2)报告自己的块信息

心跳报告的周期:3s         不能过长  不能太短

                <property>

                  <name>dfs.heartbeat.interval</name>

                  <value>3</value>

                  <description>Determines datanode heartbeat interval in seconds.</description>

                </property>

每隔3s,datanode会向namenode发送一个心跳报告

namenode如何判断一个datanode宕机了?

                连续的10次心跳报告接受不到,连续30s接受不到datanode的心跳,认为datanode可能宕机了,但是不能确定是否宕机namenode会主动的向datanode发送检查:300000ms=300s=5min

                    <property>

                          <name>dfs.namenode.heartbeat.recheck-interval</name>

                          <value>300000</value>

                          <description>

                            This time decides the interval to check for expired datanodes.

                            With this value and dfs.heartbeat.interval, the interval of

                            deciding the datanode is stale or not is also calculated.

                            The unit of this configuration is millisecond.

                          </description>

                    </property>

默认情况下检查2次每次间隔5min。10min断定datanode宕机了

namenode断定datanode宕机的时间:10*3s+2*5min=630s

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 //等待,一直到安全模式结束

HDFS 副本存放策略

1、 作用: 数据分块存储和副本的存放,是保证可靠性和高性能的关键

2、 方法: 将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分 布在不同的机器节点上

3、 存放说明: 在多数情况下,HDFS 默认的副本系数是 3

4、 修改副本数:

第一种方式:修改集群文件 hdfs-site.xml中的dfs.replication

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

负载均衡

对hdfs来说负载均衡指的是每一个datanode节点上存储的数据和他的硬件能力相匹配,也就是说每个节点真正参与运行的内存百分比是相当的

集群如果没有处于负载均衡,会自动进行负载均衡。进行负载均衡的过程,就是数据块的移动的过程,需要跨节点 、跨机架、需要网络传输集群自动进行负载均衡的带宽默认1M/s

            <property>

              <name>dfs.datanode.balance.bandwidthPerSec</name>

              <value>1048576</value>

              <description>

                Specifies the maximum amount of bandwidth that each datanode

                can utilize for the balancing purpose in term of

                the number of bytes per second.

              </description>

            </property>

            集群规模的比较小的情况下20个节点以下采用自动进行负载均衡。

            集群的规模比较大的时候:1000个节点自动进行负载均衡会太慢。

手动进行负载均衡

            1)修改负载均衡的带宽  加大

            <property>

              <name>dfs.datanode.balance.bandwidthPerSec</name>

              <value>104857600</value>

              <description>

                Specifies the maximum amount of bandwidth that each datanode

                can utilize for the balancing purpose in term of

                the number of bytes per second.

              </description>

            </property>

            2)告诉集群及时进行负载均衡  start-balancer.sh -t 10%

不存在绝对的负载均衡

-t 10% 指定的是负载均衡的评价标准。最大的节点的占有百分比和最小节点占有的百分比差值不能超过10%这个命令提交的时候不会立即执行,类似于java中的垃圾回收。集群空闲的时候进行负载均衡,提升集群负载均衡的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值