NameNode有这么几个配置:

Property

Description

Suggested value

dfs.name.dir Directory in NameNode’s local filesystem to store HDFS’s metadata /home/hadoop/dfs/name
dfs.data.dir Directory in a DataNode’s local filesystem to store HDFS’s file blocks /home/hadoop/dfs/data
mapred.system.dir Directory in HDFS for storing shared MapReduce system files /hadoop/mapred/system

dfs.name.dir存放meta信息,dfs.data.dir存放的是文件块信息,它们的默认路径都是/tmp。它们还可以配置多个路径,中间使用逗号进行分割,这样这些路径都会写入相关的数据,从而达到数据备份的目的;如果datanode有多个硬件驱动设备,例如RAID和JBOD这样的,就可以让datanode中不同的硬件去读取dfs.name.dir中不同的目录,从而达到加速IO的效果。

NN是HDFS架构中最重要的一个组件。它保存所有文件系统的原信息并以高性能的方式将集群中的块映射图(blockmap)存放在内存中。当有一个微小集群的是,首先应该考虑分配一个机器个NN,其他的DN、JT、TT都不应该运行在上面。应该给NN尽量多的内存,并且使用RAID设备防止单个硬件故障。

一个让nn减负的办法是通过增加块大小去减少文件系统的元数据。文件太大又不利于发挥并行性能,一般块大小在64M到128M之间。一般情况下,NN和SNN是运行在同一台机器上面,SNN将在YARN中被更实时的东西替换,具体看这里:https://issues.apache.org/jira/browse/HADOOP-4539.

Secondary NameNode

SNN并非是NN的出现故障时候的一个备份,它周期性的清除NN中的文件系统状态信息,使得NN更有效率。NN使用FsImage和EditLog来管理文件系统的状态信息。文件FsImage是文件系统在某个时间点时候的一个snapshot,而Editlog存放这个时间点后面文件系统增量变化信息。这两个文件联合起来可表示文件系统的当前状态。当初始化NN的时候,他合并两个文件去创建新的snapshot。在NN初始化以后,FsImage将清空Editlog,后继对HDFS的变化将追加到EditLog中,而FsImage的信息将保持不变。NN在内存中保存当前文件系统的状态去快速响应。

集群比较忙的时候,EditLog会变得很大,重启NN时候合并操作会变得非常的慢,这个时候就是SNN大显身手的时候了。它进行合并两个文件的动作(默认是一个小时进行一次),让NN专心负责线上服务, 在文件conf/masters中配置SNN的ip,比较坑爹,因为真正的MASTER是NN。

在conf/hdfs-site.xml file 中通过参数 dfs.http.address加上端口50070确定NN,例如

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

SNN 通过这个参数从NN中获取FsImage 和EditLog,拼装后的URL如下:

  • FsImage— http://namenode.hadoop-host.com:50070/getimage?getimage=1
  • EditLog— http://namenode.hadoop-host.com:50070/getimage?getedit=1

SNN 同样用这个端口去调用合并后的数据。由于合并计算两个文件是很消耗内存的操作,SNN的硬件配置应当与NN相同。

Recovering from a failed NameNode

使用SNN的模式,虽然有切换代价,切换过程中不能够提供服务,但是数据却没有丢失。

NN是整个hadoop系统的单点,虽然SNN不是NN的备份,由于SNN配置与NN类似,故通过一些配置可以使得它作为NN的备用机器。NN的目录dfs.name.dir中存放了文件系统的元信息,SNN并不使用,它将这些信息下载到 fs.checkpoint.dir,然后再找个目录中进行合并操作。

<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/dfs/name,/mnt/hadoop-backup</value>
<final>true</final>
</property>

假设SNN和NN中dfs.name.dir都是/home/hadoop/dfs/name,而SNN中mount到/mnt/hadoop-backup中,HDFS就会写分别写两份相同的数据到SNN的目录和NN的目录中。这样他们的元数据文件就一模一样了,当出现故障的时候,只要切换ip就能够继续服务。当需要启动备用NN的时候,将NN的IP切换到备用NN的IP,由于DNS中已经缓存了DNS表,所以修改hostname是无效的。还需要在备用NN上面运行bin/start-dfs.sh

hadoop的HA还在做的过程中,据说YARN可以完美解决。

通过checkpoint image 恢复可以在这里找到http://issues.apache.org/jira/browse/HADOOP-2585.

HA的RDBD解决方案 http://www.cloudera.com/blog/2009/07/22/hadoop-ha-configuration/.

SNN--Second Name Node的更多相关文章

  1. [大数据] hadoop高可用(HA)部署(未完)

    一.HA部署架构 如上图所示,我们可以将其分为三个部分: 1.NN和DN组成Hadoop业务组件.浅绿色部分. 2.中间深蓝色部分,为Journal Node,其为一个集群,用于提供高可用的共享文件存 ...

  2. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  3. HDFS essay 2 - Clarify Name Node / Checkpoint Node/ Backup Node

    为什么想用英文写了?我获取知识.技术的大部分途径都是通过英文,所以按照自己的理解用英文写下来也比较容易,另外,很多term都是不能翻译的,如果要持续学习技术和知识,那就不但要习惯去阅读,听,还要写,说 ...

  4. NPM (node package manager) 入门 - 基础使用

    什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...

  5. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  6. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  7. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  8. 高大上的微服务可以很简单,使用node写微服务

    安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...

  9. 构建通用的 React 和 Node 应用

    这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...

  10. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

随机推荐

  1. Java类加载机制深度分析

    转自:http://my.oschina.net/xianggao/blog/70826 参考:http://www.ibm.com/developerworks/cn/java/j-lo-class ...

  2. Hibernate查询方法总结

    1. HQL查询 HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询.可以使用HQL查询具有继承.多态和关 联关系的数据.在检索 ...

  3. Jsp学习(2)

    Jsp的三大指令 (1).include 作用:相当于把当前页面去包含页面 语法: <%@include file="/common/test.jsp" %> 实例如下 ...

  4. 去掉搜狗拼音烦人的x+;进入搜狗搜索

  5. 无法定位序数XX于动态链接库XX.dll的解决的方法

    问题阐述: 开发环境:VS2008 使用RELEASE生成了可执行文件,发如今某些电脑上能够正常执行,但在部分电脑中执行失败提示:无法定位序数8523于动态链接库mfc90.dll 在网上查找了一些资 ...

  6. [D3] 8. Margins

    If you want ot add margins, should append graphics container in svg var svg = d3.select('#chartArea' ...

  7. linux下so动态库一些不为人知的秘密 系列

    http://blog.chinaunix.net/uid-27105712-id-3313293.html http://www.cnblogs.com/gulvzhe/archive/2012/0 ...

  8. 非常全面的java基础笔试题

    下面是java基础笔试题,当时我去笔试,做了1个小时(80道选择题,后面的简答题就没时间做了),结果很吓人,太挫了,最后被面试官忽悠去培训去了,呵呵.我偷偷把面试题弄了下来,用来学习吧,也希望能对你们 ...

  9. HTTP的报文格式,GET和POST的区别

    1.HTTP报文格式 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文: 一个HTTP请求报文由请求行( ...

  10. C#实现Ruby的负数索引器

    public class InvertibleList<T> : List<T> { public new T this[int index] { get { ) return ...