NameNode存储文件系统的变化作为log追加在本地的一个文件里:这个文件是edits。当一个NameNode启动时,它从一个映像文件:FsImage,读取HDFS的状态,使用来自edits日志文件的 edits。然后它将写入新的HDFS状态到FsImage并开始平常操作,此时edits是一个空文件。由于NameNode合并FsImage和edits只在启动时,edits日志文件会变得很大在一段时间内并运行在繁忙的集群上 ,一个副作用是一个更大的edits文件会使NameNode在下次重新启动时需要更长的时间。

Secondary NameNode定期合并FsImage和edits日志文件,并保持edits日志文件大小在一定限度。它通常和NameNode运行在不同的机器上,内存需求和NameNode相同。

检查点进程开始由Secondary NameNode两个配置参数控制。

dfs.namenode.checkpoint.period,默认被设置为1个小时,指定连续两个检查点间的最大延迟

dfs.namenode.checkpoint.txns,默认被设置为1M,定义了uncheckpointed事务在NameNode的数量,这将迫使有一个紧急检查点,即使检查点时间间隔尚未达到。

Secondary NameNode 存储最新检查点在一个目录中其结构的方式与NameNode的目录相同。以便于checkpoint镜像总是准备被NameNode读,如果需要的话。

为了安全,如何将Secondary NameNode 存放与NameNode不在同一台机器上?

hadoop 1.x版本:

在hadoop 节点下,修改masters内容

[root@hadoop conf]# vi masters

比如将里面的localhost改为Hadoop1

效果如下:

Hadoop:

[root@hadoop conf]# jps

7008JobTracker

6836NameNode

7105 Jps

Hadoop1:

[root@hadoop1 local]# jps

6315DataNode

6470TaskTracker

6561 Jps

6384SecondaryNameNode

hadoop2.x版本:

需要增加masters文件

vi masters

在文件里写入希望Secondary NameNode存放的主机名或者ip地址

需要修改配置文件:

修改hdfs-site.xml:

<property>
<name>dfs.http.address</name>
<value>master:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
//主要是这里的主机名要变
</property>

修改core-site.xml文件:

<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>
</property>

上面修改完毕,相应的节点也做同样的修改。

SecondaryNameNode的单独启动和停止

启动:

bin/hadoop-daemons.sh --config conf/ --hosts masters start secondarynamenode

停止:

bin/hadoop-daemons.sh --config conf/ --hosts masters stop
secondarynamenode

hadoop2.x里SecondaryNameNode总是在执行start-dfs.sh后自动起来,也没配置SecondaryNameNode,怎么自动启动SecondaryNameNode?

hadoop的启动命令:

start-dfs.sh

一旦执行这个脚本,它就会启动master,slave,然后secondarynamenode。

也就是说start-dfs.sh对它们进行了定义,你可以修改里面的脚本。

sudo nano start-dfs.sh

#---------------------------------------------------------
# secondary namenodes (if any)

SECONDARY_NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -secondarynamenodes 2>/dev/null)

if [ -n "$SECONDARY_NAMENODES" ]; then
echo "Starting secondary namenodes [$SECONDARY_NAMENODES]"

"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
--config "$HADOOP_CONF_DIR" \
--hostnames "$SECONDARY_NAMENODES" \
--script "$bin/hdfs" start secondarynamenode
fi

我们看到上面代码部分,注释掉SecondaryNameNode就不会起来了(在做这个操作前,自己先备份一份)。

Hadoop之Secondary NameNode的更多相关文章

  1. hadoop 根据secondary namenode恢复namenode

    refer to http://www.cnblogs.com/Richardzhu/p/3435989.html http://blog.csdn.net/wuzhilon88/article/de ...

  2. Secondary NameNode:的作用?

    前言 最近刚接触Hadoop, 一直没有弄明白NameNode和Secondary NameNode的区别和关系.很多人都认为,Secondary NameNode是NameNode的备份,是为了防止 ...

  3. hadoop主节点(NameNode)备份策略以及恢复方法

    link:http://jiajun.iteye.com/blog/809125 一.dits和fsimage 首先要提到两个文件edits和fsimage,下面来说说他们是做什么的. 集群中的名称节 ...

  4. Secondary Namenode - What it really do?

    原文链接:http://blog.madhukaraphatak.com/secondary-namenode---what-it-really-do/ Secondary Namenode is o ...

  5. Hadoop错误之namenode宕机的数据恢复

    情景再现: 在修复hadoop集群某一个datanode无法启动的问题时,搜到有一个答案说要删除hdfs-site.xml中dfs.data.dir属性所配置的目录,再重新单独启动该datanode即 ...

  6. 解读Secondary NameNode的功能

    1.概述 最近有朋友问我Secondary NameNode的作用,是不是NameNode的备份?是不是为了防止NameNode的单点问题?确实,刚接触Hadoop,从字面上看,很容易会把Second ...

  7. Secondary NameNode 的作用

    https://blog.csdn.net/xh16319/article/details/31375197 很多人都认为,Secondary NameNode是NameNode的备份,是为了防止Na ...

  8. (转)Secondary NameNode的作用

    在Hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备份.但它实际上却不是.很多Hadoop的初学者都很疑惑,S ...

  9. Secondary NameNode究竟是做什么的

    Secondary NameNode:它究竟有什么作用? 在hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备 ...

随机推荐

  1. 对于JDBC数据库的初始化操作

    package com.bluesky.connection; import java.sql.Connection; import java.sql.DriverManager; import ja ...

  2. iterator的romove方法的注意事项

    package cn.lonecloud.Iterator; import java.util.ArrayList; import java.util.Iterator; public class m ...

  3. GCC精彩之旅_2(转)

    说明: 本文共两篇,转自GCC精彩之旅.第一篇着重介绍GCC编译一个程序的过程与优化,第二篇侧重在GCC结合GDB对代码的调试. 调试     一个功能强大的调试器不仅为程序员提供了跟踪程序执行的手段 ...

  4. AVFoundation 框架初探究(四)

    叨叨两句 动手写这篇总结时候也是二月底过完年回来上班了,又开始新的一年了,今年会是什么样子?这问题可能得年底再回答自己了.在家窝了那么久,上班还是的接着看我们要看的东西,毕竟我们要做的事还真的太多的. ...

  5. Yii2框架RBAC(Role-Based Access Control)的使用

    1.在项目的common/config/main.php文件的components中添加如下代码:   'authManager' => [    'class' => 'yii\rbac ...

  6. CentOS下安装配置cmake

    安装环境:CentOS-6.4   安装方式:源码编译安装  软件:cmake-2.8.5.tar.gz 下载地址暂时不提供,去百度搜一下准有 安装前提 系统中已经安装了gcc. ncurses-de ...

  7. python如何使用pymysql模块

    Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而M ...

  8. 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码

    一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...

  9. java发送邮件时遇到的坑

    之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误: javax.mail.MessagingException: Unkn ...

  10. jQuery对象与js对象互相转换

    两种转换方式将一个jQuery对象转换成js对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的js对象. 如:var $v ...