概要:

计算HIVE BI库下每天数据表总大小及增量

输出:

总大小:xxxG
日同比新增数据量:xxxG
周同比新增数据量:xxxG
月同比新增数据量:xxxG 总表数:xxx
日新增表数:xxx
周新增表数:xxx
月新增表数:xxx 最大的20张表:
...... 表数据增量TOP20:
......

代码:
bi_report.sh

#!/bin/bash

GIGA=1000000000

content="\n"
prefix='bi'
today=`date -d"-1 day" +%Y-%m-%d`
yestoday=`date -d"-2 day" +%Y-%m-%d`
lastweek=`date -d"-8 day" +%Y-%m-%d`
lastmonth=`date -d"-1 month -1 day" +%Y-%m-%d` hadoop fs -du /user/hive/warehouse/bi.db/ > ./bi.db.stat
awk '{if(NR!=1) {size=split($2,table_list,"/"); print table_list[size],"\t",$1}}' ./bi.db.stat > $prefix.$today sum=`awk '{sum+=$2} END{print sum/"'$GIGA'"}' $prefix.$today`
content+="总大小:"$sum"G\n" yes_sum=`awk '{sum+=$2} END{print sum/"'$GIGA'"}' $prefix.$yestoday`
diff_size=`echo "$sum-$yes_sum" | bc`
content+="日同比新增数据量:"$diff_size"G\n" week_sum=`awk '{sum+=$2} END{print sum/"'$GIGA'"}' $prefix.$lastweek`
diff_size=`echo "$sum-$week_sum" | bc`
content+="周同比新增数据量:"$diff_size"G\n" month_sum=`awk '{sum+=$2} END{print sum/"'$GIGA'"}' $prefix.$lastmonth`
diff_size=`echo "$sum-$month_sum" | bc`
content+="月同比新增数据量:"$diff_size"G\n" table_count=`wc -l $prefix.$today | awk '{print $1}'`
content+="\n\n总表数:"$table_count"\n" yes_table_count=`wc -l $prefix.$yestoday | awk '{print $1}'`
diff_table_count=`echo "$table_count-$yes_table_count" | bc`
content+="日新增表数:"$diff_table_count"\n" lastweek_table_count=`wc -l $prefix.$lastweek | awk '{print $1}'`
diff_table_count=`echo "$table_count-$lastweek_table_count" | bc`
content+="周新增表数:"$diff_table_count"\n" lastmonth_table_count=`wc -l $prefix.$lastmonth | awk '{print $1}'`
diff_table_count=`echo "$table_count-$lastmonth_table_count" | bc`
content+="月新增表数:"$diff_table_count"\n" max_table="`sort -r -n -k 2 $prefix.$today | head -20 | awk '{ORS="";print $1":" $2/"'$GIGA'""G\\\\n"}'`"
content+="\n\n最大的20张表:\n"$max_table"\n" declare -A ARR1
while read line
do
key=`echo $line|awk '{print $1}'`
value=`echo $line|awk '{print $2}'`
ARR1["$key"]=$value
done < $prefix.$today
declare -A ARR2
while read line
do
key=`echo $line|awk '{print $1}'`
value=`echo $line|awk '{print $2}'`
ARR2["$key"]=$value
done < $prefix.$yestoday
for k in "${!ARR1[@]}"
do
d_val=`echo "${ARR1[${k}]}-${ARR2[${k}]}"|bc`
ARR1["$k"]=$d_val
done
cat /dev/null > bi_tmp.txt
for k in "${!ARR1[@]}"
do
echo "$k ${ARR1[${k}]}" >> bi_tmp.txt
done
max_incre_table="`sort -r -n -k 2 bi_tmp.txt | head -20 | awk '{ORS="";print $1":" $2/"'$GIGA'""G\\\\n"}'`"
content+="\n\n表数据增量TOP20:\n"$max_incre_table"\n" #echo -e $content msg=`echo $content` python mail.py "HIVE BI每日统计" $msg

mail.py

#! /usr/bin/python

import sys
import optparse
import os
import smtplib
from email.mime.text import MIMEText ## mail server config
mail_host="mail.51ping.com"
mail_user="info"
mail_pass="chinese1"
mail_postfix="51ping.com"
###################### def send_mail(to_list,sub,content):
me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content)
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return True
except Exception, e:
print str(e)
return False
mail_to_list=["zxmever@gmail.com"] msg=sys.argv[2]
msg=msg.replace("\\n","\r\n")
print msg
send_mail(mail_to_list,sys.argv[1],msg)

执行:

sh bi_report.sh

[源码分享] HIVE表数据量统计&邮件的更多相关文章

  1. sql server编写通用脚本自动统计各表数据量心得

    工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...

  2. sql server的数据库个数、表个数及表的数据量统计

    sql server的数据库个数.表个数及表的数据量统计   --由于今天要监控数据,急需统计实例中1有多少库2库里有多少表3每个表有多少数据 --将写好的代码贴出来,用到如下的: --sysobje ...

  3. Mysql分库分表导出导入和数据量统计测试

    需求:添加创建了分库分表后,业务可能将数据已经写入,但未来得及接入到otter汇总库.接入汇总库前需要初始化这部分数据. 1.导出 ip_port_list ) len=${#ip_port_list ...

  4. Newlife商业源码分享

    [商业源码]生日大放送-Newlife商业源码分享 今天是农历六月二十三,是@大石头的生日,记得每年生日都会有很劲爆的重量级源码送出,今天Newlife群和论坛又一次疯狂了,吃水不忘挖井人,好的东西肯 ...

  5. 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)

    微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...

  6. [DeviceOne开发]-土地销售项目源码分享

    一.简介 这个是一个真实项目开源,虽然不是很花哨,但是中规中矩,小细节处理的也很好,非常值得参考和借鉴.里面的数据都缓存到本地,可以离线运行,但是调整一下代码,马上就可以和服务端完全对接.后续会有详细 ...

  7. 3D语音天气球(源码分享)——完结篇

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 由于这篇文章是本系列最后一篇,有必要进行简单的回顾和思路整理. 这个程序是由两 ...

  8. 3D语音天气球(源码分享)——通过天气服务动态创建3D球

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...

  9. iOS上线项目源码分享

    最强UINavigationController和TabBar结合(会员satian )   最强UINavigationController和TabBar结合的Demo,这里取用了明星衣橱app里的 ...

随机推荐

  1. HDU 5328 Problem Killer(水题)

    题意: 给一个序列,要找一个等差或等比的连续子序列,求其最长的长度. 思路: 扫两遍,判断等差或等比即可.从左往右扫,维护一个滑动窗口,考虑新加进来的数,如果满足了要求,则更新长度,否则只留最后两个数 ...

  2. scala学习笔记(2)

    1 Loop (1) for (i <- 1 to 3){ # 1 2 3 } (2) for (i <- 1 until 3){ #1 2 } (3)过滤 for (i <- 1 ...

  3. NHibernate实例化类部分属性

    NHibernate 为习惯SQL的开发者提供了接口,将查询的结果转变为持久化对象.虽然该方法不是很提倡. GetCurrentSession().CreateSQLQuery(sql) 参数sql就 ...

  4. Android View绘制13问13答

    1.View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view? 答:从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程.draw ...

  5. Nodejs学习之一 下载安装与部署nodejs

    1,下载nodejs 访问nodejs官网 www.nodejs.org/download/   下载与机器相匹配的版本   2,安装nodejs 下载下来的msi包一直点击下一步即可   3,部署环 ...

  6. 【PHP入门到精通】:Ch04:流程控制语句

    Ch04: 流程控制语句4.1 条件控制语句(1)if (expr) {  statement1;statement2;} (2)if (expr) {  statement1; } else { s ...

  7. hdu 2899(数学基础+二分)

    题意:给了你一个函数,然后给了你x的变化范围,让你求出函数的最小值. 分析:它让你求的是函数的最小值,所以我们可以先对函数求导,得到的导数就可以判断函数的单调性了,求出导数后,我们发现如果函数的导数是 ...

  8. C# 中对WinForm窗体中的控件快速设置TableIndex次序

    点击“视图”--“Tab键顺序”,然后便可设置.

  9. XSS 前端防火墙(1):内联事件拦截

    关于 XSS 怎样形成.如何注入.能做什么.如何防范,前人已有无数的探讨,这里就不再累述了.本文介绍的则是另一种预防思路. 几乎每篇谈论 XSS 的文章,结尾多少都会提到如何防止,然而大多万变不离其宗 ...

  10. bjfu1287字符串输出的大水题

    不多说 /* * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> # ...