HDFS入门(二)

HDFS元数据

元数据 按类型分
  • 文件, 目录自身的属性信息
  • 文件的存储块信息 分块情况 副本个数
  • DN的信息
元数据 按形式分
  • 内存元数据
    • 包含hdfs最完整的数据
  • 磁盘元数据
    • fsimage镜像文件
      • 包含hdfs的所有目录和文件元数据信息, 但不包括文件块位置的信息, 文件块位置信息只存储在内存中, DN加入集群时, 汇报自己所拥有的块信息给NN, 并且一直更新
    • edits编辑日志
      • 包含hdfs的所有事务操作(文件的创建删除修改)
      • 客户端执行的更改操作首先被记录到edits文件中

当客户端对 HDFS 中的文件进行新增或者修改操作,操作记录首先被记入 edits 日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。因为 fsimage 文件一般都很大(GB 级别的很常见),如果所有的更新操作都往 fsimage 文件中添加,这样会导致系统运行的十分缓慢。

HDFS重启流程
  • 首先加载fsimage文件
  • 然后回放fsimage之后生成的( 根据事务编号进行比对)editslog文件
  • 等待DN注册汇报
Secondary Namenode

SNN的职责 : 合并namenode的edits log文件到fsimage中

合并流程

在这里插入图片描述

  • 有 dfs.namenode.checkpoint.period (两次checkpoint的时间间隔 默认1小时)和 dfs.namenode.checkpoint.txns (最大的没有执行事务的数量 默认为100W)两个配置,只要达到这两个条件任何一个,secondarynamenode 就会执行 checkpoint 的操作
  • 当触发 checkpoint 操作时,NameNode 会生成一个新的 edits 即上图中的 edits.new 文件,同时 SecondaryNameNode 会将 edits 文件和 fsimage 复制到本地(HTTP GET 方式)
  • secondarynamenode 将下载下来的 fsimage 载入到内存,然后一条一条地执行 edits 文件中的各项更新操作,使得内存中的 fsimage 保存最新,这个过程就是edits 和fsimage文件合并,生成一个新的 fsimage 文件即上图中的 Fsimage.ckpt 文件。
  • secondarynamenode 将新生成的 Fsimage.ckpt 文件复制到 NameNode 节点。
  • 在 NameNode 节点的 edits.new 文件和 Fsimage.ckpt 文件会替换掉原来的 edits 文件和 fsimage 文件,至此刚好是一个轮回,即在 NameNode 中又是 edits 和 fsimage 文件。

HDFS安全模式

安全模式是 HDFS 所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。
在NameNode主节点启动时,HDFS首先进入安全模式,集群会开始检查数据块的完整性。DataNode 在启动的时候会向 namenode 汇报可用的 block 信息,当整个系统达到安全标准时,HDFS 自动离开安全模式。
假设我们设置的副本数(即参数 dfs.replication)是 5,那么在 Datanode 上就应该有5 个副本存在,假设只存在 3 个副本,那么比例就是 3/5=0.6。在配置文件 hdfs-default.xml中定义了一个最小的副本的副本率(即参数 dfs.namenode.safemode.threshold-pct)0.999。
我们的副本率 0.6 明显小于 0.99,因此系统会自动的复制副本到其他的 DataNode,使得副本率不小于 0.999.如果系统中有 8 个副本,超过我们设定的 5 个副本,那么系统也会删除多余的 3 个副本。
如果 HDFS 处于 安全模式下, 不允许 HDFS 客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹,修改副本数等操作。

相关配置
  • dfs.namenode.replication.min: 每个数据块最小副本数量,默认为 1. 在上传文件时,达到最小副本数,就认为上传是成功的。
  • dfs.namenode.safemode.threshold-pct:达到最小副本数的数据块的百分比。默认为0.999f。当小于这个比例,那就将系统切换成安全模式,对数据块进行复制;当大于该比例时,就离开安全模式,说明系统有足够的数据块副本数,可以对外提供服务。
  • dfs.namenode.safemode.min.datanodes: 离开安全模式的最小可用 datanode 数量要求,默认为 0.也就是即使所有 datanode 都不可用,仍然可以离开安全模式。
  • dfs.namenode.safemode.extension: 当block和datanode都满足时, 集群离开安全模式默认为30000毫秒

shell命令

  • hdfs dfsadmin -safemode enter 进入安全模式
  • hdfs dfsadmin -safemode leave 离开安全模式
  • hdfs dfsadmin -safemode get 查看是否处于安全模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值