HDFS NN,SNN,BN和HA

转自 http://www.linuxidc.com/Linux/2012-04/58182p3.htm

前言
保证HDFS高可用是Hadoop被推广以来很多技术人员一直关心的问题,通过搜索引擎搜索也可以得到很多的方案。恰逢HDFS Federation出炉,本文将一些涉及到有关NameNode、SecondaryNameNode、BackupNode的含义与区别,以及HDFS HA框架做一个总结。除此之外,文章的最后,将介绍Hadoop-0.23.0如何配置NameNode、SecondaryNameNode、以及BackupNode。

1、HDFS元数据服务器如何工作?

Namenode在第一次启动时刻之前,进行格式化,$bin/hdfs namenode -format -clusterid yourid 按照需求生成VERSION:例如我Hadoop0.23.0初探2中使用gb17作为namenode,在format之后会在dfs.hadoop.name.dir目录中生成如下的VERSION
$ cat /opt/jiangbing/hdfs23/current/VERSION
#Thu Dec 08 16:27:30 CST 2011
namespaceID=1787450988
clusterID=klose
cTime=0
storageType=NAME_NODE
blockpoolID=BP-950324238-10.10.102.17-1322483515854
layoutVersion=-38
可以看到比之前的Hadoop-0.21.0的HDFS中多了一个blockpoolID和clusteID,VERSION有点像NameNode的身份证。每次-format就代表NameNode出生了。
在-format同时,会生成fsimage_**和edits_**两个文件。使用$bin/hdfs namenode会按照正常的方式启动NameNode。
fsimage:元数据的snapshot
editsLog:元数据的操作
当NameNode启动时,会从镜像文件 fsimage 中读取HDFS的状态,并且把edits文件中记录的操作应用到fsimage,也就是合并到fsimage中去。合并后更新fsimage的HDFS状态,清空的edits文件来记录文件系统的变化。因此在NameNode启动过程中,namenode处于safe mode模式,只能提供读操作,不提供写操作,等启动完成会从safe mode模式退出。因此,NameNode在正常情况下不会合并edits到fsimage上,作checkpoint的。这会造成系统edits文件越来越大。这样当需要重启NameNode时,你会发现启动过程会非常长。

2、SecondaryNameNode不是NameNode热备

SNN主要是备份NN的文件信息,不备份数据块的信息。它从NN上获取fsimage和edits文件,将fsimage与edits日志合并成一个新的fsimage,再将新的fsimage上传给NN,这样使得 NN中的edits不会一直是递增的,可以使NN的重启过程变得轻松。
SNN的主要工作在 doCheckpoint()方法中,每隔一段时间会启动检查点一次,是由两个配置参数来控制的:
fs.checkpoint.period,指定连续两次检查点的最大时间间隔,默认值是1小时。
fs.checkpoint.size 定义了edits日志文件的最大值,一旦超过这个值会导致强制执行检查点(即使没到检查点的最大时间间隔)。默认值是 64MB。

3、BackupNode强调实时同步

这个结点的模式有点像mysql中的主从结点复制功能,NN可以实时的将日志传送给BN ,而SNN是每隔一段时间去NN下载fsimage和edits 文件,而BN是实时的得到操作日志,然后将操作合并到fsimage里。
在NN里提供了二个日志流接口: EditLogOutputStream 和 EditLogInputStream 。即当NN有日志时,不仅会写一份到本地edits的日志文件,同时会向BN的网络流中写一份,当流缓冲达到阀值时,将会写入到BN结点上, BN收到后就会进行合并操作,这样来完成低延迟的日志复制功能。

4、BN与SNN的区别

1)获取NN中元数据的方式不同。
NN会把fsimage和edits更新flush到BN的机器,实时性好。这样在NN宕机之后,BN拥有了基本一致的元数据。SNN是通过http server获取fsimage和edits的内容,因此,数据完成程度受到了fetch文件频率的影响。
2)对checkpoint结果的处理方式不同。
SNN会主动把checkpoint之后的fsimage发送给NN,而BN只在本地作checkpoint,存在本地的dfs.name.dir中,其实它就相当于一个NameNode的热备,只是DataNode还没有认识到它的存在,如果你是程序员的话,你应该知道怎么办。:-)

5、一些HDFS HA的方案
1)对于dfs.name.dir目录设置RAID。
2)设置多个dfs.name.dir目录,将其中的一个目录设置为其它节点通过NFS挂载到该机器的目录。这样会同时写两份同样的数据。这样绑定一个ZooKeeper来跟踪NameNode的状况,在主NameNode宕机之后,
StandbyNameNode切换成正常的NameNode,为了简单,standbyNameNode开始只需监听Zookeeper的事件即可,在出错之后,迅速正常启动一个NameNode。DataNode在链接失效之后,要从Zookeeper获得更新的NameNode的URL,这块需要一点编码。:-),如果一点都不动,我们就找不到工作了...下图是一个示意图。

3)另外是一些做法稍微复杂一些。请参阅:
http://www.cloudera.com/blog/2009/07/hadoop-ha-configuration/
http://hadoopblog.blogspot.com/2010/02/hadoop-namenode-high-availability.html

6、Hadoop-0.23.0 HDFS中SNN、BN的配置
1)SNN的配置,这个非常简单,修改所有机器下的conf/hdfs-site.xml文件:
${HDFS_CONF_DIR}/hdfs-site.xml

<configuration>  <property>    <name>dfs.namenode.name.dir</name>    <value>file:///opt/jiangbing/hdfs23</value>  </property>  <property>    <name>dfs.federation.nameservices</name>    <value>ns1,ns2</value>  </property>  <property>    <name>dfs.namenode.rpc-address.ns1</name>    <value>gb17:9000</value>  </property>  <property>    <name>dfs.namenode.http-address.ns1</name>    <value>gb17:23001</value>  </property>  <property>    <name>dfs.namenode.secondary.http-address.ns1</name>    <value>gb17:23002</value>  </property>  <property>    <name>dfs.namenode.rpc-address.ns2</name>    <value>gb18:9000</value>  </property>  <property>    <name>dfs.namenode.http-address.ns2</name>    <value>gb18:23001</value>  </property>  <property>    <name>dfs.namenode.secondary.http-address.ns2</name>    <value>gb18:23002</value>  </property>  <property>    <name>fs.checkpoint.period</name>    <value>600</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>

</configuration> 

如果需要的话,还可以设置dfs.name.checkpoint.dir的路径,默认以hadoop.tmp.dir为目录建立对应的checkpoint目录。
其余配置与Hadoop0.23.0初探2阐述的内容相同,使用sbin/start-dfs.sh启动即可。
2)sbin/start-dfs.sh不会从配置文件中读取backupNode的信息,然后启动它。因此,在设置dfs的内容处,需要在一个节点单独的配置。请注意,设置backupNode时,它的配置文件conf/hdfs-site.xml有了一点差别,其实所有的节点的配置文件都设置成backupNode的节点的情况也没有问题,因为脚本不会独立地启动backupNode。

<configuration>  <property>     <name>dfs.namenode.name.dir</name>     <value>file:///opt/jiangbing/hdfs23/backup</value>   </property> <property>     <name>dfs.federation.nameservice.id</name>     <value>ns1</value>   </property> <property>   <name>dfs.namenode.backup.address.ns1</name>   <value>gb22:50100</value>   <description>     The backup node server address and port.     If the port is 0 then the server will start on a free port.   </description> </property>    <property>   <name>dfs.namenode.backup.http-address.ns1</name>   <value>gb22:50105</value>   <description>     The backup node http server address and port.     If the port is 0 then the server will start on a free port.   </description> </property> <property>    <name>dfs.federation.nameservices</name>    <value>ns1,ns2</value>  </property>  <property>    <name>dfs.namenode.rpc-address.ns1</name>    <value>gb17:9000</value>  </property>  <property>    <name>dfs.namenode.http-address.ns1</name>    <value>gb17:23001</value>  </property>  <property>    <name>dfs.namenode.secondary.http-address.ns1</name>    <value>gb18:23002</value>  </property>  <property>    <name>dfs.namenode.rpc-address.ns2</name>    <value>gb18:9000</value>  </property>  <property>    <name>dfs.namenode.http-address.ns2</name>    <value>gb18:23001</value>  </property>  <property>    <name>fs.checkpoint.period</name>        <value>60</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> <property>     <name>dfs.namenode.secondary.http-address.ns2</name>    <value>gb17:23002</value></property></configuration> 

这里设置gb22作为ns1的namenode的backupNode,注意这里backupNode与NameNode共有NameNode.dir的目录,这也可以认为BackupNode就是NameNode的孪生兄弟,这是这个兄弟不负责外面的哪些事儿(DataNode的rpc链接)。
在gb22上启动backupNode,$bin/hdfs namenode -backup
通过$bin/hadoop fs -ls hdfs://gb22:50100 可以获得与$bin/hadoop fs -ls hdfs://gb17:9000
一样的内容,元数据内容在gb17,gb22完成了。这样在gb17宕机之后,只需停掉gb22 backupNode,重新配置一下ns1的位置,这样服务就可以继续了。其实这是一个不用任何代码开发的方案。但是需要暂停一下服务。对于这样的HA,你们可以接受吗?:-)

时间: 2024-10-30 23:40:16

HDFS NN,SNN,BN和HA的相关文章

三、zookeeper--实现NN和RM的HA

一.hdfs namenode HA 1.概述 ? 在hadoop1.0的时候,hdfs集群中namenode存在单点故障的问题,当namenode不可用的时候,就会导致整个hdfs集群服务不可用.另外如果需要临时对namenode进行设计或者其他操作时,停掉namenode之后,hdfs集群也无法使用了.? 通过HA的方式,可以一定程度上解决单点故障问题. 2.namenode HA工作要点 1)元数据管理方式需要改变:内存中各自保存一份元数据:Edits日志只有Active状态的nameno

hadoo分布式安装

前骤: Hadoop Cluster中的Daemon HDFS: NameNode,NN SecondaryNode,SNN DataNode:DN /data/hadoop/hdfs/{nn,snn,dn} nn:fsimage,editlog//镜像和编辑日志 //hdfs的NN是在内存中存放数据,不断根据文件状态改变,修改元数据 fsimage存放了:文件分割后存放在哪些node上 //文件元数据的改变,会写入到editllog中,最后写入到fsimage中,因此下次NN重启后数据依然存在

Hadoop安装杂记(1)

一.Hadoop基础 1.伪分布式模型(单节点) 1.1 配置centos7默认JDK1.7的环境变量 [[email protected] ~]# vim /etc/profile.d/java.sh i export JAVA_HOME=/usr [[email protected] ~]# source /etc/profile.d/java.sh 安装jdk-devl包: [[email protected] ~]# yum install java-1.7.0-openjdk-deve

Hadoop安装杂记(2)

一.分布式模型 1.环境准备 准备4个节点,master1为主控节点(NameNode.SecondaryNameNode.ResourceManager),master2-4作为数据节点(DataNode.NodeManager).并做好ntp时间同步 1.1 每个节点配置JAVA环境 [[email protected] ~]# vim /etc/profile.d/java.sh export JAVA_HOME=/usr [[email protected] ~]# scp /etc/p

HDFS的HA

为什么要用集群 在企业中主要使用集群 在学习的过程中使用伪分布式即可,就是单点 HDFS中的 NN SNN DN YARN 的 RM 老大 NM 每个组件只有一个即可 如果nn挂了就不能再继续对外提供服务,例如客户端请求的读写,put get那些. 为了解决这个问题,企业一般都会准备两台nn,对外提供服务的只有一台,处于active状态,另一台是standby状态,进行实时备份随时准备从standby状态切换到active状态 同时,拥有两台nn基本上就不需要snn了,因为nn会进行实时备份,而

3.配置HDFS HA

安装zookeeper下载zookeeper编辑zookeeper配置文件创建myid文件启动zookeeper配置HDFS HA配置手动HA配置自动HA启动HDFS HA namenode负责管理整个hdfs集群,如果namenode故障则集群将不可用.因此有必须实现namenode高可用. hdfs的高可用原理参考: HADOOP(二):hdfs 高可用原理 zookeeper简介: zookeeper集群安装 安装zookeeper 下载zookeeper 下载zookeeper并解压到/

[转]HDFS HA 部署安装

1. HDFS 2.0 基本概念 相比于 Hadoop 1.0,Hadoop 2.0 中的 HDFS 增加了两个重大特性,HA 和 Federaion.HA 即为 High Availability,用于解决 NameNode 单点故障问题,该特性通过热备的方式为主 NameNode 提供一个备用者,一旦主 NameNode 出现故障,可以迅速切换至备 NameNode, 从而实现不间断对外提供服务.Federation 即为“联邦”,该特性允许一个 HDFS 集群中存在 多个 NameNode

kafka-connect-hdfs连接hadoop hdfs时候,竟然是单点的,太可怕了。。。果断改成HA

2017-08-16 11:57:28,237 WARN [org.apache.hadoop.hdfs.LeaseRenewer][458] - <Failed to renew lease for [DFSClient_NONMAPREDUCE_-1756242047_26] for 30 seconds. Will retry shortly ...> org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyE

HDFS中高可用性HA的讲解

HDFS中高可用性HA的讲解 HDFS Using QJM HA使用的是分布式的日志管理方式 一:概述 1.背景 如果namenode出现问题,整个HDFS集群将不能使用. 是不是可以有两个namenode呢 一个为对外服务->active 一个处于待机->standby 他们的之间共享的元数据交 nameservice 2.HDFS HA的几大中重点 1)保证两个namenode里面的内存中存储的文件的元数据同步 ->namenode启动时,会读镜像文件 2)变化的记录信息同步 3)日