备份
一般来说需要改以下配置文件。conf/master、conf/hdfs-site.xml和conf/core-site.xml这3个配置文件,修改部分如下:
- master:master中的ip为希望运行secondarynamenode进程的机器ip,一般不设置为namenode的ip
- hdfs-site.xml:这个配置文件要改1个参数:
<property>
<name>dfs.secondary.http.address</name>
<value>10.10.10.10:50090</value>
</property>
<property>
<name>dfs.http.address</name>
<value>10.10.10.11:50070</value>
<description>
The address and the base port where the dfs namenode web uiwill listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
第一个为secondarynamenode的ip,第二个为namenode的ip。
3. core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodiccheckpoints.
</description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>The size of the current edit log (in bytes) thattriggers
a periodic checkpoint even if thefs.checkpoint.period hasn't expired.
</description>
</property>
- 把相应的配置复制到datanode上。
- 配置检查。配置完成之后,我们需要检查一下是否成功。我们可以通过查看运行secondarynamenode的机器上文件目录来确定是否成功配置。首先输入jps查看是否存在secondarynamenode进程。如果存在,在查看对应的目录下是否有备份记录。
该目录一般存在于hadoop.tmp.dir/dfs/namesecondary/下面。
恢复1、配置完成了,如何恢复。首先我们kill掉namenode进程,然后将hadoop.tmp.dir目录下的数据删除掉。制造master挂掉情况。
2、在配置参数dfs.name.dir指定的位置建立一个空文件夹;
3、从secondarynamenode远程拷贝namesecondary文件到namenode的namesecondary
4、启动namenode的时候采用
hadoopnamenode -importCheckpoint
正常启动以后,屏幕上会显示很多log,这个时候namenode就可以正常访问了。
5、用hadoop fsck /user命令检查文件Block的完整性
hadoopfsck /
6、停止namenode,使用crrl+C或者会话结束
7、删除namesecondary目录下的文件(保存干净)
[root@masternamesecondary]# rm -rf *
8、正式启动namenode
[root@masterbin]# ./hadoop-daemon.sh start namenode
恢复工作完成,检查hdfs的数据
总结- secondarynamenode可以配置多个,master文件里面多写几个就可以。
- 千万记得如果要恢复数据是需要手动拷贝到namenode机器上的。不是自动的(参看上面写的恢复操作)。
- 镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period值。
- 关于secondarynamenode,它不是namenode的备份进程,说白了,namenode挂了,如果secondarynamenode没挂,很不幸,集群一样无法正常工作。
- secondarynamenode一般来说不应该和namenode在一起,所以,我把它配置到了datanode上。
- SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。两个过程同时进行,称为checkpoint
总共分五步:
- SecondaryNameNode通知NameNode准备提交edits文件,此时主节点产生edits.new
- SecondaryNameNode通过http get方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)
- SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt
- SecondaryNameNode用http post方式发送fsimage.ckpt至NameNode
-
NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。
- 关于master:一般的安装手册都是说写上namenode机器的IP或是名称。这里要说明一下,这个master不决定哪个是namenode,而决定的是secondarynamenode(决定谁是namenode的关键配置是core-site.xml中的fs.default.name这个参数)。所以,这里直接写上你的datanode的IP或机器名称就可以了。一行一个。
- 需要用到的一些路径位置:
- 在conf/core-site.xml中(为tmp的地址,namesecondary在tmp/dfs/下)
- 在conf/hdfs-site.xml中(为name的地址)
- 在conf/core-site.xml中(为namesecondary的地址)
- 值得推荐的是,你要注意备份你的dfs.name.dir和 ${hadoop.tmp.dir}/dfs/namesecondary。