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

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. <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代码

  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的进程

Java代码

  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代码

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

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

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

Java代码

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

4)启动namenode

Java代码

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

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

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

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

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

Java代码

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

8)正式启动namenode

Java代码

  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代码

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

附:

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

从 secondarynamenode 中恢复 namenode的更多相关文章

  1. 利用SecondaryNameNode文件恢复Namenode-实践可行

    二. namenode故障恢复(importCheckpoint) *注意事项: (1) 为了便于将随便一台datanode临时用作namenode,datanode和namenode配置需要一模一样 ...

  2. hadoop 根据secondary namenode恢复namenode

    refer to http://www.cnblogs.com/Richardzhu/p/3435989.html http://blog.csdn.net/wuzhilon88/article/de ...

  3. HDFS中的NameNode名节点——FSimage

    HDFS缓冲区 Fsimage 文件映射,Edits文件操作记录. 与ES的缓冲区不同,ES是维护数据的变更,而HDFS缓冲区是用于名结点维护文件系统元数据(目录树)的机制. 在HDFS集群中,Nam ...

  4. 从MySQL全库备份中恢复某个库和某张表【转】

    从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...

  5. mysql如何从全备文件中恢复单个库或者单个表

    mysql如何从全备文件中恢复单个库或者单个表 在mysql dba的日常实际工作中,一个实例下有多个库,而我们常见的备份就是全库备份.那么问题就来了,如果需要恢复单个库或者单个表,怎么办了,网上有很 ...

  6. Java编程的逻辑 (6) - 如何从乱码中恢复 (上)?

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  7. Java编程的逻辑 (7) - 如何从乱码中恢复 (下)?

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  8. 018 HDFS中,namenode与datanode的交互

    1.解释 2.启动过程 namenode需要等待给他汇报块的情况,然后namenode会给datanode一个反馈. namenode在启动的时候有一个等待的过程. 3.如果有块损坏 等待报告中,na ...

  9. Ubuntu中恢复rm命令误删文件(转)

    计算机系统:Ubuntu 16.04 1 背景 在做项目的时候,本来想使用rm命令删除以14开头的文件,结果写成如下形式: rm 14 * 注意,本来14和*之间不应该有空格的,但是误写了一个空格,结 ...

随机推荐

  1. Netty源码分析--内存模型(上)(十一)

    前两节我们分别看了FastThreadLocal和ThreadLocal的源码分析,并且在第八节的时候讲到了处理一个客户端的接入请求,一个客户端是接入进来的,是怎么注册到多路复用器上的.那么这一节我们 ...

  2. 利用递归,反射,注解等,手写Spring Ioc和Di 底层(分分钟喷倒面试官)了解一下

    再我们现在项目中Spring框架是目前各大公司必不可少的技术,而大家都知道去怎么使用Spring ,但是有很多人都不知道SpringIoc底层是如何工作的,而一个开发人员知道他的源码,底层工作原理,对 ...

  3. Python获取系统交互式shell,跨平台

    本文地址:https://www.cnblogs.com/M4K0/p/9044237.html 昨天搞了半天,终于把这两个环节打通了.后续可以进一步调用adb命令执行一些操作,细节说明已在代码中添加 ...

  4. React引入AntD按需加载报错

    背景:React使用create-react-app脚手架创建,然后yarn run eject暴露了配置之后修改less配置, 需求:实现antd组件按需加载与修改主题. 一开始是按照webpack ...

  5. Python 创建目录 and 删除目录

    import os import shutil #删除并创建目录 def rmdir(path): try: shutil.rmtree(path) print(path+':删除成功') os.ma ...

  6. C#代码实现IoC(控制反转)设计,以及我对IoC的理解

    一. 什么是IoC 当在A类中要使用B类的时候,我们一般都是采用new的方式来实例化B类,这样一来这两个类就有很强的依赖关系,不符合低耦合的设计思想.这时候我们可以通过一个中间容器来实例化对象,需要的 ...

  7. 设计模式(C#)——04原型模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       在软件开发过程中,我们习惯使用new来创建对象.但是当我们创建一个实例的过程很昂贵或者很复杂,并且需要创建多个这样的 ...

  8. unity编辑器扩展_08(创建自定义窗口)

    代码: using UnityEngine;using UnityEditor; public class MyWidow : EditorWindow{    [MenuItem("Win ...

  9. HTTP网页异常错误代码详解

    在调试TomCat,等web服务器的时候我们有时候各种错误代码铺面而来,让人头疼不已,那么这些代码究竟都代表什么呢?知道这些代码会会对我们的调试帮助很大 让我们来看一下这些代码究竟什么意思 400 无 ...

  10. [Python] Django框架入门5——静态文件、中间件、上传图片和分页

    说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...