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. 如何引入一个Schema 文件

    Schema(掌握如何引入一个schema文件)    * 名称空间 : 指的是一个环境,所用的标签来自于哪个环境定义的.    * 掌握引用schema文件:             xml中引入s ...

  2. Servlet小知识点

    1. Sevlet是一个java类,供以其他程序调用,不能独立运行,需要Servlet引擎(Servlet容器)来管理和调度. 2. 服务器启动后,一般只会创建一个Servlet实例对象,init方法 ...

  3. I2C和SCCB协议的小区别和误区

    I2C采用的是7位地址数据,首字节最低位代表读写位,第二字节SUB寄存器高位为1表示自动加subaddress SCCB采用的是8位地址数据,比如0x42,B01000010 使用I2C协议时,第一次 ...

  4. TreeView中节点勾选设置

    本文转载:http://www.cnblogs.com/luxiaoxun/p/3288003.html 很不错的文章:http://www.cnblogs.com/allen0118/archive ...

  5. jbpm6 开发环境搭建

     一.软件下载 1. eclipse       下载地址:http://www.eclipse.org/downloads/ 2.jbpm6.2 Installer       下载地址: ht ...

  6. c# 请问如何将四个RadioButton分成两组?

    WinForm 只要放在同一个容器中的RadioButton 就自动互斥 创建两个panel容器,分别放两个RadioButton 就是两组了

  7. LINUX 文件系统JBD ----深入理解Fsync

    http://www.cnblogs.com/hustcat/p/3283955.html http://www.cnblogs.com/zengkefu/p/5639200.html http:// ...

  8. Unexpected CFBundleExecutable Key

    昨天晚上打包上传的时候报错: ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/xxx ...

  9. PHP如何解决网站大流量与高并发的…

    首先,确认服务器硬件是否足够支持当前的流量. 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻 ...

  10. javascript创建对象的7种方式

    /*1.工厂模式*/ function createPerson(name,age,job) { var o = new object(); o.name = name; o.age = age; o ...