点击流
1.点击流的概念:
点击流就是用户在网站上持续访问的轨迹,由同一个用户的一系列点击流数据构成用户的点击流轨迹
2.点击流模型:
PageViews模型:
Pageviews模型关注同一个用户在一次session中,分别浏览了具体的哪些网页,以及每个页面的停留时间
Visits模型:
Visits模型关注同一个用户在一次session中,一共浏览了多少个网页,以及停留的总时间
3.数据的采集
在nginx服务器页面下部署埋点代码,然后通过flume下沉到hdfs
4.数据预处理
第一步:清洗数据
使用mapreduce的map阶段,对采集到的数据进行第一轮清洗,有效的数据标识为true,无效的数据标识为false,并对日期格式化为yyyy-MM-dd HH:mm:ss格式,一行记录不同数据间使用不可见分隔符'\001'来分隔;
清洗数据不需要数据的汇总行为,因此只需要定义mapper;在mrAppTask中设置job.setNumReduceTasks(0),即可避免汇总
第二步:构建Pageviews模型
读取清洗数据;定义Mapper,根据用户IP作为key来对用户进行分组处理,每出现一组key调用一次reduce();reduce阶段先将迭代器中的数据封装到List集合中,然后对集合中的数据,使用内比较器Comparator进行排序;遍历List;如果list.size()=1,说明用户只有一条访问记录,直接context.write()输出;比较这一次和上一次访问的时间间隔,30分内则认为是同一次会话;最后一次默认认为访问时间是60s
第三步:构建Visits模型:
读取Pageviews模型,根据会话sessionId分组,排序,取出list.get(0)和list.get(list.size()-1)得到进入网站和离开网站的时间;计算需要的值
实体类
1.数据清洗实体
public class WebLogBean{
private boolean valid = true;
private String remote_addr;
private String remote_user;
private String time_local;
private String request;
private String status;
private String body_bytes_sent;
private String http_referer;
private String http_user_agent;
}
2.Pageviews实体
public class PageViewsBean implements Writable {
private String session;
private String remote_addr;
private String timestr;
private String request;
private int step;
private String staylong;
private String referal;
private String useragent;
private String bytes_send;
private String status;
}
3.Visits实体
public class VisitBean implements Writable {
private String session;
private String remote_addr;
private String inTime;
private String outTime;
private String inPage;
private String outPage;
private String referal;
private int pageVisits;
}
Azkaban
1.工作流任务调度的实现方式
* 简单任务调度
linux crontab
* 复杂的任务调度
azkaban、ooize、Zeus
2.azkaban介绍:
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪工作流。
3.azkaban组成
mysql服务器:用于存储项目、日志或者执行计划之类的信息
web服务器:使用Jetty对外提供web服务,使用户可以通过web页面方便管理,https://node-1:8443
executor服务器:负责具体的工作流的提交、执行
4.job配置文件的定义:
# test.job
type=command
dependencied=other
commmand=echo hello
5.azkaban的使用流程:
第一步:定义job配置文件,并压缩为zip(windows)
第二步:在azkaban的web页面创建Project并上传配置文件,每一个项目都只能放一个job