将日志加载入库的脚本设计(离线数仓项目)

目录

1 场景前提:

2 涉及到的shell脚本技术

2.1 获取时间的命令

2.2 发送信息给邮件

2.3 $?

3 脚本


1 场景前提

在我们通过flume将日志服务器的数据采集到hdfs上了

接下来需要将hdfs上的文件导入到hive中

而离线项目数据隔天当天晚上之前传入即可

因此我们可以开发个脚本,每晚自动将数据写入到hive库中

2 涉及到的shell脚本技术

2.1 获取时间的命令

date -d'-1 day' +%Y-%m-%d

释义:获取到前一天的时间,例如:2022-03-27

2.2 发送信息给邮件

mail -s "数仓任务平台-执行通知" 2427770367@qq.com

使用前要下载 mailx

2.3 $?

上个命令的返回值

0为执行成功,其他为失败

3 脚本

#!/bin/bash

##
#
# @author : deep as the sea
# @department: doitedu
# @date : 2022-02-14
# @desc : app端行为日志加载入库
#

export HIVE_HOME=/opt/apps/hive-3.1.2/

# 获取脚本运行时的前一日日期
dt=$(date -d'-1 day' +%Y-%m-%d)

# 如果脚本调用者传入了指定日期,则执行指定日期数据的导入
if [ $1 ];then
dt=$1
fi

# 判断指定日期的数据是否有做过去重处理
datapath=/logdata/applog/${dt}
hdfs dfs -test -e /tmp/distinct_task/applog/${dt}
if [ $? -eq 0 ];then
  echo "检测到${dt}日期的数据有做去重,准备加载去重后的数据"
  datapath=/tmp/distinct_task/applog/${dt}
else
  echo "检测到${dt}日期的数据没有做去重处理,准备加载flume所采集的数据"
fi

echo "加载的路径为: ${datapath}"


${HIVE_HOME}/bin/hive -e "load data inpath '${datapath}' overwrite into table ods.mall_app_log partition(dt='${dt}')"

# 判断上一条命令执行的返回码(判断hive导入是否成功)
if [ $? -eq 0 ];then
  echo "数仓任务执行报告:app行为日志,日期:$dt ,加载入库任务成功"  | mail -s "数仓任务平台-执行通知" 2427770367@qq.com
  exit 0
else
  echo "数仓任务执行报告:app行为日志,日期:$dt ,加载入库任务失败" | mail -s "数仓任务平台-执行通知" 2427770367@qq.com
  exit 1
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值