为做到数据的实时传输(实时:当前时间传输上一个小时的数据),shell用于控制整个流程,python用于处理数据。
shell代码如下:
#bin/bash
#########
## 学车运行脚本
## 编写者:zqm
## 日期:2018-04-04
## 调用方式:nohup sh duduxueche.sh day/hour > ../log/duduxueche.log 2>&1 &
## type数据有两种:1、day:按天跑 2、hour:按小时跑
########
# 程序的日志目录
log='/dudu/log'
# 4G表的HDFS目录
sourceDataHdfs='/home/zhangqm'
# MR清单数据,HDFS目录
mrDataListHdfs='/zhangqm/dudu'
# MR清单数据,本地目录
dataList='/dudu/data'
# 结果数据
resultList='/dudu/result'
# 稽核语句
# 调用方式:Check_num 目录 时间 小时
function Check_num()
{
if [ $3 == 'day' ];then
num=$(hadoop fs -du -h -s $1/$2 |awk -F" " '{print $1}'|sed 's/ //g')
echo $num
else
num=$(hadoop fs -du -h -s $1/$2/$3|awk -F" " '{print $1}'|sed 's/ //g')
echo $num
fi
}
# 得到清单数据
# 调用方式:Deal_data 时间 小时
function Deal_data()
{
if [ $2 == 'day' ];then
# 拉清单数据
echo '开始处理'${dayTime_1}'天数据。。。'
hadoop jar dudu4g_0514.jar ${sourceDataHdfs}/$1/ ${mrDataListHdfs}/$1
# 检查天数据是否产生
size=$(Check_num ${mrDataListHdfs} $1 $2)
if [ ${size} > 0 ] ; then
hadoop fs -cat ${mrDataListHdfs}/$1/* > ${dataList}/$1.txt
else
echo '天数据没有产生,请核查。。。'
fi
else
# 拉清单数据
echo '开始处理'${dayTime}${hourTime_1}'小时数据。。。'
hadoop jar dudu4g_0514.jar ${sourceDataHdfs}/$1/$2 ${mrDataLi