【Hadoop】Seondary NameNode不是备份NameNode!!
昨天和舍友聊天时无意中提起Secondary NameNode,他说这是备用NameNode。我当时就有点疑惑。。之后查阅了相关资料和博客,算是基本理解了什么是Secondary NameNode。
1. HDFS为什么要加入Secondary NameNode?
翻看《Hadoop权威指南》,书上明确写道NameNode存在单点损坏问题,Hadoop为了提高NameNode的容错,提供了以下两种机制:
- 备份组成文件系统元数据的文件
- 运行一个辅助NameNode
这里提到的辅助NameNode也就是我们要分析的Secondary NameNode
2. Secondary NameNode的真正作用
(1)首先,我们先了解以下NameNode的相关概念:HDFS集群中有两种节点,DataNode(工作节点)和NameNode(管理结点),NameNode主要功能如下:
- 管理文件系统的命名空间(NameSpace);
- 维护文件系统树(FileSystem Tree)以及整棵树内所有的文件和目录(这些信息称为NameNode的MetaData)
- 记录每个文件中各个块所在的数据结点信息(不永久保存,启动时重建)
(2)NameNode的 MetaData 以两种形式永久保存在本地磁盘上:
- 命名空间镜像文件(fsimage):保存HDFS的最新状态(截止到 fsimage 文件创建时的最新状态)
- 编辑日志文件(edits):自fsimage创建后NameSpace的操作日志
(3)当NameNode 启动时,需要合并fsimage和edits文件,按照edits文件内容将fsimage进行更行,从而得到HDFS的最新状态。实际应用中,NameNode很少重新启动。假如存在一个庞大的集群,且关于HDFS的操作相当频繁与复杂,那么就会产生一个非常大的edits文件用于记录操作,这就带来了以下问题:
- edits文件过大会带来管理问题;
- 一旦需要重启HDFS时,就需要花费很长一段时间对edits和fsimage进行合并,这就导致HDFS长时间内无法启动;
- 如果NameNode挂掉了,会丢失部分操作记录(这部分记录存储在内存中,还未写入edits);
(4)此时,Secondary NameNode(SN)就要发挥它的作用了:合并edits文件,防止edits文件持续增长。具体步骤如下:
- SN向NameNode发送请求;
- NamoNode收到请求,暂停写入edits;
- log记录产生一个edits.new的文件;
- SN从NameNode获取元数据,然后对edits和fsimage进行合并(将edits内容更新到fsimage),产生一个新的fsimage,将其发送给NameNode;
- NameNode收到后,将之前的fsimage文件进行覆盖;
- NameNode删除之前的edits文件,将edits.new重命名为edits;
这样就可以避免edits文件的持续增长,也就解决上述几个问题。

3. Secondary NameNode何时读取元数据(checkpoint)
(1)达到最大时间间隔
参数 fs.checkpoint.period:规定两次checkpoint的最大时间间隔
(2)edits文件的最大尺寸
参数 fs.checkpoint.size:当NameNode上的edits文件超过该尺寸,无论是否达到最大时间间隔,都强制执行checkpoint
4. CheckNode的诞生
由于Secondary NameNode总是让人“望文生义”,带来理解上的偏差,Hadoop 1.0.4之后推荐不再使用Secondary NameNod,而是其替代版CheckNode。二者功能、配置完全相同,只是执行命令有所不同
总结:
1. Secondary NameNode用于定期合并与编辑edits和fsimage文件,防止NameNode的edits文件增长过大;
2. Secondary nameNode一般运行在另一台物理机,因为其内存大小需求与NameNode一致;
3. Secondary NameNode更像是NameNode的辅助工具,而不是备用NameNode
【Hadoop】Seondary NameNode不是备份NameNode!!的更多相关文章
- Hadoop分布式集群部署(单namenode节点)
Hadoop分布式集群部署 系统系统环境: OS: CentOS 6.8 内存:2G CPU:1核 Software:jdk-8u151-linux-x64.rpm hadoop-2.7.4.tar. ...
- 高可用hadoop的hdfs启动的时候namenode启动不了
启动的时候,一直要求输入namenode密码: 查看namenode的日志如下: 2019-03-28 18:38:08,961 INFO org.apache.hadoop.ipc.Client: ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- 安装部署Apache Hadoop (完全分布式模式并且实现NameNode HA和ResourceManager HA)
本节内容: 环境规划 配置集群各节点hosts文件 安装JDK1.7 安装依赖包ssh和rsync 各节点时间同步 安装Zookeeper集群 添加Hadoop运行用户 配置主节点登录自己和其他节点不 ...
- Hadoop源码学习笔记之NameNode启动场景流程二:http server启动源码剖析
NameNodeHttpServer启动源码剖析,这一部分主要按以下步骤进行: 一.源码调用分析 二.伪代码调用流程梳理 三.http server服务流程图解 第一步,源码调用分析 前一篇文章已经锁 ...
- hadoop报错java.io.IOException: Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured
不多说,直接上干货! 问题详情 问题排查 spark@master:~/app/hadoop$ sbin/start-all.sh This script is Deprecated. Instead ...
- Hadoop源码学习笔记之NameNode启动场景流程三:FSNamesystem初始化源码剖析
上篇内容分析了http server的启动代码,这篇文章继续从initialize()方法中按执行顺序进行分析.内容还是分为三大块: 一.源码调用关系分析 二.伪代码执行流程 三.代码图解 一.源码调 ...
- namenode无法启动(namenode格式化失败)
格式化namenode root@node04 bin]# sudo -u hdfs hdfs namenode –format 16/11/14 10:56:51 INFO namenode.Nam ...
- hdfs namenode -initializeSharedEdits 和 hdfs namenode -bootstrapStandby
hdfs namenode -initializeSharedEdits 将所有journal node的元文件的VERSION文件的参数修改成与namenode的元数据相同 hdfs namenod ...
随机推荐
- OC NSMutableString的使用
#pragma mark 可变字符串的创建 void stringCreate() { // 预先分配10个字数的存储空间 NSMutableString *str = [[NSMutableStri ...
- AngularJs学习笔记--I18n/L10n
原版地址:http://code.angularjs.org/1.0.2/docs/guide/i18n 一.I18n and L10n in AngularJS 1. 什么是I18n和L10n? 国 ...
- AngularJs学习笔记--Scope
原版地址:http://code.angularjs.org/1.0.2/docs/guide/scope 一.什么是Scope? scope(http://code.angularjs.org/1. ...
- hdu 4825 Xor Sum(trie+贪心)
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...
- Ubuntu下Apache配置网站根路径
安装之后apache默认的跟路径是/var/www/ 如何修改这个默认路径呢? 直接编辑/etc/apache2/sites-available/default-ssl.conf,将Docum ...
- 练习:HPH 数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PHP基础系列(二) PHP数组相关的函数分类整理
之前写过一篇介绍 PHP字符串函数 的博文,这里写第二篇,本文主要介绍PHP 数组相关的函数: 一.检查数组中是否存在 array_key_exists — 检查给定的键名或索引是否存在于数组中 ar ...
- Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version) 【区间更新 线段树】
传送门:http://codeforces.com/contest/1108/problem/E2 E2. Array and Segments (Hard version) time limit p ...
- 为什么我们需要DTO?
最近在写代码时突然产生了这个疑惑,我们为什么需要DTO进行数据传输呢? 要了解DTO首先我们要知道什么是DAO,DAO就是数据库的一个数据模型,是一个类文件里面存储着数据库的字段及其getter&am ...
- 阿里云Docker镜像仓库(Docker Registry)
镜像仓库申请地址: https://cr.console.aliyun.com/cn-shanghai/instances/repositories 一.创建命名空间 例如daniel-hub ...