今天又被工头叫去了
因为我们现在系统还是试运行阶段,这个阶段对系统中表的改动是常有的事,包括表结构,列名,属性,HQL脚本等等;为了保证万一有人改错或者误删了表和HQL脚本,无处可恢复,工头要求我写一个可以定时全库备份建表语句的脚本(并且要带有定时删除14天之前的功能)。经过了长久且艰辛得行为斗争之后,这个脚本终于竣工了😄😄😄😄
直接看成果
#!/bin/bash
cd /cib/dm/hive_table
rm -f tablist* test.fin
#use hive export table name
hive -e "use awpdb; show tables;" | grep -v 'WARN' > /cib/dm/hive_table/tablist
split -l 400 tablist -d -a 2 tablistSplit*
for i in `ls tablistSplit*`
do
nohup sh crontab_exp_tab.sh ${i} ${i}.out >> ${i}.log 2>&1 &
done
echo 'test' > /cib/dm/hive_table/test.fin
while true
do
fin=`ls /cib/dm/hive_table/*.fin | wc -l`
ori=`ls /cib/dm/hive_table/tablistSplit*| grep -Ev -e tablitSplit.*log -e tablistSplit.*out -e tablistSplit.*fin | wc -l`
if [ ${fin} -gt ${ori} ]
then
break;
else
sleep 100;
fi
done
echo "============Export Finished...============"
cd /cib/dm
tar -zcf /cib/dm/backup_table/"`date +%Y%m%d`.tar.gz" hive_table/ sql_shell/
#delete file of 14 days ago
find /cib/dm/backup_table/ -mtime +13 -name "*tar.gz" -exec rm -rf {} \;
echo "============ALL Finished...============"
此脚本中 crontab_exp_tab.sh 脚本,就是hive的循环导出建表语句的脚本,其中${i} 为要读取的文件,文件中为所有的表名;${i}.out 为输出文件,即是整个${i} 所包含的表的建表语句。
crontab_exp_tab.sh 脚本如下:
#!/bin/bash
cat ${i} | while read tab_name
do
hive -e "use awpdb; show create table ${tab_name};" >> ${i}.out
done
touch ${i}.fin
然后将这个脚本放在 crontab 任务中即可
这就是完整的工程。
第一个脚本中变量 ${ori} 的处理有些复杂,主要的原因是文件的名字命名问题,我对这些文件的命名都近似;所以为了判断是否已经完全导出建表语句的的步骤就比较麻烦。各位砖友可以修改一下名字,就可以简化了。
脚本为刚刚接触大数据的时候写的,如果有砖友有更优的,请留言分享一下,多谢多谢
博文均为原创,转载请注明出处!
有错请联系讨论
^~^