原创:
第一部分: 如何设置Secondary NameNode节点(单独的)
1. 在masters文件中添加 Secondary节点的主机名。
2. 修改hdfs-default.xml 文件
<property>
<name>dfs.http.address</name>
<value>client148.hadoop.local:50070</value>
</property> (NameNode节点开放的HTTP服务,是由Secondary 节点获取fsimage ,edits 文件的通道)
<property>
<name>dfs.secondary.http.address</name>
<value>client147.hadoop.local:50090</value>
</property> (Secondary 节点开放的HTTP服务,是由NameNode节点获取新的fsimage 文件的通道)
如果dfs.secondary.http.address 第二项不设置会产生一下错误:
17 13:31:57,434 WARN org.mortbay.log: /getimage: java.io.IOException: GetImage failed. java.net.ConnectException: Connection refused
更详细的错误描述: http://blog.csdn.net/chlaws/article/details/6981574
两个参数:
<name>fs.checkpoint.period</name>
<value>3600</value> // fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时
<name>fs.checkpoint.size</name>
<value>67108864</value> // fs.checkpoint.size定义了edits日志文件的最大值,一旦超过这个值会导致强制执行备份(即使没到检查点的最大时间间隔)。默认值是64MB。
第二部分: NameNode节点无法恢复的时候,如何新建一个NameNode节点
1. 新建 dfs.name.dir 一个目录
例如: mkdir {/opt/data/test}
2. 把SecondaryNameNode节点中 {fs.checkpoint.dir} 的所有内容拷贝到新的NameNode节点的{fs.checkpoint.dir} 目录中
<name>fs.checkpoint.dir</name>
<value>${hadoop.tmp.dir}/dfs/namesecondary</value> // 默认设置
3. 在新的NameNode节点中执行命令 hadoop namenode -importCheckpoint
4. 检查 {dfs.name.dir} 此目录中是否有了文件,hadoop fsck / 查看文件内容是否正常。
如果一切OK,NameNode节点恢复正常。 Good Luck!
如对以上有疑问或建议请Mail to: biansutao# gmail # com
重要提示: 在一小间隔中间添加到HDFS中的数据将在恢复数据的时候丢失。
如果想减少这种数据丢失,可以把Checkpoint 的时间调低一点,比方说5分钟,15分钟。
这个需要综合考虑数据量和集群规模。
通过设置 {dfs.name.dir} 设置多个目录(例如:NFS)可以保存NameNode节点的fsimage和edits文件。
这样减少数据的损失。
<property>
<name>dfs.name.dir</name>
<value>${hadoop.tmp.dir}/dfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table(fsimage). If this is a comma-delimited list
of directories then the name table is replicated in all of the
directories, for redundancy. </description>
</property>