离线大数据调度框架 -- 1、需求分析
1、启动flume将指定文件【文件内容每一分钟增加若干行,模拟nginx日志】自动同步到HDFS。
要求:
- 将文件归档时间设置为1小时;
- 归档文件存储格式设置为LZO;
- HDFS文件按天分文件夹进行存储,不能全部同步到一个文件夹中;
2、配置MR任务并依赖flume任务
要求:
- 将日志文件解析到hive表每天对应的分区中
- 查看每天分区日志里面是否有其它天的日志【Event Time和处理时间可能不一致】
- 假设当天分区存在其它天的日志,请设计一个方案保证当天的分区只能有当天的数据,并且保证所有的数据不会丢失(不能每次都扫描所有的日志)
- 选做:将日志解析文件存储为parquet文件类型
3、通过sqoop命令行显示mysql里面有多少数据表;通过azkaban配置sqoop任务,将product、member、order三表同步到hive表
要求:
- 每天设置全量同步相关数据
- 每天设置一个新的分区
- 同步进一步思考 【只要指定数据源数据库、源表和输出hive库、hive表,可以实现所有表在一个任务中就可以实现同步,并且每个map的数据是相对均匀的】 ???
4、hive相关调度
- 计算每天有多少pv、uv、订单量、收入、注册用户数 (使用1个sql)
- 计算访问product页面的用户中,有多少比例在30分钟内下单并且支付成功对应的商品
- 更改前一个sql,需要做到支持变更不同的页面类型(正则)和目标时间,支持指定时间间隔的转化率分析(写明设计思路)
- 通过sql计算每个商品的每天的pv、uv并存入新建的hive表,格式自己定义
- 计算每个商品每天的pv、uv的环比情况(今天-昨天/昨天),并且筛选出环比增长最大的和最小的(负数<正数)
- 计算每天的登录用户数中新老用户占比,并且统计新老用户分别的pv、uv (新老用户的判断标准???)
- 设计一个udaf,将用户当前行为之前30分钟内的actionid行为存为一个list,其中list中的序号代表由远到近的时间序(参考collect_set的udaf)
- 基于udaf重写第二个作业的sql,对比有何不同
5、配置sqoop任务将hive任务结果导入mysql数据库
- 计算每个商品的每天的pv、uv并存入新建的hive表每天同步到mysql的表中
6、基于你现有知识,设计自己的框架
框架适用方需求如下:【前2个需求通过写shell脚本暴露通用参数】
- 业务方不想知道你怎么同步,只想在使用的时候指定源数据库、源表和输出hive库、hive表,第二天自动同步全量信息。
- 对日志解析而言,业务方不想知道你是通过什么引擎实现的,只希望写个输入路径,输出hive表,分区和解析逻辑,其它过程系统自动完成
- 业务放不想写add jar这样的方式创建临时函数,如何设计一个规范保证业务方可以直接使用你生成的udf,可以注册为常用函数,也可以用其它方式 【把udf函数加入hive启动服务,在hive-site.xml的hive.aux.jars.path中添加jar包路径】
- sqoop导入数据库太慢了,如何设计一种方案:在任务中,直接将结果写入数据库,业务方不想知道中间细节,只希望hive查询结果可以直接插入数据库(不做转化) 【此处数据库应该指mySQL数据库】 hive-contrib模块的GenericUDFDBOutput