光从字面上来理解,很容易让一些初学者先入为主的认为: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会比较合适。然后,通过以下步骤:
-
将所有想要运行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/下面。
四、恢复
1、配置完成了,如何恢复。首先我们kill掉namenode进程,然后将hadoop.tmp.dir目录下的数据删除掉。制造master挂掉情况。
2、在配置参数dfs.name.dir指定的位置建立一个空文件夹; 把检查点目录的位置赋值给配置参数fs.checkpoint.dir;
启动NameNode,并加上-importCheckpoint。(这句话抄袭的是hadoop-0.20.2/hadoop-0.20.2/docs/cn/hdfs_user_guide.html#Secondary+NameNode,看看文档,有说明)
3、启动namenode的时候采用hadoop namenode –importCheckpoint
五、总结
1、secondarynamenode可以配置多个,master文件里面多写几个就可以。
2、千万记得如果要恢复数据是需要手动拷贝到namenode机器上的。不是自动的(参看上面写的恢复操作)。
3、镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period值
分享到:
相关推荐
了解了namenode和secondarynamenode的工作机制之后,我们可以看到,在Hadoop系统中,通过这样的设计既保证了系统的高可用性,又确保了元数据的稳定性和一致性。这种机制是Hadoop处理大数据时能够保持高效和稳定运行...
在Hadoop大数据存储系统中,HDFS(Hadoop Distributed File System)是核心组件之一,用于分布式存储大量数据。NameNode是HDFS的核心节点,负责管理文件系统的元数据,包括文件和目录的命名空间以及文件的块映射信息...
Hadoop Namenode 是 Hadoop 分布式文件系统的核心组件之一,负责管理文件系统的命名空间。然而,在生产环境中,namenode 的崩溃可能会导致整个集群的不可用。因此,namenode 的恢复是非常重要的。本文将详细介绍 ...
SecondaryNamenode,NameNode的镜像备份节点 ==Map Reduce== JobTracker,hadoop的Map/Reduce调度器,负责与TackTracker通信分配计算任务并跟踪任务进度。 TaskTracker,启动和管理Map和Reduce子任务的节点。
HDFS(Hadoop Distributed File System)是 Hadoop 的核心组件之一,负责存储和管理大规模数据。HDFS 由 NameNode、DataNode 和 SecondaryNameNode 组成。 1. NameNode(nn):负责管理元数据,维护文件系统的目录...
本资源摘要信息涵盖了Hadoop题库的主要知识点,包括Hadoop的运行模式、Hadoop的作者、NameNode、DataNode、SecondaryNameNode、HDFS的Block Size、MapReduce、HBase的特点、高可靠性、高性能、面向列、可伸缩性等。...
启动Hadoop集群:启动Hadoop集群的各个节点,包括NameNode、SecondaryNameNode、DataNode等。 用途: 数据存储和处理:Hadoop可以存储海量数据,并使用MapReduce等编程模型进行数据处理和分析。 数据挖掘和机器学习...
如启动/停止守护进程(如daemonlog)、检查文件系统状态(如fsck)、提交作业(如job)、以及集群管理相关的命令(如balancer、datanode、dfsadmin、jobtracker、namenode、secondarynamenode、tasktracker等)。...
Hadoop 测试题 Hadoop 测试题主要涵盖了 Hadoop ...33. DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode 执行“Hadoop namenode -format”操作格式化磁盘。因此,正确答案是 √。
NameNode 是 HDFS 的主节点,SecondaryNameNode 是 NameNode 的热备,帮助 NameNode 合并编辑日志,减少 NameNode 启动时间。SecondaryNameNode 应与 NameNode 部署到不同的节点。 HBase 和 MapReduce 关系 ...
本篇面试题主要涵盖了Hadoop的基础知识、HDFS(Hadoop Distributed File System)、NameNode、DataNode、Hadoop运行模式、集群管理工具、Hadoop组件的角色以及相关配置等多个方面。 1. HDFS数据存储:DataNode是...
在本例中,集群由1台NameNode(兼SecondaryNameNode,master)、2台DataNode(slave1、slave2)组成。 首先,我们需要在所有节点上安装相同版本的Hadoop,并将其解压到Linux系统指定的目录。使用Xshell等远程连接...
Namenode是HDFS的元数据管理节点,SecondaryNameNode负责备份Namenode的数据,DataNode是HDFS的数据存储节点,HRegionServer是HBase的处理节点。 集群部署时,首先需要确保所有机器的`/etc/hosts`文件正确配置,...
而掌握Hadoop Shell命令是进行数据管理和操作的基础技能之一。 ### Hadoop Shell 命令详解 #### 1. **hadoop fs** `hadoop fs` 命令是访问HDFS(Hadoop分布式文件系统)的主要方式,提供了与文件和目录相关的各种...
- 启动DataNode、NameNode、SecondaryNameNode、TaskTracker和JobTracker,可以通过相应的start-dfs.sh和start-mapred.sh脚本完成。 6. **验证安装**: - 访问Web UI,NameNode的默认端口是50070,JobTracker的...
大数据技术原理与应用期末...涉及到大数据技术的“数据存储和管理”、“数据处理和分析”、“数据隐私保护”等方面,涵盖了Hadoop框架、Hadoop组件、分布式文件系统、NameNode和SecondaryNameNode、HDFS模型等知识点。
- 创建名为`grid`的用户,用于管理Hadoop,为所有主机执行相同配置。 - 在hosts文件中添加所有节点的主机名和IP地址,以便节点间能互相识别。 3. **SSH信任关系配置** - 生成SSH密钥对,使用`ssh-keygen –t rsa...
`start-all.sh` 是一个脚本文件,用于启动Hadoop集群中的所有守护进程,包括NameNode、SecondaryNameNode、DataNode等。通常,在配置好Hadoop环境后,会通过该脚本来启动整个集群。 - **命令语法**: ```bash ./...
Namenode负责管理文件系统的命名空间,SecondaryNamenode负责辅助NameNode的管理工作,而Datanode则负责存储实际的数据。 在配置Hadoop集群时,每一步都需要严格按照文档中的指导进行,以确保每个组件都能正确安装...