关于HDFS存储元数据的NameNode持久化存储
NameNode持久化场景引入:
问题:NameNode宕机,导致内存中的文件元数据丢失怎么办?我们知道元数据是存储来内存中的,所以一旦宕机,内存数据是会丢失的,因此为了避免数据丢失,HDFS中出现了该持久化技术。
解决:NameNode会将内存中的元数据持久化到磁盘中。
持久化两大方案:日志持久化、快照持久化
日志持久化概念:将client客户端对HDFS执行的增删改操作命令记录在日志文件中,方便以后宕机数据丢失,再次运行这些操作命令,每当有一个操作命令需要执行,首先记录在editslog 也就是我们的日志持久化文件中,再完成实际操作,保证每一个操作都对应的有日志去完成备份。
日志持久化优缺点:
优点 时效性极高,数据恢复安全,能够完完全全恢复丢失的NN(NameNode)元数据。
缺点 恢复时间长,举个例子,我们对元数据的操作做了N多次很多修改,最后用户将该存储文件删除,我们的元数据中不应该再有该数据,我们之前的editslog日志就白白运行许多命令。
快照持久化概念:每隔一段时间,将内存中的元数据信息,持久化存储起在fsimage快照中。
快照持久化优缺点:
优点 恢复快,比一条条的数据恢复快很多。
缺点 数据持久化不安全,不能保证最后宕机前的部分数据保存在恢复快照中,时效性差。
checkpoint:

因此我们得知我们最好使用两者的优点来进行存储的恢复,数据安全不得马虎,时效性同时更要保证,我们HDFS出现了SNN-SecondaryNamenode:
secondaryNameNode是NameNode的助理,将日志editslog合并到快照fsimage中。如下图所示,首先大概了解下两者合并的机制,我们的日志持久化依然按照来一条操作,记录一条日志的工作机制,当数据达到一定的量,默认100w条时候,完成一个合并操作:系统首先保存一个0号原始快照(fsimage0),然后editslog0记录实时的指令日志,当达到合并时机时,fsimage0和editslog发送到SNN中完成合并,由该助理帮助我们合并成新的快照fsimage1,将fsimage1复制发送给NameNode,以备宕机时候做为最新的快照来回复时间,尽全力保证了快照的时效性。
值得注意的是!我们执行fsimage0和editslog0合并成fismage1的操作的同时,新来的指令会记录在editslog1中,完完全全保证了时效性,这个正在记录实时操作的日志文件,没有达到合并时机(checkpoint)之前,是始终在NN(Namenode)中的,我们一旦宕机,fsimage1和editslog1足以完完全全保证所有信息的恢复。完成了安全的持久化。

持久化结论:
1. HDFS接受客户端的文件操作后。
2. 先将操作的命令 以日志的方式记录到editslog中。
3. 然后再将指令对应的文件元数据的修改操作,修改内存中的元数据信息。
4. SNN定期负责将editslog中的文件合并到fsimage中,数据恢复时用最新的正在记录的editslog合并最新的fsimage快照即可。
SNNcheckpoint机制:
1. SecondaryNameNode向NameNode发起合并请求
2. NameNode将当前的Editslog文件保存改名edits,并新建EditsLog继续持久化工作。
3. 将改名后的edits文件和本地的FSImage(旧)发送给sencondaryNameNode
4. SecondaryNameNode负责将FSImage(旧)+edits文件合并成FSImage(新)
5. 将新的FSImage(新)发送给NameNode保存。
checkpoint触发条件(时机):
每1分钟检查一次触发条件。(SNN没隔1分钟,访问一次NN)
1. 每隔1小时触发一次checkPoint
2. 每100w次操作,触发一次checkpoint

后续我们需要注意的一些配置操作:
SNN和NN在一个服务器是上,存在单点故障。
场景:一旦服务器磁盘崩坏,持久化的数据就会全部丢失。
解决:SNN 和NN放在不同的服务器上。
那么怎么配置SNN的服务器位置呢?可以对hdfs-site.xml中的SNN的节点地址进行配置,需要注意的是我们需要配置文件通过Linux命令发送到所有的服务器中,做到统一。可以用scp命令。

单独启动SecondaryNameNode:
hadoop-deamon start secondarynamenode
当面试问到: snn的职责
namenode如何做数据持久化
checkpoint的流程
edis和fsimage分别做什么,这些基本没有差别,我们通过讲述两大持久化方案,合并优点,checkpoint合并机制流程即可。
个人随笔,转载注明引用,已经上传关于HDFS分布式的配置详情文档
关于HDFS存储元数据的NameNode持久化存储的更多相关文章
- 11.scrapy框架持久化存储
今日概要 基于终端指令的持久化存储 基于管道的持久化存储 今日详情 1.基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的 ...
- scrapy之持久化存储
scrapy之持久化存储 scrapy持久化存储一般有三种,分别是基于终端指令保存到磁盘本地,存储到MySQL,以及存储到Redis. 基于终端指令的持久化存储 scrapy crawl xxoo - ...
- scrapy框架持久化存储
基于终端指令的持久化存储 基于管道的持久化存储 1.基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文 ...
- Scrapy持久化存储
基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作; 执行输出指定格式进行存储:将爬 ...
- Redis持久化存储详解(一)
> 为什么要做持久化存储? 持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存.我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的 ...
- scrapy框架的持久化存储
一 . 基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作. 执行输出指定格式进行存 ...
- Scarpy框架持久化存储
一.介绍 持久化存储操作分为两类:磁盘文件和数据库. 而磁盘文件存储方式又分为:基于终端指令和基于管道 二.基于终端指令的持久化存储 Scrapy是通过 scrapy 命令行工具进行控制的. 这里我们 ...
- 11,scrapy框架持久化存储
今日总结 基于终端指令的持久化存储 基于管道的持久化存储 今日详情 1.基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的 ...
- scrapy 框架持久化存储
1.基于终端的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表或字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作. # 执行输出指定格式进行存储:将 ...
随机推荐
- Nginx 四层负载均衡
目录 四层负载均衡概述 配置七层负载均衡 配置四层负载均衡 四层负载均衡概述 四层负载均衡是基于IP+端口的负载均衡,七层负载均衡是基于URL或主机名等应用层信息的负载均衡. 其他层负载均衡(转载): ...
- CPU饥饿与线程饥饿
线程饥饿: 进程无法得到资源,(cpu或者io资源或者别的什么资源),所以无法进行下去 比如说读者写者问题,如果读者优先,那么写者可能会饿死. 又比如操作系统概念的一道习题. 用broadcast可能 ...
- 读js DOM编程艺术总结
第一章主要介绍一些历史性问题,javascript是Netcape和sun公司合作开发的. 第二章JavaScript语法: 1,数据类型:(弱类型)字符串,数值,布尔值(只有true和false,不 ...
- Shell 编程快速上手
Shell 编程快速上手 test.sh #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
- npm config set registry
npm config set registry $ npm config set registry $ npm config set registry https://registry.your-re ...
- GitHub Secrets All In One
GitHub Secrets All In One https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypte ...
- funny 生成器
funny 生成器 https://www.zhihu.com/question/380741546/answer/1190570384 举牌小人生成器 https://small-upup.upup ...
- 1. VUE介绍
今天开始系统学习vue前端框架. 我是有前端基础的, 刚工作那会, 哪里分那么清楚啊, 前后端我都得做, 所以, css, js, jquery, bootstrap都会点, 还系统学过ext, 哈哈 ...
- AtCoder Beginner Contest 192 F - Potion
题目链接 点我跳转 题目大意 给定 \(N\) 个物品和一个 \(X\) ,第 \(i\) 个物品的重量为 \(ai\),你可以从中选择任意个物品(不能不选) 假定选择了 \(S\) 个物品,物品的总 ...
- H5跳转app代码
不罗嗦直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...