hadoop1.x下的NameNode与SecondaryNameNode

来源:互联网 发布:java中调用webservice 编辑:程序博客网 时间:2024/05/24 03:23

hadoop1.x下的NameNode与SecondaryNameNode


1、NameNode与SecondaryNameNode简介:

1 )Namenode
• Master
• 管理HDFS的名称空间
• 管理数据块映射信息
• 配置副本策略
• 处理客户端读写请求

2)Secondary NameNode
• 并非NameNode的热备;
• 辅助NameNode,分担其工作量;
• 定期合并fsimage和fsedits,推送给NameNode;
• 在紧急情况下,可辅助恢复NameNode。


3)NameNode与SecondaryNameNode的联系

NameNode 两个重要文件
fsimage :元数据镜像文件(保存文件系统的目录树)
edits :元数据操作日志(针对目录树的修改操作)
元数据镜像
内存中保存一份最新的
内存中的镜像=fsiamge+edits
定期合并fsiamge 与edits
Edits 文件过大将导致NameNode 重启速度慢
Secondary Namenode


HDFS架构图




2、Hadoop元数据的持久化

在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文件系统。





3、基本配置

1)配置NameNode

core-site.xml配置主节点

<property>    <name>fs.default.name</name>    <value>hdfs://hadoop-master.ganymede:9000</value> </property> <property>     <name>hadoop.tmp.dir</name>      <value>/home/opt/data/tmp</value> </property> 


2)SecondaryNameNode可配置多个 masters文件,配置相应主机名或者IP即可

masters

hadoop-slave.ganymedehadoop-slave2.ganymede


3)配置SecondaryNameNode

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>



2 0
原创粉丝点击