• 从 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目录下镜像文件的一致性,但是不会去改动它。

  • 相关阅读:
    NPOI使用手册
    MySQL索引-B+树
    IDEA Pycharm WebStorm JetBranis全版本 2020年 最新激活方式
    SpringBoot整合MyBatis
    js-cookie的用法
    Vue项目devServer.proxy代理配置详解
    子级div设置margin属性影响父级位置
    深拷贝和浅拷贝的区别和与原理
    css如何将div画成三角形
    macos10.15.4以上svn报错svn: error: The subversion command line tools are no longer provided by Xcode解决
  • 原文地址:https://www.cnblogs.com/charlist/p/7122422.html
Copyright © 2020-2023  润新知