shell脚本——遍历hdfs所有.db仓库的所有表,判断有无数据


需求

需求:递归遍历hdfs的warehouse下所有.db目录下的所有表,判断每张表有没有数据,并将结果输出到文件中

数据有无的判断:
du -s -h 表的结果为:0 0 则hdfs上无数据
其他为hdfs上有数据


思路

遍历warehouse得到所有库 hadoop fs -ls /user/hive/warehouse
再次遍历所有以.db结尾的库的所有表 hadoop fs -ls /user/hive/warehouse/库
对所有目录(表)进行du操作并根据结果判断有无数据,打印到文件中


shell脚本

 #! /bin/bash
 function read_dir(){
 for file1 in `hadoop fs -ls $1 | awk -F ' ' '{print $8}'` #注意此处这是两个反引号,表示运行系统命令
 do
  #echo $file1
  if echo "$file1" | grep -q -E '\.db$'   #如果是以.db为结尾的文件,那么进入循环
  then
	#echo '是以.db结尾的文件'
  	for file2 in `hadoop fs -ls $file1 | awk -F ' ' '{print $8}'` #遍历.db文件夹
		do
			#echo $file2
			#res3=`hadoop fs -du -s -h $file2`  #对目录调用hadoop语句
			file3=`hadoop fs -du -s -h $file2 | awk -F ' ' '{print $NF}'`
			siz=`hadoop fs -du -s -h $file2 | awk -F ' ' '{print $1}'`
			if [[ 0 -eq $siz ]]
				then
					echo "$file3 hdfs上无数据" >>  /root/temp/result_yhw.txt
				else
					echo "$file3 hdfs上有数据" >>  /root/temp/result_yhw.txt
			fi
		done
  else #如果不是,那么continue
		#echo '不是以.db结尾的文件'
		continue
  fi
 done
 } 
 #读取第一个参数
 read_dir $1


一些要点

  • 截取字符串并获取文件全名
    awk -F ’ ’ ‘{print $8}’
  • 内容通过echo追加到文件中
    echo “内容” >> 文件名
  • shell中的linux命令要使用``引起来
  • 如何判断字符串是否以.db为结尾?
    if echo “$file1” | grep -q -E ‘.db$’
  • 如何截取ls结果中的某列值?
    hadoop fs -ls $1 | awk -F ’ ’ ‘{print $8}’
  • 给一个变量赋值的时候,格式为:变量名=linux语句,其中,注意等号两边不能有空格
  • 如何判断结果中的某列值是否为0?
    [[ 0 -eq $siz ]]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值