设为首页 加入收藏

TOP

hdfs的四大机制
2019-02-09 00:19:14 】 浏览:19
Tags:hdfs 四大 机制

hdfs的四大机制:

心跳机制:
hdfs主从架构 主namenode 从datanode
在hdfs的整个运行过程中需要datanode定时的向namenode发送心跳报告 namenode可以通过心跳报告确定datanode是可以正常工作的

发送心跳报告的作用:
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次 10min 断定datanode宕机了
namenode断定datanode宕机的时间:
103s+25min=630s
datanode 8次没有心跳 第九次有心跳了 第十次又没有心跳了
重新记录时间

安全模式:
集群启动顺序:
namenode----》datanode-----》secondarynamenode
元数据:
1)抽象目录树 2)数据和块的对应关系 3)数据块的存储位置
元数据存储的位置:
1)硬盘上
磁盘的读写的缺点:
1)慢
2)性能瓶颈
元数据包括:1) 2) 不包含3)
2)内存中 快
包括 1) 2) 3)
元数据 最新的最全的元数据
内存中的元数据 从硬盘中加载过来的
硬盘中的元数据包含1) 2)
/hadoop-2.7.6.tar.gz 200M
1)抽象目录树 /hadoop-2.7.6.tar.gz
2)数据和块的对应关系 /hadoop-2.7.6.tar.gz blk12300001:[] blk12300002:[]
元数据的第三部分 存储是一个空的列表 这个列表通过datanode向namenode发送的心跳包 进行填充的
datanode向namenode发送心跳包的时候 发送一个自己的块报告
hadoop01:[blk12300001 blk12300003 blk12300005]
/hadoop-2.7.6.tar.gz blk12300001:[hadoop01,hadoop02]

集群启动的过程中namenode做的事情:
1)将硬盘中的元数据加载到内存中
2)接受datanode的心跳报告 1)判断datanode的存活率 2)加载块的存储节点信息
这个过程中namenode处于安全模式的 集群也是处于安全模式的—集群的一个自我保护的模式
集群处于安全模式的时候不对外提供服务的 不对外提供写服务 对外提供读的服务

集群启动过程中自动离开安全模式的依据:
1)datanode节点的启动的个数:默认0
<property>
<name>dfs.namenode.safemode.min.datanodes</name>
<value>0</value>
<description>
Specifies the number of datanodes that must be considered alive
before the name node exits safemode.
Values less than or equal to 0 mean not to take the number of live
datanodes into account when deciding whether to remain in safe mode
during startup.
Values greater than the number of datanodes in the cluster
will make safe mode permanent.
</description>
</property>
默认情况下 集群中的datanode节点启动0个也可以离开安全模式

2)数据块(排除副本)的汇报情况
 集群处于安全模式的时候   每一个数据块的副本最小保证个数  默认1个
 \<property>
   \<name>dfs.namenode.replication.min\</name>
   \<value>1\</value>
   \<description>Minimal block replication. 
   \</description>
 \</property>
 所有数据块的存活率(不考虑副本的)
  假设集群中  10000个数据块   至少0.999*10000=9990个数据块正常的才能离开安全模式
   如果数据块少于这个数  这个时候集群一直处于安全模式
 <property>
   <name>dfs.namenode.safemode.threshold-pct</name>
   <value>0.999f</value>
   <description>
  Specifies the percentage of blocks that should satisfy 
  the minimal replication requirement defined by dfs.namenode.replication.min.
  Values less than or equal to 0 mean not to wait for any particular
  percentage of blocks before exiting safemode.
  Values greater than 1 will make safe mode permanent.
   </description>
 </property>

手动进入和离开安全模式的命令:
hdfs dfsadmin -safemode enter/leave/get/wait
enter 进入安全模式
leave 离开安全模式
get 获取安全模式的状态
wait 等待离开安全模式

集群处于安全模式 哪些事情可以做 哪些事情不可以做?
1)读的操作 不修改元数据的操作
hadoop fs -ls / 可以
hadoop fs -cat / 可以
hadoop fs -tail / 可以
hadoop fs -get / /
不修改元数据的操作都可以进行
2)写的操作 修改元数据信息
hadoop fs -mkdir /
hadoop fs -put / /
hadoop fs -rm -r -f /
需要修改元数据的操作 都不可以进行的

机架策略:副本存放策略
默认2个机架的时候 3个副本的情况下
机架:存放服务器的
1)第一个副本存放在客户端所在节点(客户端是集群中的某一个节点)
如果客户端不是集群中的某一个节点 任意存储
2)第二个副本存储在与第一个副本不同机架的任意节点上
3)第三个副本存储在与第二个副本相同机架的不同节点上

负载均衡:
hdfs来说 负载均衡指的是每一个datanode节点上存储的数据和他的硬件匹配 实际上说的是占有率相当的
小实例:
7T
datanode01 8T 2T 25%
datanode02 4T 1T 25%
datanode03 16T 4T 25%
观察集群 2节点上存储的数据比较多 集群不处于负载均衡
集群如果没有处于负载均衡的时候 集群会自动进行负载均衡的
进行负载均衡的过程 说白了就是数据块的移动的过程 肯定跨节点 跨机架 需要网络传输
下面的参数 集群自动进行负载均衡的带宽 很慢 默认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>104857600000</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中的垃圾回收
集群空闲的时候进行负载均衡   提升集群负载均衡的效率的

编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDFS对象存储服务:Ozone的元数据.. 下一篇sqoop   把 hdfs 和关系型数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }