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

 

对接离线模型 Semantic Kernel_hive