1.概述

光从字面上来理解,很容易让一些初学者先入为主的认为:SecondaryNameNode(snn)就是NameNode(nn)的热备进程。
其实不是。snn是HDFS架构中的一个组成部分,但是经常由于名字而被人误解它真正的用途,其实它真正的用途,是用来保存namenode中对HDFS metadata的信息的备份,并减少namenode重启的时间。对于hadoop进程中 ,要配置好并正确的使用 snn,还是需要做一些工作的。

hadoop的默认配置中让snn进程默认运行在了namenode的那台机器上,但是这样的话,如果这台机器出错,宕机,对恢复HDFS文件系统是很大的灾难,更好的方式是:将snn的进程配置在另外一台机器 上运行。

在hadoop中,namenode负责对HDFS的metadata的持久化存储,并且处理来自客户端的对HDFS的各种操作的交互反馈。为了保 证交互速度,HDFS文件系统的metadata是被load到namenode机器的内存中的,并且会将内存中的这些数据保存到磁盘进行持久化存储。

为了保证这个持久化过程不会成为HDFS操作的瓶颈,hadoop采取的方式是:没有对任何一次的当前文件系统的snapshot进行持久化,对HDFS最近一段时间的操作list会被保存到namenode中的一个叫Editlog的文件中去。当重启namenode时,除了load fsImage意外,还会对这个EditLog文件中 记录的HDFS操作进行replay,以恢复HDFS重启之前的最终状态。

而SecondaryNameNode,会周期性的将EditLog中记录的对HDFS的操作合并到一个checkpoint中,然后清空 EditLog。所以namenode的重启就会Load最新的一个checkpoint,并replay EditLog中 记录的hdfs操作,由于EditLog中记录的是从上一次checkpoint以后到现在的操作列表,所以就会比较小。如果没有snn的这个周期性的合并过程,那么当每次重启namenode的时候,就会 花费很长的时间。而这样周期性的合并就能减少重启的时间。同时也能保证HDFS系统的完整性。
这就是SecondaryNameNode所做的事情。所以snn并不能分担namenode上对HDFS交互性操作的压力。尽管如此,当 namenode机器宕机或者namenode进程出问题时,namenode的daemon进程可以通过人工的方式从snn上拷贝一份metadata 来恢复HDFS文件系统。
至于为什么要将SNN进程运行在一台非NameNode的 机器上,这主要出于两点考虑:

可扩展性: 创建一个新的HDFS的snapshot需要将namenode中load到内存的metadata信息全部拷贝一遍,这样的操作需要的内存就需要 和namenode占用的内存一样,由于分配给namenode进程的内存其实是对HDFS文件系统的限制,如果分布式文件系统非常的大,那么 namenode那台机器的内存就可能会被namenode进程全部占据。
容错性: 当snn创建一个checkpoint的时候,它会将checkpoint拷贝成metadata的几个拷贝。将这个操作运行到另外一台机器,还可以提供分布式文件系统的容错性。
配置将SecondaryNameNode运行在另外一台机器上

HDFS的一次运行实例是通过在namenode机器上的$HADOOP_HOME/bin/start-dfs.sh( 或者start-all.sh ) 脚本来启动的。这个脚本会在运行该脚本的机器上启动 namenode进程,而slaves机器上都会启动DataNode进程,slave机器的列表保存在 conf/slaves文件中,一行一台机器。并且会在另外一台机器上启动一个snn进程,这台机器由 conf/masters文件指定。

所以,这里需要严格注意,conf/masters 文件中指定的机器,并不是说jobtracker或者namenode进程要 运行在这台机器上,因为这些进程是运行在 launch bin/start-dfs.sh或者 bin/start-mapred.sh(start-all.sh)的机器上的。所以,masters这个文件名是非常的令人混淆的,应该叫做 secondaries会比较合适。

2.配置

然后,通过以下步骤:
将所有想要运行secondarynamenode进程的机器写到masters文件中,一行一台。
修改在masters文件中配置了的机器上的conf/hadoop-site.xml文件,加上如下选项:

<property>
<name>dfs.http.address</name>
<value>namenode.hadoop-host.com:50070</value>
</property>

core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。

<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.
</description>
</property> <property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>The size of the current edit log (in bytes) that triggers
a periodic checkpoint even if the fs.checkpoint.period hasn't expired.
</description>
</property>

3. 配置检查

配置完成之后,我们需要检查一下是否成功。我们可以通过查看运行secondarynamenode的机器上文件目录来确定是否成功 配置。首先输入jps查看是否存在secondarynamenode进程。如果存在,在查看对应的目录下是否有备份记录。

该目录一般存在于hadoop.tmp.dir/dfs/namesecondary/下面。

4.总结

1、secondarynamenode可以配置多个,master文件里面多写几个就可以。
2、千万记得如果要恢复数据是需要手动拷贝到namenode机器上的。不是自动的(参看上面写的恢复操作)。
3、镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period值

转载于:https://www.cnblogs.com/ggjucheng/archive/2012/04/18/2454692.html

hadoop SecondaryNameNode和NameNode相关推荐

  1. ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint

    grep -ri Exception得到如下信息: /home/appleyuchi/bigdata/hadoop-3.2.1/logs/hadoop-appleyuchi-secondaryname ...

  2. hadoop主节点(NameNode)备份策略以、恢复方法、操作步骤

    一.dits和fsimage 首先要提到两个文件edits和fsimage,下面来说说他们是做什么的. 集群中的名称节点(NameNode)会把文件系统的变化以追加保存到日志文件edits中. 当名称 ...

  3. Hadoop HA 双namenode搭建

    机器分布 hadoop1 192.168.56121 hadoop2 192.168.56122 hadoop3 192.168.56123 准备安装包 jdk-7u71-linux-x64.tar. ...

  4. Hive启动报错org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeE...

    Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeExce ...

  5. HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)

    异常信息: 13/09/11 12:12:06 INFO hdfs.DFSClient: SMALL_BUFFER_SIZE is 512 org.apache.hadoop.ipc.RemoteEx ...

  6. Hadoop JobTracker和NameNode运行时参数查看

    1)JobTracker运行时参数: hadoop@ubuntu:/home/zhangchao3$ hadoop 29563 1 0 11:34 pts/12 00:00:24 /home/hado ...

  7. HADOOP HA之NameNode HA集群配置与应用

    目录 前言 一.HADOOP HA之NameNode HA集群配置 1.修改hadoop-env.sh 2.修改core-site.xml 3.修改hdfs-site.xml 4.修改workers ...

  8. hive报错(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory/tmp/hive/.

    报错场景: 使用shell脚本进行对hive的数据查询导入导致出错,先是hive执行时间较长,后面hive报错. 问题描述: 使用jps查询进程,发现有三个hive进程,三个RunJar,RunJar ...

  9. Hadoop框架:NameNode工作机制详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.存储机制 1.基础描述 NameNode运行时元数据需要存放在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者添加元数据 ...

最新文章

  1. C#调用windows api的要点
  2. Kali Linux***测试
  3. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
  4. python中pyecharts模块全局配置_python中pyecharts模块的使用示例
  5. linux查看系统的日志的一些实用操作
  6. Winform下的键盘事件
  7. Netflow的配置方法
  8. 【Flutter】Dart的工厂构造方法单例对象初始化列表
  9. object c小代码——日期篇
  10. 函数r语言_[R learning]-0006-R语言的基本函数
  11. MyVoix2.0.js 源码分析 WebSpeech与WebAudio篇
  12. 一周信创舆情观察(6.15~6.21)
  13. 三调数据库标注插件v1.3
  14. 常用经典SQL语句大全完整版--详解+实例
  15. plc与计算机通信方式,PLC通信方式介绍
  16. 安卓开发——修改Toolbar默认图标(如返回图标)的颜色
  17. mysql中日期相减_Excel教程:Excel日期问题的小妙招
  18. 【Java】HTTP请求工具类
  19. ROS-机器人操作系统(ROS)浅析----第三章
  20. mysql怎么创建库和创建表?

热门文章

  1. MyBatis入门HelloWorld,注解实现
  2. 操作系统修炼秘籍(1):秘籍简介
  3. 《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限...
  4. 使用 ArcGIS Desktop 切瓦片
  5. python之操作系统介绍,进程的创建
  6. poj 2769 感觉♂良好 (单调栈)
  7. 设计模式(2)--Singleton(单例模式)--创建型
  8. 谈谈cookie的弊端
  9. 大二第一学期期末课程设计 2015.12.28
  10. css为网页顶部和底部都加入背景图