?目录
需求背景
解决方案
实施方法
1.编写shell文件
2.将sh文件放到hdfs上
3.创建workflow
?4.执行测试
?5.创建coordinate调度
6.执行coord
需求背景
根据业务情况,需要调度ETL数据清洗的hql语句
解决方案
通过大数据组件HUE+OOZIE调度shell脚本执行hive sql命令,方便管理,方便排错。
实施方法
1.编写shell文件
wf-etl-user.sh
#!/bin/bash
# hive目录
hive=/usr/local/service/hive/bin/hive
# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$1" ]; then
do_date=$1
else
do_date=$(date -d "-1 day" +%F)
fi
sql="use dd_database_bigdata;
INSERT OVERWRITE TABLE dwd_content_view_log
PARTITION(dt='$do_date')
SELECT
date_format('$do_date','yyyyMMdd') date_id,
date_time data_time,
biz_id,
biz_type,
behavior_type,
get_json_object(behavior_value,'$.seconds') behavior_value,
user_id,
longitude,
latitude,
ip,
request_ip,
app_version,
app_id,
device_id,
device_type,
network,
mobile_type,
os,
session_id,
trace_id,
parent_trace_id,
page_id,
sign,
token
FROM dwd_base_event_log_b
WHERE dt='$do_date' AND behavior_type in ('content_view','content_stop');"
echo "===开始清洗事件日期为 $do_date 的数据==="
$hive -e "$sql"
echo "===事件日期为 $do_date 的数据清洗完成==="
语句解释:
shell文件中定义一个变量,直接定义比如:jdbc_username=root,使用此参数:$jdbc_username
shell中前一天`date -d "-1 day" +%F`,当日`date?+%F`
shell action需要传参时,HUE上规定是使用$1,$2,$3这种方式,后面创建Schedule时会讲到。
shell中定义的hive的bin路径,是为了执行hive时调用hive程序:$hive -e 是在此目录下执行hive语句。
2.将sh文件放到hdfs上
/warehouse/dd/oozie/workspace/workspace-sqoop-hive2mysql-now/shell/sqoop-hive2mysql-now-shell.sh
3.创建workflow
?4.执行测试
?程序执行可在job中查看执行情况
?5.创建coordinate调度
from开始时间如果选择了之前的时间,任务创建执行后,会先执行多个job弥补选择的时间差。
比如:我们每时10分的任务,当前时间是12点15分,from选择了12点0分,执行这个coordinate时,会立即执行一个job workflow,是执行的12点10分的任务。所以这个from我们只需要创建时默认当时的时间即可。?
6.执行coord
?
|