一、术语介绍
--------------------------------------------------------------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项目相关推荐

  1. 细数各种关键绩效指标KPI

    IT服务从传统的注重硬件运行和软件监控转向使用关键绩效指标(KPI)为业务的重点.IT行业的KPI是一个抽象的目标,如用户体验或工作效率. IT服务的KPI指标与常见的监测指标之间的差异是企业领导的参 ...

  2. YOOV人事管理|KPI是什么?把握这5大原则制定有效关键绩效指标

    KPI是很多企业用在绩效设定以及绩效考核的一种方式,但是许多主管或是企业,在使用KPI作为关键绩效指标的时候,常常会遇到后续无法检核,或是员工有反弹的困难,YOOV人事管理认为只要把握好5原则,就能把 ...

  3. 如何设计KPI指标——关键绩效指标

    KPI:关键绩效指标,今年来企业一直关注这个问题,甚至有些公司,比如电信行业员工整天都围绕着KPI指标,什么是KPI呢?关键绩效指标即以定量的指标衡量经营活动的量化结果,一般由客观计算公式得出,并侧重 ...

  4. SSRS 2012 仪表 -- 关键绩效指标

    开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等都被浓缩在驾驶仪表中.在企业报表中,主管们也通 ...

  5. power bi指标呈现_在Power BI中使用关键绩效指标

    power bi指标呈现 In this article, we will learn Key Performance Indicators usage in Power BI and solve a ...

  6. ×××S 2012 仪表 -- 关键绩效指标

    ×××S 2012 仪表 -- 关键绩效指标 开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等 ...

  7. ***S 2012 仪表 -- 关键绩效指标

    ***S 2012 仪表 -- 关键绩效指标 开车的过程就是驾驶不断收集收集信息以作出正确决策的过程,为了能够让驾驶清楚地理解数值所代表的意义,因此开车时所需要的所有数字,包括速度.里程数.邮箱状况等 ...

  8. 创业公司必看的12个关键绩效指标

    对于创始人来说,掌握自家公司的关键绩效指标(即Key Performance Indicator,以下简称KPI)十分必要.因为合理构建起来的KPI体系,能够让公司的管理团队和潜在的投资者准确把握公司 ...

  9. IT运维的几个关键绩效指标

    服务台: 首次解决率 电话响应的速度 是否按时恢复服务 呼叫是否按时分流给二线支持 是否及时通知用户正在实施的变更和将来需要实施的变更 服务台员工接电话是否有礼貌 客户是否得到服务台预防事件发生的建议 ...

最新文章

  1. Javascript中的陷阱大集合【译】
  2. c语言输出的时候换行错误,C语言中关于输出n个数后就换行的问题。
  3. VS SPEC FLOW接口自动化之环境搭建及一个简单项目(一)
  4. C和C++数据结构相关概念
  5. efi分区咋移动到c盘里_怎么手动安装CLOVER到U盘EFI分区
  6. 使用 Drone 构建 Coding 项目
  7. 子恩域名授权系统2.0全解无加密无授权版盗版入库源码
  8. 同步VS异步,阻塞VS非阻塞
  9. CI(持续集成)/CD(持续部署)
  10. java获取web项目的绝对路径的方法总结
  11. 2018.10.01 NOIP模拟 卡牌游戏(贪心)
  12. FIFO调度算法和LRU算法
  13. 【洛谷P1606】白银莲花池【最短路】
  14. 游侠的基础技术总结——前言
  15. pmp考前冲刺 项目管理中的工具与技术
  16. iOS WKWebView的使用以及遇到的问题
  17. ST MCU的国产替代
  18. Linux 文件与目录的管理
  19. 普通话测试软件测试成绩很差,普通话测试成绩的差异性分析
  20. s7epaapi.dll 64位下载 附找不到文件的修复教程

热门文章

  1. 如何取消小程序中的云开发模式
  2. Spring Boot集成海康威视NVR
  3. 命令行 | 登录校园网 | curl
  4. The supplied data appears to be in the Office 2007+ XML
  5. Atmel AT91SAM9G20 EMAC控制DM9161调试笔记
  6. 内容运营是什么?怎么拉动用户增长
  7. POJ - 1737 Connected Graph
  8. BZOJ 2095: [Poi2010]Bridges 混合图欧拉回路
  9. 【Spring实战】----Security4.1.3鉴权之美--基于投票的AccessDecisionManager实现及源码分析
  10. 狼叔:如何正确的学习Node.js