hadoop的四大机制

本文详细介绍了Hadoop的四大核心机制:心跳机制,包括datanode如何通过心跳报告向namenode汇报状态;安全模式,阐述了元数据的存储与安全模式的启动、退出条件;机架策略,解释了副本存放的逻辑;以及负载均衡,讨论了自动和手动负载均衡的实现方式。这些机制对于理解Hadoop的运行至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、心跳机制

namenode是负责管理整个集群的,所以必须要知道各个节点的状况。那么问题来了

1.namenode怎么知道从节点的存活?

答:datanode每间隔3秒会主动给namenode发送一次心跳报告,汇报自己的状况
补充:心跳间隔3秒的设置来源于配置文件 >> value 决定间隔时间:

<property>
    <name>dfs.heartbeat.interval</name>
	 <value>3</value>    
    <description>Determines datanode heartbeat interval in seconds. </description>
</property>   

2.什么时候判定namenode死亡?

答:当namenode连续10次没有收到datanode的心跳报告则认为这个datanode可能死了,但这时候不会判定死亡(可能网络延迟),而是namenode主动向datanode发送一次检查,发送一次检查的时间是5min(300000毫秒),如果一次检查没有返回信息,这时候namenode会再进行一次检查,如果再获取不到datanode的返回信息,这个时候才会判定当前的datanode死亡了。
补充:检查的时间5min的设置来源于配置文件 >> value 决定检查时间:

<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 id stale ot not is also calculated. The unit of this configuration is millisecond.                                                 </description>
</property>

 在实际应用中,如果考虑网络延迟过高的情况,可以延长上述两个参数

 

二、安全模式

1.在这之前我们还得先了解一下元数据:

元数据包括以下三部分:

  1. 抽象目录树   
  2. 数据和数据块的映射关系   
  3. 数据块存储的位置信息

元数据存储的位置:内存+磁盘 共同存储

  1. 内存:内存读写速度快,但是一旦关机,会导致数据丢失
            【内存存储元数据的 1.抽象目录树    2.数据和数据块的映射关系部分 3.数据块存储的位置信息】
  2. 磁盘:磁盘读写效率低
            【磁盘存储元数据的 1.抽象目录树    2.数据和数据块的映射关系部分】
              注:如果磁盘元数据过大,会造成加载到内存的时间过长,所以磁盘中仅保存1 2部分,而不保存数据块存储的位置信息

2.什么时候处于安全模式?

集群在启动的时候namenode需要做哪些事情?

  1. namenode从磁盘中读取元数据的 1 2 部分
  2. namenode接收datanode发送的心跳报告(其中包含有 元数据的第 3 部分)
  3. 启动secondarynamenode

在上述这个过程中,集群不允许外界对集群进行操作,这个时候集群就处于安全模式

还可以手动讲集群设置为安全状态,命令如下:
hdfs dfsadmin -safemode enter     进入安全模式
hdfs dfsadmin -safemode leave     退出安全模式
hdfs dfsadmin -safemode get        查看安全模式状态   开启为on  关闭为off
hdfs dfsadmin -safemode wait      等待自行退出安全模式

3.安全模式下我们可以做哪些事情?

可以执行的操作(不修改元数据的操作都可以执行)例如:

  1. ls查询
  2. cat查看
  3. 下载到本地
  4. ...

不可以执行的操作(修改元数据不可以执行)例如:

  1. 创建目录
  2. 上传
  3. ...

三、机架策略

副本存放机制,默认情况下每个数据块有3个副本,这3个副本是怎么放的呢?
副本存放策略:

  • 第一个副本存储在客户端所在的节点上
  • 第二个副本存储在和第一个副本不同机架的任意节点上(防止同一个机架断电)
  • 第三个符文存储在和第一个副本相同机架的任意不同节点上(在风险度一样的前提下选择网络传输少的)

在真实生产中需要手动配置机架策略
在真实生产中我们可以自定义机架策略:不同节点,不同机架,不同数据中心
   

四、负载均衡

在每个节点上存储的数据百分比相差不大就叫做负载均衡(能力越大责任越大)
5t   2.5t   50%
2t    1t     50%
8t    4t     50%

在进行文件上传的时候,优先选择客户端所在节点,如果习惯性地使用同一个客户端会造成客户端所在节点存储的数据比较多,集群会有一个自动的负载均衡的操作,只不过这个负载均衡的时间比较慢,负载均衡的带宽默认是1M/s(在集群空闲的情况下)
在小规模的情况下是可以的,不过集群规模特别大的时候,花费的时间过长,等不及,可以手动进行负载均衡
start-balancer.sh  手动开启负载均衡,但是这个命令不会立即执行,等待Hadoop集群空闲的时候才会执行
需要注意的是,不可能达到完全的负载均衡,所以在手动负载均衡的时候可以指定一个参数:

start-balancer.sh -t 10%
-t 10%  指定是任意两个节点之间的存储百分比差距不超过10%则表示达到了负载均衡

负载均衡的带宽默认是1048576byte >> 1M/s(在集群空闲的情况下) 可以修改配置文件中的value进行修改

 <property>
         <name>dfs.datanode.balance.bandwidthPerSec</name>
		<value>1048576</value>    
	 <description>Specifies the maximum amount of bindwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.	 
		  </description>
    </property>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值