hbase数据备份导出脚本

本脚本为hbase数据迁移的前半部分(数据导出),自动将hbase所有表数据和元数据导出为文件,导入部分见我的另一篇文章《hbase数据备份导入脚本》

hbase-export.sh脚本说明

《hbase数据备份导出脚本说明》包含【使用说明】和【脚本介绍】两部分

【使用说明】

1、赋予脚本可执行权限

chmod +x hbase-export.sh

2、执行脚本

./hbase-export.sh

3、脚本内操作

hbase数据默认导出至/data/arbd/hbase/export,脚本内会提示是否输入新的导出位置?(ctrl+Backspace为删除)
是==>输入一个绝对路径(结尾不带/) 否==>直接回车
每备份完一张表会有一句绿色提示,全部完成后会提示
共【n】张表,导出成功【n】张

【脚本介绍】

1、脚本概述

本脚本使用hbase的export/import方式备份数据,默认创建路径/zrar/hbase/export并备份hbase的建表语句到/zrar/hbase/export/createtable.txt,
备份每个表的数据文件到file:///zrar/hbase/export/${table名}文件夹内

2、样式截图

脚本执行样式

hbase数据备份导出脚本_第1张图片

导出后的export文件夹样式

hbase数据备份导出脚本_第2张图片

3、脚本原文

#!/bin/bash
NUM_START=-1
NUM_STOP=-1
HBASE_HOME=$HBASE_HOME
DATA_DIR=/data/arbd/hbase/export
echo_color() {
if [ $1 == "green" ]; then
echo -e "\033[32;40m$2\033[0m"
elif [ $1 == "red" ]; then
echo -e "\033[31;40m$2\033[0m"
elif [ $1 == "yellow" ]; then
echo -e "\033[33;40m$2\033[0m"
fi
}
#获取开始下标
function arsh_arritemidx_start()
{
local _arsh_tmp
local _arsh_cnt=0
local _arsh_array=`echo "$1"`
for _arsh_tmp in ${_arsh_array[*]}
do
#echo $2
#echo $_arsh_tmp
if [ $2 == $_arsh_tmp ]; then
NUM_START=$_arsh_cnt
return
fi
_arsh_cnt=$(( $_arsh_cnt + 1 ))
done
NUM_START=-1
}
#获取结束下标
function arsh_arritemidx_stop()
{
local _arsh_tmp
local _arsh_cnt=0
local _arsh_array=`echo "$1"`
for _arsh_tmp in ${_arsh_array[*]}
do
#echo $2
#echo $_arsh_tmp
if [[ $_arsh_tmp =~ "$2" ]]; then
NUM_STOP=$_arsh_cnt
return
fi
_arsh_cnt=$(( $_arsh_cnt + 1 ))
done
NUM_STOP=-1
}
function output_file()
{
local _arsh_tmp
local _arsh_table=$1
local _arsh_array=`echo "$2"`
local _table="create '${_arsh_table}',"
#echo 传入$2
#echo ${#_arsh_array[@]}
for _arsh_tmp in ${_arsh_array[*]}
do
_table=${_table}"'${_arsh_tmp}',"
#echo $_table
sleep 0.5
done
create_table=${_table%,*}
#echo $create_table
}
#位置参数修改
dir_change() {
echo_color yellow "默认导出至/data/arbd/hbase/export,是否输入新的导出位置?(ctrl+Backspace为删除)"
echo_color yellow "是==>输入一个绝对路径(结尾不带/) 否==>直接回车"
read read2
if [ "$read2" == "" ]
then
DATA_DIR=$DATA_DIR
else
while !([[ "$read2" =~ ^/ ]])
do
echo_color yellow "路径错误,请输入正确的绝对路径"
read read2
done
DATA_DIR=$read2
fi
}
dir_change
#echo_color yellow "即将进行hbase全表导出,需要2.7以上版本hadoop,0.95以上版本hbase"
echo_color yellow "开始全量备份hbase数据至${DATA_DIR},请稍后..."
a=($(echo "list" | $HBASE_HOME/bin/hbase shell 2>&1|sed s/[[:space:]]//g|tr '\n' " "))
a_tmp=`echo ${a[*]}`
arsh_arritemidx_start "$a_tmp" "TABLE"
#echo $NUM_START
arsh_arritemidx_stop "$a_tmp" "row(s)"
#echo $NUM_STOP
NUM=$NUM_STOP-$NUM_START
#清空历史建表语句
rm -rf $DATA_DIR
mkdir -p $DATA_DIR
_arsh_cnt=0
_arsh_cnt_se=0
for ((i=0;i<=$NUM-2;i++));
do
((cnt=$i+$NUM_START+1))
b[$i]=${a[$cnt]}
#拼接查询语句
table="describe '${a[$cnt]}'"
#echo $table
#获取字段数组
#field=(`echo ${table} | $HBASE_HOME/bin/hbase shell 2>&1|grep {NAME | awk -F' ' '{ print $3 }'|sed s/\'//g|sed s/,//g |tr '\n' " "`)
field=($(echo ${table} | $HBASE_HOME/bin/hbase shell 2>&1|grep {NAME | awk -F' ' '{ print $3 }'|sed s/\'//g|sed s/,//g |tr '\n' " "))
field_tmp=`echo ${field[*]}`
#恢复快照
#c=($(echo "restore_snapshot '${table}_snapshot'" | $HBASE_HOME/bin/hbase shell ))
#echo 传出$field_tmp
#echo ${#field[@]}
#output_file ${a[$cnt]} $field_tmp
_table="create '${a[$cnt]}',"
#echo ${#_arsh_array[@]}
for _field_tmp in ${field[*]}
do
_table=${_table}"'${_field_tmp}',"
#echo $_table
sleep 0.5
done
create_table=${_table%,*}
#写入建表语句
echo $create_table >> ${DATA_DIR}/createtable.txt
#导出数据
_arsh_cnt=$(( $_arsh_cnt + 1 ))
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.Driver export ${a[$cnt]} file://${DATA_DIR}/${a[$cnt]} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo_color green " 表【${a[$cnt]}】导出成功"
_arsh_cnt_se=$(( $_arsh_cnt_se + 1 ))
else
echo_color red " 表【${a[$cnt]}】导出失败"
fi

done
#echo ${b[*]}
echo_color green "共【${_arsh_cnt}】张表,导出成功【${_arsh_cnt_se}】张"

你可能感兴趣的:(数据库,hbase,shell)