开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第五阶段):网站流量日志分析--工作流调度--数据入库调度】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/697/detail/12252
网站流量日志分析--工作流调度--数据入库调度
内容介绍:
一、数据入库调度概述
二、具体方法
三、总结
一、数据入库调度概述
数据入库就是俗称的 EDL 经过周期转换加载,把数据导入到数仓的过程,这个阶段的定时调度的难点在于 shell 脚本的编写,因为我们需要去调度 hive 的脚本,虽然 shell 不是我们当下数据调研的主流开发语言,但是通常来说它有固定的格式,以我们项目来说调度方式比较简单,这个格式虽然不能保证百分之百的正确,但是可以保证写的具有逻辑性,
大体框架如下:
#!/bin/bash
#set java eav
#set hadoop. env
设置一些主类、目录等常量
获取时网信息
第一大块:集中去定义一些当下需要的脚本、软件环境变量,方便后续的使用;第二大块:设置一些主类、目录,获取时间的常量信息,集中维护、便于管理;第三大块:shell 主程序、结合流程控制(if....else)去分别执行 shell 命令。
二、具体方法
打开参考资料,在 loaddata 的文件夹里有两个文件,一个叫做 .job,为任务调度配置文件,一个是 .sh 为 shell 脚本。
1..job 配置文件
我们首先来看 .job 配置文件,type 类型等于 command, 用来去执行脚本,这个脚本就是文件夹中的另一个文件,load-weblog.sh 脚本,整个调度的任务就交给了这个脚本当中,脚本怎么编写调度就怎样执行。
2..sh 脚本文件
右键打开 shell 脚本文件,查看编写的内容。脚本的第一行定义了一个脚本的解释器然后导入了 hive 的环境变量,hive 环境变量要和服务器环境所对应,然后是一个获取时间的 if 循环,如 $# 表示输入的参数个数,如果输入参数个数等于 1,时间就等于输入的时间值 $#1 ,格式为年月日,否则的话,时间就等于当前时间减一天,即把时间往前推一天,通常来说是每天凌晨处理前一天的。当然是否需要减去一天或者两天,根据业务习惯来做相关修改即可。
接下来定义一个 hiveSQL 的字符串,需要做的是数据入库操作,就是 loaddata 的操作,当下数据位于 Hadoop 当中,现在要把预处理完之后的数据,包括点击的统计数据,导入到 hive 数仓当中。
导入命令十分简单:load.data inpath, 把预处理路径进行复制,然后做一个替换,把这个路径下的文件导入到 into table 原始日志表中,代表 origin。
接下来我们在窄表当中输入 show partitions,查看当前的分区,当前窄表当中只有一个 2018101 的分区数据,这个数据分区不是胁持的,是根据刚才动态之间的值导入的,可以导入指定某一天的数据,也可以导入当前时间前一天的数据。
hive 脚本的运行,hive-e,-e 表示执行后面的 SQL 语句,如果这个 SQL 语句比较长,可以把它写出来,脱离成一个 SQL 文件。
3、运行
确定完这一块的逻辑之后,把上述两个文件打成一个 zip 压缩包,然后打开阿兹卡班的工程页面,首先创建一个新的工程叫做加载数据 loaddata,还是由 Itheima 进行提交,把刚才打包的压缩包进行选择上传,上传完成之后,开始进行相关操作,执行 SQL,查看效果,等待发现显示绿色的 succeed 成功,如果出错报的是红色的,可以去查看相关执行日志检查出错来源。
4、检验
点开 user-hive-Itheima,找到 origin 原始表,可以看到新的分区表进来了,另外一种方式,可以通过 show partitions 命令进行查看,相当于增量导入一个分区的数据,表示一天一处理的话,每天都会导入一个数据。
三、总结
数据入库进行脚本编写的整个核心问题在于掌握如何使用 azkaban 调度 hive 脚本。
1、shell 脚本的编写
导入 shell 需要软件的环境变量
集中定义时间目录属性等常量变量
程序的主体要去结合流程控制进行编写
2、如何使用 azkaban 调度 hive
hive-e 调度 sql 语句
hive-f 调度 sql 脚本