关键绩效指标KPI项目
一、术语介绍
--------------------------------------------------------------1.KPI: Key Performance Indicator,关键绩效指标。2.PV: page view,页面浏览量100000 --> 1G日志 //一般网站(每天)10G日志量 //大型网站(每小时)10G x 10 x 30 = 3000G = 3T //9T / 1T3.UV: unique visitor的,指访问某个站点或点击某条新闻的不同IP地址的人数。4.PR: page rank,页面评级5.日志格式222.68.172.190 - - [18/Sep/2013:06:49:57 +0000] "GET /images/my.jpg HTTP/1.1" 200 19939 "http://www.angularjs.cn/A00n" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"拆解为以下 拆解为以下 8 个变量 remote_addr: 记录客户端的 ip 地址, 222.68.172.190 remote_user: 记录客户端用户名称, – time_local: 记录访问时间与时区, [18/Sep/2013:06:49:57 +0000] request: 记录请求的 url 与 http 协议, “GET /images/my.jpg HTTP/1.1” status: 记录请求状态,成功是 200, 200 body_bytes_sent: 记录发送给客户端文件主体内容大小, 19939 http_referer: 用来记录从那个页面链接访问过来的, “http://www.angularjs.cn/A00n” http_user_agent: 记录客户浏览器的相关信息, “Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36”二、案例介绍
--------------------------------------------------------------某电子商务网站,在线团购业务。每日 PV 数 100w,独立 IP 数 5w。用户通常在工作日上午10:00-12:00 和下午 15:00-18:00 访问量最大。日间主要是通过 PC 端浏览器访问,休息日及夜间通过移动设备访问较多。网站搜索浏量占整个网站的 80%,PC 用户不足 1%的用户会消费,移动用户有 5%会消费。通过简短的描述,我们可以粗略地看出,这家电商网站的经营状况,并认识到愿意消费的用户从哪里来,有哪些潜在的用户可以挖掘,网站是否存在倒闭风险等。三、KPI指标设计
-------------------------------------------------------------- PV(PageView): 页面访问量统计 IP: 页面独立 IP 的访问量统计 Time: 用户每小时 PV 的统计 Source: 用户来源域名的统计 Browser: 用户的访问设备统计四、算法模型:Hadoop 并行算法
-------------------------------------------------------------并行算法的设计:注:找到第一节有定义的 8 个变量PV(PageView): 页面访问量统计 Map 过程{key:$request,value:1} Reduce 过程{key:$request,value:求和(sum)}IP: 页面独立 IP 的访问量统计 Map: {key:$request,value:$remote_addr} Reduce: {key:$request,value:去重再求和(sum(unique))}Time: 用户每小时 PV 的统计 Map: {key:$time_local,value:1} Reduce: {key:$time_local,value:求和(sum)}Source: 用户来源域名的统计 Map: {key:$http_referer,value:1} Reduce: {key:$http_referer,value:求和(sum)}Browser: 用户的访问设备统计 Map: {key:$http_user_agent,value:1} Reduce: {key:$http_user_agent,value:求和(sum)}五、架构设计 -- 日志 KPI 系统架构
-------------------------------------------------------------1.日志是由业务系统产生的,我们可以设置 web 服务器每天产生一个新的目录,目录下面会产生多个日志文件,每个日志文件 64M。2. 设置系统定时器 CRON,夜间在 0 点后,向 HDFS 导入昨天的日志文件。3. 完成导入后,设置系统定时器,启动 MapReduce 程序,提取并计算统计指标。4. 完成计算后,设置系统定时器,从 HDFS 导出统计指标数据到数据库,方便以后的即使查询。六、开始项目
--------------------------------------------------------------1.创建新的项目KPI2.创建新的模块kpi,添加maven支持<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>test.com</groupId><artifactId>kpi</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency></dependencies></project>3.分析日志,抽取成类KPI.javapackage model;public class KPI {private String ip ;private String time ;private String agent ;private String url ;private String userFrom ;public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getAgent() {return agent;}public void setAgent(String agent) {this.agent = agent;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUserFrom() {return userFrom;}public void setUserFrom(String userFrom) {this.userFrom = userFrom;}}4.编写工具解析类,将每行日志解析成一个KPI实例LogParser.javapackage util;import java.text.SimpleDateFormat;import java.util.Date;import model.KPI;/*** 日志解析工具类*/public class LogParser {/*** 解析Log记录成KPI*/public static KPI kpiParse(String log){KPI kpi = new KPI();if(log != null && log.length() > 0){String[] arr = log.split("\"");//有效性判断if(arr != null && arr.length == 6 ){//agentkpi.setAgent(arr[5].trim().substring(0, 11));//fromkpi.setUserFrom(arr[3].trim());//urlkpi.setUrl(arr[1].split(" ")[1]);//String[] a = arr[0].split(" ");//设置IPkpi.setIp(a[0]);//TimeString timeStr = a[3].substring(1) ;kpi.setTime(dateParse(timeStr));}}return kpi ;}/*** 解析时间字符串,返回新串,精确到hour*/public static String dateParse(String src){SimpleDateFormat df = new SimpleDateFormat();df.applyPattern("dd/MM/yyyy:hh:mm:ss");Date date = null;try {date = df.parse(src);df.applyPattern("yyyy-MM-dd hh");return df.format(date);} catch (Exception e) {e.printStackTrace();}return null ;}}5.编写Mapper类KPIMapper.javapackage mapreduce;import java.io.IOException;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import model.KPI;import util.LogParser;/*** Mapper* PV :url-> 1* UV :url->ip* Time :time->1* Browser:agent->1*/public class KPIMapper extends Mapper<LongWritable, Text, Text, Text> {protected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {//取得一行文本日志String log = value.toString();//解析成kpi对象KPI kpi = LogParser.kpiParse(log);if(kpi != null){String url = kpi.getUrl();String ip = kpi.getIp();String time = kpi.getTime();String agent = kpi.getAgent();//PVcontext.write(new Text("PV:" + url),new Text("1"));//UVcontext.write(new Text("UV:" + url),new Text(ip));//Timecontext.write(new Text("TIME:" + time),new Text("1"));//Browsercontext.write(new Text("BROWSER:" + agent),new Text("1"));context.getCounter("m1", "BROWSER:" + agent).increment(1);}}}6.编写reduce类KPIReducer.javapackage mapreduce;import java.io.IOException;import java.util.HashSet;import java.util.Set;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;/*** KPIReducer*/public class KPIReducer extends Reducer<Text, Text,Text, Text> {/*** IP:222.68.172.190* URL:/images/my.jpg* Time:18/11/2013:06* Browser:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36*/protected void reduce(Text key0, Iterable<Text> valueIn, Context context)throws IOException, InterruptedException {//提取key串String key = key0.toString();//PVif(key.startsWith("PV") || key.startsWith("TIME") || key.startsWith("BROWSER")){int count = 0 ;for(Text v : valueIn){count ++ ;}context.write(key0, new Text(count + ""));//if(key.startsWith("BROWSER")){context.getCounter("r1",key0.toString()).increment(1);}}//UVelse if(key.startsWith("UV")){Set<String> ips = new HashSet<String>();for(Text t : valueIn){ips.add(t.toString());}context.write(key0, new Text(ips.size() + ""));}}}7.编写App类App.javaimport org.apache.hadoop.fs.Path;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import mapreduce.KPIMapper;import mapreduce.KPIReducer;/*** Hello world!**/public class App {public static void main(String[] args) throws Exception {Job job = Job.getInstance();job.setJarByClass(KPIMapper.class);job.setJobName("KPI App");FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));job.setMapperClass(KPIMapper.class);job.setReducerClass(KPIReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);System.exit(job.waitForCompletion(true) ? 0 : 1);}}
关键绩效指标KPI项目相关推荐
- 细数各种关键绩效指标KPI
IT服务从传统的注重硬件运行和软件监控转向使用关键绩效指标(KPI)为业务的重点.IT行业的KPI是一个抽象的目标,如用户体验或工作效率. IT服务的KPI指标与常见的监测指标之间的差异是企业领导的参 ...
- YOOV人事管理|KPI是什么?把握这5大原则制定有效关键绩效指标
KPI是很多企业用在绩效设定以及绩效考核的一种方式,但是许多主管或是企业,在使用KPI作为关键绩效指标的时候,常常会遇到后续无法检核,或是员工有反弹的困难,YOOV人事管理认为只要把握好5原则,就能把 ...
- 如何设计KPI指标——关键绩效指标
KPI:关键绩效指标,今年来企业一直关注这个问题,甚至有些公司,比如电信行业员工整天都围绕着KPI指标,什么是KPI呢?关键绩效指标即以定量的指标衡量经营活动的量化结果,一般由客观计算公式得出,并侧重 ...
- SSRS 2012 仪表 -- 关键绩效指标
开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等都被浓缩在驾驶仪表中.在企业报表中,主管们也通 ...
- power bi指标呈现_在Power BI中使用关键绩效指标
power bi指标呈现 In this article, we will learn Key Performance Indicators usage in Power BI and solve a ...
- ×××S 2012 仪表 -- 关键绩效指标
×××S 2012 仪表 -- 关键绩效指标 开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等 ...
- ***S 2012 仪表 -- 关键绩效指标
***S 2012 仪表 -- 关键绩效指标 开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等 ...
- 创业公司必看的12个关键绩效指标
对于创始人来说,掌握自家公司的关键绩效指标(即Key Performance Indicator,以下简称KPI)十分必要.因为合理构建起来的KPI体系,能够让公司的管理团队和潜在的投资者准确把握公司 ...
- IT运维的几个关键绩效指标
服务台: 首次解决率 电话响应的速度 是否按时恢复服务 呼叫是否按时分流给二线支持 是否及时通知用户正在实施的变更和将来需要实施的变更 服务台员工接电话是否有礼貌 客户是否得到服务台预防事件发生的建议 ...
最新文章
- Javascript中的陷阱大集合【译】
- c语言输出的时候换行错误,C语言中关于输出n个数后就换行的问题。
- VS SPEC FLOW接口自动化之环境搭建及一个简单项目(一)
- C和C++数据结构相关概念
- efi分区咋移动到c盘里_怎么手动安装CLOVER到U盘EFI分区
- 使用 Drone 构建 Coding 项目
- 子恩域名授权系统2.0全解无加密无授权版盗版入库源码
- 同步VS异步,阻塞VS非阻塞
- CI(持续集成)/CD(持续部署)
- java获取web项目的绝对路径的方法总结
- 2018.10.01 NOIP模拟 卡牌游戏(贪心)
- FIFO调度算法和LRU算法
- 【洛谷P1606】白银莲花池【最短路】
- 游侠的基础技术总结——前言
- pmp考前冲刺 项目管理中的工具与技术
- iOS WKWebView的使用以及遇到的问题
- ST MCU的国产替代
- Linux 文件与目录的管理
- 普通话测试软件测试成绩很差,普通话测试成绩的差异性分析
- s7epaapi.dll 64位下载 附找不到文件的修复教程
热门文章
- 如何取消小程序中的云开发模式
- Spring Boot集成海康威视NVR
- 命令行 | 登录校园网 | curl
- The supplied data appears to be in the Office 2007+ XML
- Atmel AT91SAM9G20 EMAC控制DM9161调试笔记
- 内容运营是什么?怎么拉动用户增长
- POJ - 1737 Connected Graph
- BZOJ 2095: [Poi2010]Bridges 混合图欧拉回路
- 【Spring实战】----Security4.1.3鉴权之美--基于投票的AccessDecisionManager实现及源码分析
- 狼叔:如何正确的学习Node.js