HDFS 的四大核心设计

1、心跳机制(heartbeat)(通信)

1、谈及HDFS的心跳机制,首先要从HDFS的架构说起,HDFS的一主(Namenode)多从(Datanode),namenode管理datanode的空间(块信息)等。
2、namenode怎么实现管理?
datanode定期向namenode进行传递信息,发送心跳报告,目的:
(1)向namenode汇报自己的存活状态。
(2)向namenode汇报自己的块信息。

3、元数据:
(1)抽象目录树;
(2)文件和数据块的对应关系;
(3)块和节点的对应关系。
元数据存储位置:
(1)磁盘中:/home/hadoop/data/hadoopdata/name/current
磁盘中不包含“元数据第(3)点”。
(2)内存中:都包含“元数据的三点”。在datanode发送报告时获取。
4、datanode多久向namenode发送一次心跳?一个 datanode 宕机,namenode多久才能确定?

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

<property>
  <name>dfs.datanode.handler.count</name>
  <value>10</value>
  <description>The number of server threads for the datanode.</description>
</property>

datanode 每隔 3 秒会向 namenode 发送一次心跳。
namenode 连续 10 次接收不到 datanode的心跳报告(10*3s =30s),所以 namenode 30s 接收不到 datanode 的心跳报告,会认为 datanode 可能宕机了。此时 namenode 会主动发送检查,检查一次的时间是多少?

<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>

namenode 会主动发送检查的时间是 300s = 5min,允许检查 2 次(2*5min = 10min)。
所以 namenode 断定 datanode 宕机的时间是 5min * 2 + 10 * 3s = 630s。

心跳配置可根据需求修改。

2、HDFS 副本存放策略(机架策略)

1、 作用:
数据分块存储和副本的存放,是保证可靠性和高性能的关键。
2、 方法:
将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分布在不同的机器节点上。
3、 存放说明:
在多数情况下,HDFS 默认的副本系数是 3,2个机架,3个副本如何存放。
(1)第一个副本:优先存在客户端所在节点(客户端是集群中的第一个节点),如果客户端不是集群所在节点,则随机选择存放。
(2)第二个副本:存储在与第一个副本不同机架的任意节点。
(3)第三个副本:存储在与第二个副本相同机架的不同节点上。

实际生产中考虑,多个机架,多个机房的情况?
不同节点;
不同机架;
不同机房。
4、修改副本数:
(1)第一种方式:修改集群文件 hdfs-site.xml:

<property>
 <name>dfs.replication</name>
 <value>1</value>
</property>

(2)命令设置:

hadoop fs -setrep -R 2 /file

3、HDFS 安全模式

1、问题引出:集群启动后,可以查看目录,但是上传文件时报错,打开web页面可看到 namenode 正处于 safemode 状态,怎么处理?
2、解释:namenode 的三种状态(active 活跃模式 / standby 热备模式 / safemode 安全模式)。
3、namenode 进入安全模式的原理:
A、 namenode 发现集群中的 block 丢失率达到一定比例时(0.1%),namenode 就会进入安全模式,在安全模式下,客户端不能对任何数据进行操作,只能查看元数据信息(比如 ls / mkdir 操作),这个丢失率是可以手动配置的,默认是 dfs.namenode.safemode.threshold-pct=0.999f。
可用下列命令查看:

hdfs getconf -confKey dfs.namenode.safemode.threshold-pct

B、如何退出安全模式?
(1)找到问题所在,进行修复(比如修复宕机的 datanode)。
(2)或者可以手动强行退出安全模式(但是并没有真正解决问题)。
4、在 hdfs 集群正常冷启动时,namenode 也会在 safemode 状态下维持相当长的一段时间,此时你不需要去理会,等待它自动退出安全模式即可。
5、正常启动的时候进入安全的原理:
namenode 的内存元数据中,包含文件路径、副本数、blockid,及每一个 block 所在 datanode 的信息,而 fsimage 中,不包含 block 所在的 datanode 信息,那么,当 namenode 冷启动时,此时内存中的元数据只能从 fsimage 中加载而来,从而就没有 block 所在的 datanode 信息 ——> 就会导致 namenode 认为所有的 block 都已经丢失 ——> 进入安全模式 ——> datanode 启动后,会定期向 namenode 汇报自身所持有的 blockid 信息,——>随着 datanode 陆续启动,从而陆续汇报 block 信息,namenode 就会将内存元数据中的 block 所在 datanode 信息补全更新 ——> 找到了所有 block 的位置,从而自动退出安全模式。
6、安全模式常用操作命令:

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

4、负载均衡

1、机器与机器之间磁盘利用率不平衡是 HDFS 集群非常容易出现的情况。尤其是在 DataNode 节点出现故障或在现有的集群上增添新的 DataNode 的时候分析数据块分布和重新均衡 DataNode 上的数据分布的工具。
2、保证动态的均衡,不均衡会影响集群性能。
3、如何实现负载均衡?
(本质移动block块 ----> 整个集群的性能)
(1)start-balancer.sh / start-balancer.sh -threshold 5
存在一个阈值,达到这个阈值才会负载均衡。默认为 10,一般设置越小越均衡,此处设置为 5。
(2)start-balancer.sh -t 10%
机器容量最高的那个值和最低的那个值得差距不能超过 10%(峰值与谷值之间的差距)。
(3)自动进行均衡非常慢,一天能移动的数据量在 10G-10T 的级别,很难满足超大集群的需求。
原因:HDFS 集群默认不允许 balance 操作占用很大的网络带宽,这个带宽是可以调整的。
hdfs dfsadmin -setBalanacerBandwidth newbandwidth

hdfs dfsadmin -setBalanacerBandwidth 10485760

该数值的单位是字节,上面的配置是 10M/s,默认是 1M/s。
另外,也可以在 hdfs-site.xml 配置文件中进行设置:

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

5、学习内容

上节学习内容:HDFS 在 Eclipse 上的开发API
下节学习内容:HDFS 读写流程与进程角色工作机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值