Hadoop 元数据备份恢复

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://www.fanlegefan.com/ https://blog.csdn.net/woloqun/article/details/84553086

早先写过一篇Hadoop HA 搭建bolg,为了实现hadoop集群的高可用需要引入Zookeeper和Journal;其实hadoop集群最重要的是hdfs元数据;只要保证hdfs 元数据不丢失就行;进程挂了,重启即可;但现在问题来了,怎样保证hdfs元数据不丢失或者说尽可能少的丢失?在了解这个问题前,先来看下元数据是什么

[qun@cluster-master name]$ pwd
/home/qun/data/hadoop-2.8/name
[qun@cluster-master name]$ tree
.
└── current
    ├── edits_0000000000000000001-0000000000000000002
    ├── edits_0000000000000000003-0000000000000000016
    ├── edits_0000000000000000017-0000000000000000191
    ├── edits_inprogress_0000000000000000192
    ├── fsimage_0000000000000000002
    ├── fsimage_0000000000000000002.md5
    ├── fsimage_0000000000000000016
    ├── fsimage_0000000000000000016.md5
    ├── seen_txid
    └── VERSION

元数据分两部分:fsimage和edits;fsimage可以理解为元数据历史快照,edits为存储快照之后这段时间的操作[文件增删改]集合;namenode启动的时候首先将fsimage加载到内存中,然后读入edits中操作,作用在fsimage上,执行过程中,namenode会处于SAFE MODE状态;

了解完hdfs 元数据后,想一想怎样备份元数据?我哪能想到第一个方案:就是定期将元数据传输到远程的一个存储节点,假如那一天namenode这台节点宕机,不可恢复,那么就可以利用之前备份的元数据恢复namenode
步骤如下

  • 找一个和之前namenode配置相同或相近的节点;将之前备份的元数据放到如下目录dfs.namenode.name.dir指定的目录下
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/qun/data/hadoop-2.8/name</value>
</property>
  • 修改所有datanode的core-site.xml,指向最新的cluster-backup:9000
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster-backup:9000</value>
</property>
  • 重启namenode和所有datanode,以及secondnamenode

这样做的缺点很明显:

  • 没办法保证元数据一点都不丢,备份时间间隔越大,丢的越多
  • 集群改动大;当然可以将cluster-backup:9000改成域名访问,这样改动的就只用backup节点

优点:
不需要维护zookeeper,DFSZKFailoverController和Journa进程,如果集群规模小,可以考虑下,如果介意的话,请上HA

猜你喜欢

转载自blog.csdn.net/woloqun/article/details/84553086
今日推荐