HDFS的四大机制

心跳机制

1、 Hadoop 是 Master/Slave 结构,Master 中有 NameNode 和 ResourceManager,Slave 中有 Datanode 和 NodeManage。
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、 方法: 将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分 布在不同的机器节点上
HDFS的四大机制_第1张图片
3、 存放说明:
在多数情况下,HDFS 默认的副本系数是 3
Hadoop 默认对 3 个副本的存放策略如下图:其中 Block1,Block2,Block3 分别表示 Block 的三个副本:
HDFS的四大机制_第2张图片
第一个 block 副本放在和 client 所在的 node 里(如果 client 不在集群范围内,则这第一个 node 是随机选取的,系统会尝试不选择哪些太满或者太忙的 node)。
第二个副本放置在与第一个节点不同的机架中的 node 中(近乎随机选择,系统会尝试不选 择哪些太满或者太忙的 node)。
第三个副本和第二个在同一个机架,随机放在不同的 node 中。
4、 修改副本数:
第一种方式:修改集群文件 hdfs-site.xml

 
    dfs.replication
    1

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

安全模式

问题引出:集群启动后,可以查看目录,但是上传文件时报错,打开 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 hdfs dfsadmin -safemode enter hdfs dfsadmin -safemode get hdfs dfsadmin -safemode wait
//强制 NameNode 退出安全模式 //进入安全模式
//查看安全模式状态 //等待,一直到安全模式结束
如果你使用的版本是 2.X 之前的版本,那么这个 hdfs 命令可以替换成 hadoop,它们都在 bin 目录下

负载均衡

机器与机器之间磁盘利用率不平衡是 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%。

你可能感兴趣的:(HDFS的四大机制)