摘自:http://5276605.blog.51cto.com/5266605/1423288
摘自:http://www.cnblogs.com/ggjucheng/archive/2012/04/18/2454693.html
在启动Hadoop时,NameNode节点上会默认启动一个SecondaryNameNode进程,使用JSP命令可以查看到。SecondaryNameNode光从字面上理解,很容易让人认为是NameNode的热备进程。其实不是,SecondaryNameNode是HDFS架构中的一个组成部分。它并不是元数据节点出现问题时的备用节点,它和元数据节点负责不同的事情。
1、SecondaryNameNode节点的用途:
简单的说,SecondaryNameNode节点的主要功能是周期性将元数据节点的命名空间镜像文件和修改日志进行合并,以防日志文件过大。
要理解SecondaryNameNode的功能,首先我们先来了解下NameNode的主要工作:
2、NameNode节点的主要工作:
NameNode的主要功能之一是用来管理文件系统的命名空间,其将所有的文件和文件目录的元数据保存在一个文件系统树中。为了保证交互速度,NameNode会在内存中保存这些元数据信息,但同时也会将这些信息保存到硬盘上进行持久化存储,通常会被保存成以下文件:命名空间镜像文件(fsimage)和修改日志文件(edits)。下图是NameNode节点上的文件目录结构:
fsimage文件,也即命名空间映像文件,是内存中的元数据在硬盘上的checkpoint,它是一种序列化的格式,并不能够在硬盘上直接修改。
有了这两个文件后,Hadoop在重启时就可以根据这两个文件来进行状态恢复,fsimage相当于一个checkpoint,所以当Hadoop重启时需要两个文件:fsimage+edits,首先将最新的checkpoint的元数据信息从fsimage中加载到内存,然后逐一执行edits修改日志文件中的操作以恢复到重启之前的最终状态。
Hadoop的持久化过程是将上一次checkpoint以后最近一段时间的操作保存到修改日志文件edits中。
这里出现的一个问题是edits会随着时间增加而越来越大,导致以后重启时需要花费很长的时间来按照edits中记录的操作进行恢复。所以Hadoop用到了SecondaryNameNode,它就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的。
3、SecondaryNameNode工作流程:
-
SecondaryNameNode节点通知NameNode节点生成新的日志文件,以后的日志都写到新的日志文件中。
-
SecondaryNameNode节点用http get从NameNode节点获得fsimage文件及旧的日志文件。
-
SecondaryNameNode节点将fsimage文件加载到内存中,并执行日志文件中的操作,然后生成新的fsimage文件。
-
SecondaryNameNode节点将新的fsimage文件用http post传回NameNode节点上。
-
NameNode节点可以将旧的fsimage文件及旧的日志文件,换为新的fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,写入此次checkpoint的时间。
-
这样NameNode节点中的fsimage文件保存了最新的checkpoint的元数据信息,日志文件也重新开始,不会变的很大了。
-
流程图如下所示:
4、SecondaryNameNode运行在另一台非NameNode的 机器上
SecondaryNameNode进程默认是运行在NameNode节点的机器上的,如果这台机器出错,宕机,对恢复HDFS文件系统是很大的灾难,更好的方式是:将SecondaryNameNode的进程配置在另外一台机器 上运行。至于为什么要将SNN进程运行在一台非NameNode的 机器上,这主要出于两点考虑:
可扩展性: 创建一个新的HDFS的snapshot需要将namenode中load到内存的metadata信息全部拷贝一遍,这样的操作需要的内存就需要 和namenode占用的内存一样,由于分配给namenode进程的内存其实是对HDFS文件系统的限制,如果分布式文件系统非常的大,那么namenode那台机器的内存就可能会被namenode进程全部占据。
容错性: 当snn创建一个checkpoint的时候,它会将checkpoint拷贝成metadata的几个拷贝。将这个操作运行到另外一台机器,还可以提供分布式文件系统的容错性。
5、配置将SecondaryNameNode运行在另一台机器上:
HDFS的一次运行实例是通过在namenode机器上的$HADOOP_HOME/bin/start-dfs.sh( 或者start-all.sh ) 脚本来启动的。这个脚本会在运行该脚本的机器上启动 namenode进程,而slaves机器上都会启动DataNode进程,slave机器的列表保存在 conf/slaves文件中,一行一台机器。并且会在另外一台机器上启动一个SecondaryNameNode进程,这台机器由conf/masters文件指定。所以,这里需要严格注意, conf/masters 文件中指定的机器,并不是说jobtracker或者namenode进程要 运行在这台机器上,因为这些进程是运行在 launch bin/start-dfs.sh或者 bin/start-mapred.sh(start-all.sh)的机器上的。所以,masters这个文件名是非常的令人混淆的,应该叫做secondaries会比较合适。然后,通过以下步骤:
*注:本文基于0.20.2配置测试,0.21以后已改成Checkpoint Node和Backup Node
一、配置
1. 在masters文件中添加 Secondary节点的主机名。
*注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和tasktracker,namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定
2. 修改hdfs-site.xml文件
<property>
<name>dfs.http.address</name>
<value>${your-namenode}:50070</value>
<description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>${your-secondarynamenode}:50090</value>
<description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
</property>
*注:
实际上dfs.http.address只在secondary设置,dfs.secondary.http.address只在namenode上设置即可,为了便于管理,集群所有机器同样配置
采用默认端口(namenode:50070,secondary:50090)时可以省略该配置
3. 修改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>
<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>fs.checkpoint.dir</name>
<value>${Hadoop.tmp.dir}/dfs/namesecondary</value>
<description>Determines where on the local filesystem the DFS secondary namenode should store the temporary images to merge.If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy.</description>
</property>
*注:该配置在secondary设置即可,为了便于管理,集群所有机器同样配置
6、hadoop 根据SecondaryNameNode恢复Namenode
1) 删除dfs.name.dir所指向的文件夹,这里是/data/work/hdfs/name
[root@master name]# rm -rf *
删除name目录下的所有内容,但是必须保证name这个目录是存在的
2)从secondarynamenode远程拷贝namesecondary文件到namenode的namesecondary
[root@master hdfs]# scp -r slave-001:/data/work/hdfs/namesecondary/ ./
3)启动namenode
[root@master /data]# hadoop namenode –importCheckpoint
正常启动以后,屏幕上会显示很多log,这个时候namenode就可以正常访问了
4) 检查
使用hadoop fsck /user命令检查文件Block的完整性
hadoop fsck /
5)停止namenode,使用crrl+C或者会话结束
6)删除namesecondary目录下的文件(保存干净)
[root@master namesecondary]# rm -rf *
7)正式启动namenode
[root@master bin]# ./hadoop-daemon.sh start namenode
恢复工作完成,检查hdfs的数据
8) balancer
在使用start-balancer.sh时,
默认使用1M/S(1048576)的速度移动数据(so slowly...)
修改hdfs-site.xml配置,这里我们使用的是20m/S
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>20971520</value>
<description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
</property>
然后结果是导致job运行变得不稳定,出现一些意外的长map单元,某些reduce时间处理变长(整个集群负载满满的情况下,外加20m/s的balance),据说淘宝的为10m/s,需要调整后实验,看看情况如何。
hadoop balancer -threshold 5
相关推荐
namenode 的恢复是 Hadoop 集群的关键组件之一。通过修改配置文件、重启 Hadoop 和恢复 namenode,可以确保 namenode 的可靠性和可用性。同时,secondarynamenode 的存在也可以确保 namenode 的高可用性。
secondarynamenode并非namenode的热备份,它不会直接处理客户端的请求,其主要功能是定期合并namenode的编辑日志(edits)和命名空间镜像(FSImage),以防止编辑日志过大,减轻namenode的工作压力,并提供一种恢复...
### Hadoop运行痕迹追踪详解 #### 一、引言 Hadoop作为一种强大的分布式计算框架,在大数据处理领域扮演着举足轻重的角色。然而,随着其功能的不断...希望本文的内容能够对您在Hadoop的学习和使用过程中有所帮助。
- SecondaryNameNode并不是NameNode的热备份,它的主要作用是帮助合并编辑日志,以减少NameNode重启时加载元数据的时间。 处理大数据问题时,需要有合适的算法。例如,处理1TB文件查找重复行的问题,可以采用hash...
为了恢复 NameNode 节点,需要使用 SecondaryNameNode 节点上的备份数据,并将其恢复到 NameNode 节点上。 HDFS 中 NameNode 节点的配置、备份和恢复是非常重要的, SecondaryNameNode 节点的配置和备份策略可以...
在Hadoop大数据存储系统中,HDFS(Hadoop Distributed File System)是核心组件之一,用于分布式存储大量数据。NameNode是HDFS的核心节点,负责管理文件系统的元数据,包括文件和目录的命名空间以及文件的块映射信息...
NameNode 是 HDFS 的主节点,SecondaryNameNode 是 NameNode 的热备,帮助 NameNode 合并编辑日志,减少 NameNode 启动时间。SecondaryNameNode 应与 NameNode 部署到不同的节点。 HBase 和 MapReduce 关系 ...
格式化文件系统(仅第一次执行即可,不要重复执行):hdfs/hadoop namenode -format 启动hdfs: sbin/start-dfs.sh 验证是否启动成功: jps DataNode SecondaryNameNode NameNode 浏览器访问方式: ...
SecondaryNamenode,NameNode的镜像备份节点 ==Map Reduce== JobTracker,hadoop的Map/Reduce调度器,负责与TackTracker通信分配计算任务并跟踪任务进度。 TaskTracker,启动和管理Map和Reduce子任务的节点。
如果NameNode出现故障,可以使用SecondaryNameNode上的最新fsimage和edits来恢复NameNode的状态,确保服务的连续性。 5. **优化NameNode启动**: - 合并后的fsimage文件使得NameNode在重启时能快速加载整个文件...
Hadoop的服务包括NameNode、DataNode、SecondaryNameNode以及ResourceManager、NodeManager等。启动Hadoop集群,可以依次执行以下命令: ``` start-dfs.sh start-yarn.sh ``` 七、验证Hadoop安装 启动成功后,可以...
本资源摘要信息涵盖了Hadoop题库的主要知识点,包括Hadoop的运行模式、Hadoop的作者、NameNode、DataNode、SecondaryNameNode、HDFS的Block Size、MapReduce、HBase的特点、高可靠性、高性能、面向列、可伸缩性等。...
SecondaryNameNode是NameNode的热备节点,负责合并编辑日志,减少NameNode启动时间。 2. HDFS Block大小 HDFS默认Block大小为64MB,用户可以根据需要进行调整。Block是HDFS的基本存储单元,一个Block可以被分割成...
本资源摘要信息涵盖了Hadoop的多个方面,包括版本、4V特征、大数据存储、HDFS、MapReduce、SecondaryNameNode、Hadoop shell命令、集群管理工具等,非常适合Hadoop初学者和开发者学习和了解Hadoop的相关知识点。
Hadoop2.2.0的HDFS(Hadoop分布式文件系统)高可用性(HA)解决方案是针对Hadoop早期版本中NameNode存在的单点故障问题而设计的。在Hadoop2.0.0之前,HDFS集群中只有一个NameNode,如果NameNode所在机器出现故障,会...
2. **启动Hadoop服务**: 先启动DataNode和SecondaryNameNode,再启动NameNode,最后启动ResourceManager和NodeManager。使用以下命令: ``` hadoop dfsadmin -safemode leave start-dfs.cmd start-yarn.cmd ```...
### Hadoop大数据技术与应用学习重点 #### 一、Hadoop生态圈的常用组件及其功能 Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。Hadoop生态圈由多个组件构成,每个组件都有其特定的功能。 1. **...
2. hadoop-hdfs:HDFS的相关实现,包括NameNode、DataNode、SecondaryNameNode等。 3. hadoop-mapreduce:MapReduce的实现,包括Client、JobTracker、TaskTracker等组件。 4. hadoop-yarn:YARN的相关实现,包括...
HDFS(Hadoop Distributed File System)是 Hadoop 的核心组件之一,负责存储和管理大规模数据。HDFS 由 NameNode、DataNode 和 SecondaryNameNode 组成。 1. NameNode(nn):负责管理元数据,维护文件系统的目录...
而掌握Hadoop Shell命令是进行数据管理和操作的基础技能之一。 ### Hadoop Shell 命令详解 #### 1. **hadoop fs** `hadoop fs` 命令是访问HDFS(Hadoop分布式文件系统)的主要方式,提供了与文件和目录相关的各种...