如何自动备份HDFS Name Node?

Bash

1 前言

之前的章节手动完成Hadoop HDFS的NameNode节点备份,本章重点是实现名称节点的自动备份。

2 最佳实践

2.1 环境准备

本章以Hadoop HDFS为基础,如果你没有环境,请先创建,

如何部署Hadoop Cloudera 5.10.1(CDH)?


另外,建议你先学习如下章节,否则你可能会不能很好地理解的内容,

如何备份恢复HDFS元数据-逻辑级备份?

2.2 配置自动备份

2.2.1 配置备份存储

本章以samba存储为基础,如果你没有创建,请参阅此章节,

如何配置samba客户端挂载?


注:备份存储请挂载于“/backup/nameNode”目录

2.2.2 配置备份脚本

mkdir ~/scripts/
vim ~/scripts/backupNameNode.sh

添加如下内容,

#!/bin/bash

backupDIR="/data/dfs/nn/current"
backupStorageDIR="/backup/nameNode"
dataTime=`date +"%Y-%m-%d %H:%M:%S"`
logFile="/var/log/nameNodeBackup.log"

cd $backupStorageDIR
if [ $? != 0 ]; then
        echo $dataTime" Directory mount error!" | tee -a $logFile
        exit 1
fi

if [ ! -d $backupDIR ]; then
        echo $dataTime" backupDIR not found!" | tee -a $logFile
        exit 1
fi

if [ ! -d $backupStorageDIR ]; then
        echo $dataTime" backupStorageDIR not found!" | tee -a $logFile
        exit 1
fi

# backup VERSION
cd $backupDIR
scp VERSION $backupStorageDIR

# backup fsimage
hdfs dfsadmin -fetchImage $backupStorageDIR 2> $backupStorageDIR/nn-backup.log

# Backup archive
cd $backupStorageDIR
tar --remove-files -cvjf "nn-backup-"`date +"%Y%m%d%H%M%S"`".tar.bz2" VERSION fsimage_* nn-backup.log

# Clean up expired backups
# find $backupStorageDIR -type f -name nn-backup-\*.tar.bz2 -ctime +90 -exec ls {} \;
find $backupStorageDIR -type f -name nn-backup-\*.tar.bz2 -ctime +90 -exec rm -f {} \;

– 变量“backupDIR”声明名称节点的目录,本范例为“/data/dfs/nn/current”
– 变量“backupStorageDIR”声明备份存储目录,本范例为“/backup/nameNode”
– 变量“logFile”声明备份日志路径,本范例为“/var/log/nameNodeBackup.log”

2.2.3 配置脚本触发

crontab -e

需要添加如下配置,

0 2 * * * bash ~/scripts/backupNameNode.sh
没有评论

发表评论

Bash
如何熟悉Linux经典功能shell?

1 前言 一个问题,一篇文章,一出故事。 笔者想用一篇文章收集记录经典的脚本命令集合,于是产生此文( …

Bash
如何监视网络并执行处理?

1 前言 一个问题,一篇文章,一出故事。 笔者今天遇到家里的服务器网络故障,由于在上班,无法及时修复 …

Bash
如何使用Shell脚本筛选DNS记录?

1 前言 一个问题,一篇文章,一出故事 笔者生产的服务器需要使用谷歌推送,但是DNS解析出来的IP有 …