分享

hadoop如何恢复namenode

nettman 2014-2-25 23:49:45 发表于 问题解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 17446
可以带着下面问题来阅读
1.fs.checkpoint.period表示什么意思?
2.fs.checkpoint.size表示什么意思?
3.如何模拟namenode宕机?
4.那个命令可以检查文件Block的完整性 ?
扩展:
安全模式的作用是什么?
如何离开安全模式?



1.修改conf/core-site.xml,增加
  1. <property>  
  2.         <name>fs.checkpoint.period</name>   
  3.         <value>3600</value>   
  4.         <description>The number of seconds between two periodic checkpoints.  </description>  
  5. </property>  
  6. <property>   
  7.         <name>fs.checkpoint.size</name>   
  8.         <value>67108864</value>   
  9.         <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>  
  10. </property>  
  11.   
  12. <property>   
  13.         <name>fs.checkpoint.dir</name>   
  14.         <value>/data/work/hdfs/namesecondary</value>   
  15.         <description>Determines where on the local filesystem the DFS secondary      name node 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>  
  16. </property>  
复制代码
fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。
fs.checkpoint.size表示一次记录多大的size,默认64M

2.修改conf/hdfs-site.xml,增加
  1. <property>   
  2.         <name>dfs.http.address</name>   
  3.         <value>master:50070</value>   
  4.         <description>    The address and the base port where the dfs namenode web ui will listen on.    If the port is 0 then the server will start on a free port.  </description>  
  5. </property>
复制代码
0.0.0.0改为namenode的IP地址

3.重启hadoop,然后检查是否启动是否成功。
登录secondarynamenode所在的机器,输入jps查看secondarynamenode进程
进入secondarynamenode的目录/data/work/hdfs/namesecondary
正确的结果:

如果没有,请耐心等待,只有到了设置的checkpoint的时间或者大小,才会生成。

4.恢复
制造namenode宕机的情况
1) kill 掉namenode的进程
  1. [root@master name]# jps  
  2. 11749 NameNode  
  3. 12339 Jps  
  4. 11905 JobTracker  
  5. [root@master name]# kill 11749  
复制代码
2)删除dfs.name.dir所指向的文件夹,这里是/data/work/hdfs/name
  1. [root@master name]# rm -rf *  
复制代码
删除name目录下的所有内容,但是必须保证name这个目录是存在的

3)从secondarynamenode远程拷贝namesecondary文件到namenode的namesecondary
  1. [root@master hdfs]# scp -r slave-001:/data/work/hdfs/namesecondary/ ./  
复制代码
4)启动namenode
  1. [root@master /data]# hadoop namenode –importCheckpoint  
复制代码
正常启动以后,屏幕上会显示很多log,这个时候namenode就可以正常访问了

5)检查
使用hadoop fsck /user命令检查文件Block的完整性

6)停止namenode,使用crrl+C或者会话结束

7)删除namesecondary目录下的文件(保存干净)
  1. [root@master namesecondary]# rm -rf *  
复制代码
8)正式启动namenode
  1. [root@master bin]# ./hadoop-daemon.sh  start namenode  
复制代码
恢复工作完成,检查hdfs的数据



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,需要调整后实验,看看情况如何。
  1. hadoop balancer -threshold 5  
复制代码
安全模式
有两个方法离开这种安全模式:
(1)修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。
dfs.safemode.threshold.pct(缺省值0.999f)
HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。

(2)hadoop dfsadmin -safemode leave命令强制离开
dfsadmin -safemode value 参数value的说明:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get -  返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。

加微信w3aboutyun,可拉入技术爱好者群

已有(6)人评论

跳转到指定楼层
fanbells 发表于 2014-3-10 17:00:32
我问一下,我将namenode进程kill掉之后,通过hadoop namenode –importCheckpoint 启动namenode时报:ERROR namenode.FSNamesystem: FSNamesystem initialization failed.
java.io.IOException: Cannot import image from a checkpoint.  NameNode already contains an image in /opt/hadoop/name
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:320)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
14/03/10 16:55:00 ERROR namenode.NameNode: java.io.IOException: Cannot import image from a checkpoint.  NameNode already contains an image in /opt/hadoop/name
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:320)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:395)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:299)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:569)        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1479)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1488)
你遇到过这种情况吗?
回复

使用道具 举报

pig2 发表于 2014-3-10 20:20:20
本帖最后由 pig2 于 2014-3-10 20:40 编辑
fanbells 发表于 2014-3-10 17:00
我问一下,我将namenode进程kill掉之后,通过hadoop namenode –importCheckpoint 启动namenode时报:ERROR ...

你可以参考
NameNode的format操作做了什么

上面的img文件已经存在了,看一下在这个路径下的/opt/hadoop/name的img文件给清空一下(不过清空前,确保没有风险)。
回复

使用道具 举报

fanbells 发表于 2014-3-11 15:20:08
问题已解决。
解决方法:
      将SecondaryNameNode机器下的dfs文件全部复制到namenode机器下,清空了namenode原来name目录下的文件,通过./hadoop namenode -importCheckpoint来运行正常了。注意:不是将dfs文件内容复制到name目录下,而是name的上一层,也就是说name目录和dfs目录是平级的关系。
回复

使用道具 举报

pig2 发表于 2014-3-11 15:23:34
fanbells 发表于 2014-3-11 15:20
问题已解决。
解决方法:
      将SecondaryNameNode机器下的dfs文件全部复制到namenode机器下,清空了na ...

解决了就好了
回复

使用道具 举报

fanbells 发表于 2014-3-11 15:48:14

追问一下,在namenode挂机后,直接启动namenode,和通过secondarynamenode有什么区别吗?最后的结果都是启动了namenode,我想直接启动namenode是在原来的数据文件下启动,通过secondarynamenode启动是根据备份的文件启动,难道说namenode下的文件和secondarynamenode下的文件不一致,secondarynamenode下的数据多???
回复

使用道具 举报

pig2 发表于 2014-3-11 16:10:25
本帖最后由 pig2 于 2014-3-11 16:12 编辑
fanbells 发表于 2014-3-11 15:48
追问一下,在namenode挂机后,直接启动namenode,和通过secondarynamenode有什么区别吗?最后的结果都是 ...
具体可以看hadoop详细了解5个进程的作用,从里面摘取一部分内容:
3.1NameNode的目录结构如下:

${dfs.name.dir}/current/VERSION
                                         /edits
                                         /fsimage
                                         /fstime

3.2Secondary NameNode的目录结构如下:

${fs.checkpoint.dir}/current/VERSION
                                                /edits
                                                /fsimage
                                                /fstime
                                /previous.checkpoint/VERSION
                                                                      /edits
                                                                      /fsimage
                                                                      /fstime





上面我们看到他们的目录结构是一样的,而且Secondary NameNode,还有checkpoint目录。
对于namenode宕机,因为你遇到的情况可能特殊一些,没有丢失数据,如果一旦服务器损坏,这些时候namenode就不能在启动了。所以只能通过Secondary NameNode来恢复了。
其实Secondary NameNode恢复也有可能出现数据丢失的现象,也就是所谓的单点问题Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详细介绍AvatarNode。hadoop 1.x没有很好的解决这个问题,也就是说即使使用Secondary NameNode恢复,也可能存在丢失数据的现象。后面的版本有所改变,比如多个master。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条