第一步: 需求分析

需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime)
需要分区为天/时
PV(统计记录数)
UV(guid去重)

第二步: 实施步骤

建Hive表,表列分隔符和文件保持一至
Load数据到Hive表中
写HiveSql进行统计,将结果放入Hive另一张表中(数据清洗)
从Hive的另一张表中的数据导出到Mysql,使用sqoop
网站项目从Mysql读取这张表的信息

预期结果

日期		小时		PV		UV

第三步: 实施

# 建源表(注意进入beeline用户名密码是linux的)
  create database if not exists track_log;
  use track_log;
  create table if not exists yhd_source(
  id string,
  url string,
  referer string,
  keyword string,
  type string,
  guid string,
  pageId string,
  moduleId string,
  linkId string,
  attachedInfo string,
  sessionId string,
  trackerU string,
  trackerType string,
  ip string,
  trackerSrc string,
  cookie string,
  orderCode string,
  trackTime string,
  endUserId string,
  firstLink string,
  sessionViewNo string,
  productId string,
  curMerchantId string,
  provinceId string,
  cityId string,
  fee string,
  edmActivity string,
  edmEmail string,
  edmJobId string,
  ieVersion string,
  platform string,
  internalKeyword string,
  resultSum string,
  currentPage string,
  linkPosition string,
  buttonPosition string
  )row format delimited fields terminated by '\t'
  stored as textfile
  load data local inpath '/home/liuwl/opt/datas/2015082818' into table yhd_source;
  load data local inpath '/home/liuwl/opt/datas/2015082819' into table yhd_source;
# 创建清洗表
  create table if not exists yhd_clean(
  id string,
  url string,
  guid string,
  date string,
  hour string)
  row format delimited fields terminated by '\t'
  insert into table yhd_clean select id,url,guid,substring(trackTime,9,2) date,substring(trackTime,12,2) hour from yhd_source;
  select id,date,hour from yhd_clean limit 5;
# 改建分区表(静态分区)
  create table if not exists yhd_part1(
  id string,
  url string,
  guid string
  ) partitioned by (date string,hour string)
  row format delimited fields terminated by '\t'
  insert into table yhd_part1 partition (date='28',hour='18') select id,url,guid from yhd_clean where date='28' and hour='18';
  insert into table yhd_part1 partition (date='28',hour='19') select id,url,guid from yhd_clean where date='28' and hour='19';
  select id,date ,hour from yhd_part1 where date ='28' and hour='18' limit 10;
# 使用动态分区需要修改部分参数
 hive.exec.dynamic.partition--true
 hive.exec.dynamic.partition.mode--nonstrict
  create table if not exists yhd_part2(
  id string,
  url string,
  guid string
  ) partitioned by (date string,hour string)
  row format delimited fields terminated by '\t'
# 动态分区根据partition字段进行匹配
  insert into table yhd_part2 partition (date,hour) select * from yhd_clean;
  select id,date ,hour from yhd_part2 where date ='28' and hour='18' limit 10;
# 实现需求
  PV: select date,hour,count(url) PV from yhd_part1 group by date,hour;
  0: jdbc:hive2://hadoop09-linux-01.ibeifeng.co> select date,hour,count(url) PV from yhd_part1 group by date,hour;
  +-------+-------+--------+--+
  | date | hour | pv |
  +-------+-------+--------+--+
  | 28 | 18 | 64972 |
  | 28 | 19 | 61162 |
  +-------+-------+--------+--+
  UV: select date,hour,count(distinct(guid)) UV from yhd_part1 group by date,hour;
  0: jdbc:hive2://hadoop09-linux-01.ibeifeng.co> select date,hour,count(distinct(guid)) UV from yhd_part1 group by date,hour;
  +-------+-------+--------+--+
  | date | hour | uv |
  +-------+-------+--------+--+
  | 28 | 18 | 23938 |
  | 28 | 19 | 22330 |
  +-------+-------+--------+--+
# 结合放入log_result表
  create table if not exists log_result as select date,hour,count(url) PV,count(distinct(guid)) UV from yhd_part1 group by date,hour;
  select date,hour,pv,uv from log_result;
  0: jdbc:hive2://hadoop09-linux-01.ibeifeng.co> select date,hour,pv,uv from log_result;
  +-------+-------+--------+--------+--+
  | date | hour | pv | uv |
  +-------+-------+--------+--------+--+
  | 28 | 18 | 64972 | 23938 |
  | 28 | 19 | 61162 | 22330 |
  +-------+-------+--------+--------+--+
# 将结果表导出到Mysql,使用Sqoop
# 在Mysql中创建数据库和表
  create database if not exists track_result;
  use track_result;
  create table if not exists log_track_result(
  date varchar(10) not null,
  hour varchar(10) not null,
  pv varchar(10) not null,
  uv varchar(10) not null,
  primary key(date,hour)
  );
# 使用sqoop export 导出到log_track_result表
  bin/sqoop export \
  --connect jdbc:mysql://hadoop09-linux-01.ibeifeng.com:3306/track_result \
  --username root \
  --password root \
  --table log_track_result \
  --export-dir /user/hive/warehouse/track_log.db/log_result \
  --num-mappers 1 \
  --input-fields-terminated-by '\001'
# 在Mysql中查询测试
  select * from log_track_result;
  mysql> select * from log_track_result;
  +------+------+-------+-------+
  | date | hour | pv | uv |
  +------+------+-------+-------+
  | 28 | 18 | 64972 | 23938 |
  | 28 | 19 | 61162 | 22330 |
  +------+------+-------+-------+
  2 rows in set (0.00 sec)  

日志分析_统计每日各时段的的PV,UV的更多相关文章

  1. 日志分析_使用shell完整日志分析案例

    一.需求分析 1. 日志文件每天生成一份(需要将日志文件定时上传至hdfs) 2. 分析日志文件中包含的字段:访问IP,访问时间,访问URL,访问状态,访问流量 3. 现在有"昨日" ...

  2. 统计_statistics_不同的人_大样本_分析_统计方法_useful ?

    统计_statistics_不同的人_大样本_分析_

  3. 日志分析-mime统计

    提取日志中未落入标准字段的mime,分adx,adtype 统计mime的数量和包含js的数量占比 require 'date' require 'net/http' require 'uri' re ...

  4. 使用Spark进行搜狗日志分析实例——统计每个小时的搜索量

    package sogolog import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. nginx日志分析及其统计PV、UV、IP

    一.nginx日志结构 nginx中access.log 的日志结构: $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_l ...

  6. yhd日志分析(二)

    yhd日志分析(二) 继续yhd日志分析,统计数据 日期 uv pv 登录人数 游客人数 平均访问时长 二跳率 独立ip数 1 分析 登录人数 count(distinct endUserId) 游客 ...

  7. Spark SQL慕课网日志分析(1)--系列软件(单机)安装配置使用

    来源: 慕课网 Spark SQL慕课网日志分析_大数据实战 目标: spark系列软件的伪分布式的安装.配置.编译 spark的使用 系统: mac 10.13.3 /ubuntu 16.06,两个 ...

  8. mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析、统计功能,此外还支持本地集群部署管理.

    mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析.统计功能,此外还支持本地集群部署管理 https://www.cnblogs.com/littleatp/p/9 ...

  9. shell常用命令及正则辅助日志分析统计

    https://www.cnblogs.com/wj033/p/3451618.html 正则日志分析统计 3 grep 'onerror'  v3-0621.log | egrep  -v '(\d ...

随机推荐

  1. 高质量C++[转]

    高质量C++/C编程指南 文件状态 [  ] 草稿文件 [√] 正式文件 [  ] 更改正式文件 文件标识: 当前版本: 1.0 作    者: 林锐 博士 完成日期: 2001年7月24日 版 本  ...

  2. python web编程-概念预热篇

    互联网正在引发一场革命??不喜欢看概念的跳过,注意这里仅仅是一些从python核心编程一书的摘抄 这正是最激动人心的一部分了,web编程 Web 客户端和服务器端交互使用的“语言”,Web 交互的标准 ...

  3. Uva 524 Prime Ring

    如果用全排列生成之后,在判断是否是素数环是会超时的,应该用回溯. 回溯的时候  首先要注意 递归边界 ,结束的时候别忘记判断最后一个和第一个元素能否成立  还有要记得vis的使用和递归之后的清理. # ...

  4. 《DSP using MATLAB》示例Example4.10

    上代码: b = [1, 0.4*sqrt(2)]; a = [1, -0.8*sqrt(2), 0.64]; % compute the polynomials coefficients given ...

  5. ios开发-载入viewcontroller的几种方式

    Assuming you have storyboard, go to storyboard and give your VC an identifier (inspector), then do: ...

  6. 我的c++学习(6)默认参数和内联函数

    默认参数 一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同.“默认参数”指在定义或声明函数时为形参指定默认 ...

  7. bootstrap datetimepicker 中只显示年或者只显示月份

    1.只显示datetimepicker  日历中只显示年份 $("#day-access-calendar").datepicker({ startView: 2, maxView ...

  8. iOS App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

    You can easily add it to the plist using the GUI: On the last line add the + Enter the name of the g ...

  9. MR并行算法编程过程中遇到问题的思考

    1. Reducer 类中 reduce函数外定义的变量是在Reducer机器上属于全局变量的,因此,一台机器上reduce函数均可以对该变量的值做出贡献.如代码:(sum和count数据Reduce ...

  10. UVa12264 Risk(最大流)

    题目 Source https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...