zoukankan      html  css  js  c++  java
  • 从 secondarynamenode 中恢复 namenode

    1.修改 conf/core-site.xml,增加

    Xml代码从 secondarynamenode 中恢复 namenode

    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. <property>
    12. <name>fs.checkpoint.dir</name>
    13. <value>/data/work/hdfs/namesecondary</value>
    14. <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>
    15. </property>

    fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。

    fs.checkpoint.size表示一次记录多大的size,默认64M

    2.修改 conf/hdfs-site.xml,增加

    Xml代码从 secondarynamenode 中恢复 namenode

    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 
    正确的结果: 
    从 secondarynamenode 中恢复 namenode

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

    4.恢复 
    制造namenode宕机的情况 
    1) kill 掉namenode的进程

    Java代码从 secondarynamenode 中恢复 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

    Java代码从 secondarynamenode 中恢复 namenode

    1. [root@master name]# rm -rf *

    删除name目录下的所有内容,但是必须保证name这个目录是存在的

    3)从secondarynamenode远程拷贝namesecondary文件到namenode的namesecondary

    Java代码从 secondarynamenode 中恢复 namenode

    1. [root@master hdfs]# scp -r slave-001:/data/work/hdfs/namesecondary/ ./

    4)启动namenode

    Java代码从 secondarynamenode 中恢复 namenode

    1. [root@master /data]# hadoop namenode –importCheckpoint

    正常启动以后,屏幕上会显示很多log,这个时候namenode就可以正常访问了

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

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

    7)删除namesecondary目录下的文件(保存干净)

    Java代码从 secondarynamenode 中恢复 namenode

    1. [root@master namesecondary]# rm -rf *

    8)正式启动namenode

    Java代码从 secondarynamenode 中恢复 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,需要调整后实验,看看情况如何。

    Java代码从 secondarynamenode 中恢复 namenode

    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 - 等待,一直到安全模式结束。

    • 从 secondarynamenode 中恢复 namenode

    附:

    NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)。当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的edits操作。然后它将新的HDFS状态写入(fsimage)中,并使用一个空的 edits文件开始正常操作。因为NameNode只有在启动阶段才合并fsimage和edits,所以一段时间后日志文件可能会变得非常庞大,特别是对大型的集群。日志文件太大的另一个副作用是下一次NameNode启动会花很长时间。

    Secondary NameNode定期合并fsimage和edits日志,将edits日志文件大小控制在一个限度下。因为内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode运行在不同的机器上。Secondary NameNode通过bin/start-dfs.sh在conf/masters中指定的节点上启动。

    Secondary NameNode的检查点进程启动,是由两个配置参数控制的:

    * fs.checkpoint.period,指定连续两次检查点的最大时间间隔, 默认值是1小时。 
    * fs.checkpoint.size定义了edits日志文件的最大值,一旦超过这个值会导致强制执行检查点(即使没到检查点的最大时间间隔)。默认值是64MB。

    Secondary NameNode保存最新检查点的目录与NameNode的目录结构相同。 所以NameNode可以在需要的时候读取Secondary NameNode上的检查点镜像。

    如果NameNode上除了最新的检查点以外,所有的其他的历史镜像和edits文件都丢失了, NameNode可以引入这个最新的检查点。以下操作可以实现这个功能:

    * 在配置参数dfs.name.dir指定的位置建立一个空文件夹; 
    * 把检查点目录的位置赋值给配置参数fs.checkpoint.dir; 
    * 启动NameNode,并加上-importCheckpoint。

    NameNode会从fs.checkpoint.dir目录读取检查点, 并把它保存在dfs.name.dir目录下。如果dfs.name.dir目录下有合法的镜像文件,NameNode会启动失败。 NameNode会检查fs.checkpoint.dir目录下镜像文件的一致性,但是不会去改动它。

  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/charlist/p/7122422.html
Copyright © 2011-2022 走看看