我是靠谱客的博主 粗心火车,最近开发中收集的这篇文章主要介绍HDFS的一些常见机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、HDFS的心跳机制

  Hadoop2.x包含两个主从架构(Master/Slave)HDFS和YARN,这两个其实可以看做时两个独立的架构。
其中hdfs包含NamenNode和DataNode两个守护进程
yarn包含resourcemanager和NodeManager两个守护进程

  hdfs的心跳机制指的是从节点DataNode会再一定的时间间隔向主节点NameNode发送数据包汇报自身的状态,hdfs也因此来判断DataNode是否存活。
  在hdfs的Master节点启动时同时会启动一个IPC 通信服务,等待slave节点的连接,slave启动后会每隔3秒(默认的情况下)通过这个IPC服务向Master节点连接也就是心跳,这个时间间隔可以通过dfs.heartbeat.interval 参数配置。NameNode通过心跳获取DataNode的状态,ResourceManager通过心跳获取NodeManager的状态。
在间隔一定的时间没有获取到DataNode的心跳反馈后,NameNode会判断这个DataNode宕机。
这个时间是默认10次心跳间隔+两次NameNode主动检查时间

timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

 默认的 heartbeat.recheck.interval 大小为5分钟, dfs.heartbeat.interval 默认的大小为3秒,可以在hdfs-site.xml中配置。

2、HDFS的安全模式

  hdfs的安全模式是为了保证hdfs在异常情况下保证元数据安全和可靠的手段之一。在安全模式下凡是涉及元数据修改的操作都不允许进行,例如上传,删除,文件追加等等,可以进行文件查询,下载操作。
进入安全模式的情况:

  1. hdfs正常启动时会主动进入安全模式,当所有DataNode启动成功后会主动退出安全模式
  2. 当hdfs集群的block块丢失到一定比例时会进入安全模式
  3. 主动进入安全模式

 block块丢失的比例配置参数,默认是0.1%也就是当集群的block块丢失超过0.1%会自动进入安全模式

dfs.namenode.safemode.threshold-pct=0.999f

安全模式的常用命令:
hdfs dfsadmin -safemode leave //强制NameNode退出安全模式
hdfs dfsadmin -safemode enter //进入安全模式
hdfs dfsadmin -safemode get //查看安全模式状态
hdfs dfsadmin -safemode wait //等待,一直到安全模式结束
其中wait命令主要用于代码场景,当使用hdfs的API操作hdfs时若hdfs进入了安全模式则可以使用这个命令是程序等待安全模式结束避免代码直接报错。

3、HDFS的负载均衡及副本存放策略

  HDFS的负载均衡顾名思义是当某一个或多个DataNode节点负载过大时,为了平衡hdfs所有DataNode的数据存储负载的一个自动的机制,也是可以手动触发。
  自动触发的条件是当集群中负载最大的节点和负载最小的节点之间的差值不能超过一定的比例,这个比例可以自己在配置文件中配置或通过参数调节。同时可以通过参数调节加快负载均衡的进程,因为负载均衡实际就是数据的不断的网络传输会占用一定的网络带宽。

sbin/start-balancer.sh  //手动启动负载均衡但是和Java的System.gc()类似,只在集群空闲时启动
sbin/start-balancer.sh -threshold 5
sbin/start-balancer.sh -t 10% // 最大和最小差值不超过10%
//设置网络带宽为10M/s 默认是1M/s
hdfs dfsadmin -setBalanacerBandwidth newbandwidth
hdfs dfsadmin -setBalanacerBandwidth 10485760

副本存放策略
  采用机架感知来保证数据的可靠性,其实就一句话,当前节点一个副本,同一个机架上的另一个节点保存一个副本,不同机架的一个节点保存一个副本,注意同一个节点不会保存一个数据块的两个副本哪怕只有两个节点副本数为3。默认情况下,Hadoop机架感知是没有启用的,需要在NameNode机器的 core-site.xml 里配置一个选项

<property>  
    <name>topology.script.file.name</name>
    <value>/path/to/script</value>
</property>

  这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。接受的参数通常为datanode机器的ip地址,而输出的值通常为该ip地址对应的datanode所在的rackID,例如”/rack1”。Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置,此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的heartbeat时,将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中。

最后

以上就是粗心火车为你收集整理的HDFS的一些常见机制的全部内容,希望文章能够帮你解决HDFS的一些常见机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部