Hadoop-HDFS四大机制和两大核心以及元数据合并

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qichangjian/article/details/87941337

HDFS四大机制:心跳机制,安全机制,机架策略(副本存放策略),负载均衡。
HDFS两大核心:文件上传和文件下载

1.HDFS四大机制

HDFS四大机制:心跳机制,安全机制,机架策略(副本存放策略),负载均衡。

(1)心跳机制:

介绍: hdfs是主从架构,所有为了实时的得知dataNode是否存活,必须建立心跳机制,在整个hdfs运行过程中,dataNode会定时的向nameNode发送心跳报告已告知nameNode自己的状态。

心跳内容

  • 报告自己的存活状态,每次汇报之后都会更新维护的计数信息
  • 向nameNode汇报自己的存储的block列表信息

心跳报告周期

<property>
       <name>dfs.heartbeat.interval</name>
       <value>3</value> //单位秒
</property>

nameNode判断一个dataNode宕机的基准
连续10次接收不到dataNode的心跳信息,和2次的检查时间

检查时间:表示在nameNode在接收不到dataNode的心跳时,此时会向dataNode主动发送检查

<property>               
	<name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value> //单位毫秒
</property>

计算公式:2dfs.namenode.heartbeat.recheck-interval+10dfs.heartbeat.interval=310+3002=630s=10.5min

(2)安全机制:

介绍:hdfs在启动的时候,首先会进入的安全模式中,当达到规定的要求时,会退出安全模式。在安全模式中,不能执行任何修改元数据信息的操作
  
hdfs的元数据的介绍(三个部分)

  • 抽象目录树
  • 数据与块的对应关系(文件被切分成多少个块)
  • block块存放的位置信息

hdfs元数据的存储位置

  • 内存:内存中存储了一份完整的元数据信息(抽象目录树、数据与块的对应关系、block块存放的位置信息)
  • 硬盘:抽象目录树、数据与块的对应关系

注意

扫描二维码关注公众号,回复: 5360240 查看本文章
  其中内存中的元数据的block块存放的位置信息,是通过dataNode向nameNode汇报心跳时获取的.
  硬盘中的元数据,是因为内存中的元数据在机器宕机时就自动消失,所以需要将内存中的元数据持久化到硬盘
  而硬盘中的元数据只有抽象目录树、数据与块的对应关系,没有block块存放的位置信息

nameNode在启动的所作的操作
集群的启动顺序:nameNode—》dataNode—》secondaryNameNode
 将硬盘中的元数据信息加载内存,如果是第一次启动集群,此时会在本地生成一个fsimage镜像文件,接收dataNode汇报的心跳,将汇报中的block的位置信息,加载到内存。当然就在此时hdfs会进入安全模式。

退出安全模式的条件

  • 如果在集群启动时dfs.namenode.safemode.min.datanodes(启动的dataNode个数)为0时,并且,数据块的最小副本数dfs.namenode.replication.min为1时,此时会退出安全模式,也就是说,集群达到了最小副本数,并且能运行的datanode节点也达到了要求,此时退出安全模式

  • 启动的dataNode个数为0时,并且所有的数据块的存货率达到0.999f时,集群退出安全模式(副本数达到要求

      <property>
           <name>dfs.namenode.safemode.threshold-pct</name>
           <value>0.999f</value>
      </property>
    

手动退出或者进入安全模式

  hdfs dfsadmin -safemode enter 进入
  hdfs dfsadmin -safemode leave 退出
  hdfs dfsadmin -safemode get 查看

(3)机架策略(副本存放策略):

方法:
将每个文件的数据进行分块存储,每一个数据块又保存有多个副本,这些数据块副本分
布在不同的机器节点上
在这里插入图片描述
在多数情况下,HDFS 默认的副本系数是 3
在这里插入图片描述
第一个副本,放置在离客户端最近的那个机架的任意节点,如果客户端是本机,那就存放在本机(保证有一个副本数),第二个副本,放置在跟第一个副本不同机架的任意节点上,第三个副本,放置在跟第二个副本相同机架的不同节点上

修改副本的方法
1.修改配置文件:

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

2. 命令设置: hadoop fs -setrep 2 -R dir

(4)负载均衡:

hdfs的负载均衡:表示每一个dataNode存储的****数据与其硬件相匹配,即占用率相当
如何手动调整负载均衡

  • 集群自动调整负载均衡的带宽:(默认为1M)

      <property>
              <name>dfs.datanode.balance.bandwidthPerSec</name>
              <value>1048576</value> //1M
      </property>
    
  • 告诉集群进行负载均衡:start-balancer.sh -t 10% 表示节点最大占用率与节点的最小的占用率之间的差值当超过**10%**时,此时集群不会立刻进行负载均衡,会在集群不忙的时候进行。

2.两大核心:

HDFS两大核心:文件上传和文件下载
请查看HDFS-读写流程详解

3.元数据的合并( CheckPoint):

WAL(Write ahead Log): 预写日志系统

在计算机科学中,预写式日志(Write-ahead logging,缩写 WAL)是关系数据库系统中
用于提供原子性和持久性(ACID 属性中的两个)的一系列技术。在使用 WAL 的系统中,所
有的修改在提交之前都要先写入 log 文件中。
Log 文件中通常包括 redo 和 undo 信息。这样做的目的可以通过一个例子来说明。假设
一个程序在执行某些操作的过程中机器掉电了。在重新启动时,程序可能需要知道当时执行
的操作是成功了还是部分成功或者是失败了。如果使用了 WAL,程序就可以检查 log 文件,
并对突然掉电时计划执行的操作内容跟实际上执行的操作内容进行比较。在这个比较的基础
上,程序就可以决定是撤销已做的操作还是继续完成已做的操作,或者是保持原样。
WAL 允许用 in-place 方式更新数据库。另一种用来实现原子更新的方法是 shadow paging,
它并不是 in-place 方式。用 in-place 方式做更新的主要优点是减少索引和块列表的修改。ARIES
是 WAL 系列技术常用的算法。在文件系统中,WAL 通常称为 journaling。PostgreSQL 也是用
WAL 来提供 point-in-time 恢复和数据库复制特性

NameNode 对数据的管理采用了两种存储形式:内存和磁盘

hdfs元数据的存储位置

  • 内存:内存中存储了一份完整的元数据信息(抽象目录树、数据与块的对应关系、block块存放的位置信息)
  • 硬盘:抽象目录树、数据与块的对应关系

checkpoint原理:每隔一段时间,会由 secondary namenode 将 namenode 上积累的所有 edits 和一个最新的
fsimage 下载到本地,并加载到内存进行 merge(这个过程称为 checkpoint)

CheckPoint 详细过程图解
在这里插入图片描述
在这里插入图片描述

  • 集群启动时,加载fsimage镜像文件到内存,如果是第一启动集群或者集群正常关闭之后重启此时nameNode会在硬盘中合并一个fsimage镜像
  • seconddaryNameNode定时(1分钟)发送检验给nameNode,查看是否需要进行合并
  • 得知nameNode需要进行元数据合并
  • seconddaryNameNode向nameNode发送合并请求
  • nameNode将edits_inprogress_000095 根据seen_txid进行回滚,并且生成一个新的空的edits_inprogress_000096,继续记录操作日志
  • secondaryNameNode将回滚的edits和最新的fsiamge进行本地拉取
  • secondaryNameNode将edits和最新的fsiamge进行合并,在内存中根据edits修改fsiamge
  • secondaryNameNode将合并后的fsiamge推送回namenode。并在本地保存一份。

CheckPoint 触发配置
A:间隔多长时间合并一次(3600 秒)
B:操作日志记录超过多少条合并一次(100万)

dfs.namenode.checkpoint.check.period=60 ##检查触发条件是否满足的频率,60 秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
##以上两个参数做 checkpoint 操作时,secondary namenode 的本地工作目录
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
dfs.namenode.checkpoint.max-retries=3 ##最大重试次数
dfs.namenode.checkpoint.period=3600 ##两次 checkpoint 之间的时间间隔 3600 秒
dfs.namenode.checkpoint.txns=1000000 ##两次 checkpoint 之间最大的操作记录	

CheckPoint 附带作用:
Namenode 和 SecondaryNamenode 的工作目录存储结构完全相同,所以,当 Namenode 故障
退出需要重新恢复时,可以从SecondaryNamenode的工作目录中将fsimage拷贝到Namenode
的工作目录
,以恢复 namenode 的元数据

猜你喜欢

转载自blog.csdn.net/qichangjian/article/details/87941337
今日推荐