基于Hadoop部署实践对网站日志分析(大数据分析案例)(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 基于Hadoop部署实践对网站日志分析(大数据分析案例)

3.4 根据结果文件结构建立hive数据库表

  3.4.1在结果文件上创建分区表

  - 表名 (techbbs)


  - 表类型 (External)


  - 表字段


   字段名    字段类型    描述


   ip       string    访客IP地址


   atime    string    访问时间


   url      string    访问页面


  - 表分区字段 (logdate string)


  - 表分隔符 (TERMINATED BY ‘,’)


  - 表路径 (LOCATION /xxx/xxx)


首先把清洗后的文件放在我们自己设定的文件夹里面


参数解释:MV 移动或者剪切 使用格式:MV 源文件 目标路径最后也可以对其进行重命名,如果不加/那么就是重命名,加了就是把其粘贴在该路径下面


hdfs dfs -mkdir -p /user/hadoop/data/datas
hdfs dfs -mkdir -p /user/hadoop/data/datas1
hdfs dfs -mv /user/hadoop/files30/part-00000 /user/hadoop/data/datas/30
hdfs dfs -mv /user/hadoop/files31/part-00000 /user/hadoop/datas/datas1/31
hdfs dfs -ls -R /user/hadoop/data


image.png


在hive里面进行创建表格,这里创建一个分区表,create external table 表名(字段 字段类型…..)partitioned by (分区字段 字段类型) rowformat delimted fields terminated by ‘分割符’,location 数据路径的祖文件夹(不包含数据的直接存储文件夹)


 建表语句:


CREATE EXTERNAL TABLE whw(ip string, atime string, url string) PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hadoop/data';


截图:


image.png


3.4.2 按日期创建分区

建立分区语句


Alter table 表名 add partition(分区字段=‘分区标签’)location 数据路径(数据文件的父文件夹)


ALTER TABLE whw ADD PARTITION(logdate='2013_05_30') LOCATION '/user/hadoop/data/datas';


image.png


image.png


ALTER TABLE whw ADD PARTITION(logdate='2013_05_31') LOCATION '/user/hadoop/data/datas1';


截图:


image.png

image.png

image.png






数据导入成功!


3.5 使用Hive对结果表进行数据分析统计

3.5.1 PV量

创建一个表使用create,这里我们把查询出来的数据,直接创建一个视图,select count(1) 统计数量,这里的语法意思就是,统计日期为2013-05-30(2013-05-31)的日志记录数量,也就是PV(浏览量)


CREATE TABLE whw_pv_2013_05_30 AS SELECT COUNT(1) AS PV FROM whw WHERE logdate='2013_05_30';


image.png


CREATE TABLE whw_pv_2013_05_31 AS SELECT COUNT(1) AS PV FROM whw WHERE logdate='2013_05_31';


image.png


3.5.2 注册用户数

这里使用一个hive里面的函数:instr(源字符串,匹配字符串),通过给定一个字符串,然后利用匹配字符串的整体,返回匹配字符串的第一个字符在源字符串的索引位置。所以该语句就是有两个条件,分别是日期和个函数所匹配到的结果,如果有这个网址那么就是返回一个索引(大于0的)


CREATE TABLE whw_reguser_2013_05_30 AS SELECT COUNT(1) AS REGUSER FROM whw WHERE logdate = '2013_05_30' AND INSTR(url,'member.php?mod=register')>0;


image.png


CREATE TABLE whw_reguser_2013_05_31 AS SELECT COUNT(1) AS REGUSER FROM whw WHERE logdate = '2013_05_31' AND INSTR(url,'member.php?mod=register')>0;


image.png


3.5.3 独立IP数

独立IP数,这里直接对我们的IP字段进行去重处理,这样就可以显示IP的独立数量了


CREATE TABLE whw_ip_2013_05_30 AS SELECT COUNT(DISTINCT ip) AS IP FROM whw WHERE logdate='2013_05_30';


image.png


CREATE TABLE whw_ip_2013_05_31 AS SELECT COUNT(DISTINCT ip) AS IP FROM whw WHERE logdate='2013_05_31';


image.png


3.5.4 跳出用户数

跳出用户数:只浏览了一个页面便离开了网站的访问次数,即只浏览了一个页面便不再访问的访问次数。这里,我们可以通过用户的IP进行分组,如果分组后的记录数只有一条,那么即为跳出用户。将这些用户的数量相加,就得出了跳出用户数


先对IP进行分组,然后使用having进行过滤 过滤这个分组里面只有一条记录的条数,最后进行计数,就得到了我们的跳出用户数量


create table whw_jumper_2013_05_30 as select count(1) as jumper from (select count(ip) as times from whw where logdate='2013_05_30' group by ip having times=1) e;


image.png


create table whw_jumper_2013_05_31 as select count(1) as jumper from (select count(ip) as times from whw where logdate='2013_05_31' group by ip having times=1) e;


image.png


将所有的查询放在一张表里:


set hive.mapred.mode=nonstrict;(解决多表连接的问题)


内连接表示查询两个表的交集,而且ON的条件为 1=1 就表示连接条件永远成立,这里使用将所有的查询结果汇总到一张数据表里面


create table whw_2013_05_30 as select '2013_05_30',a.pv,b.reguser,c.ip,d.jumper from whw_pv_2013_05_30 a join whw_reguser_2013_05_30 b on 1=1 join whw_ip_2013_05_30 c on 1=1 join whw_jumper_2013_05_30 d on 1=1;


image.png


select * from whw_2013_05_30;


image.png


create table whw_2013_05_31 as select '2013_05_31',a.pv,b.reguser,c.ip,d.jumper from whw_pv_2013_05_31 a join whw_reguser_2013_05_31 b on 1=1 join whw_ip_2013_05_31 c on 1=1 join whw_jumper_2013_05_31 d on 1=1;


image.png


select * from whw_2013_05-31;


image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
分布式计算 监控 大数据
大数据-131 - Flink CEP 案例:检测交易活跃用户、超时未交付
大数据-131 - Flink CEP 案例:检测交易活跃用户、超时未交付
80 0
|
2月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
177 0
|
17天前
|
存储 消息中间件 分布式计算
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
Cisco WebEx 早期数据平台采用了多系统架构(包括 Trino、Pinot、Iceberg 、 Kyuubi 等),面临架构复杂、数据冗余存储、运维困难、资源利用率低、数据时效性差等问题。因此,引入 Apache Doris 替换了 Trino、Pinot 、 Iceberg 及 Kyuubi 技术栈,依赖于 Doris 的实时数据湖能力及高性能 OLAP 分析能力,统一数据湖仓及查询分析引擎,显著提升了查询性能及系统稳定性,同时实现资源成本降低 30%。
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
|
1月前
|
边缘计算 人工智能 搜索推荐
大数据与零售业:精准营销的实践
【10月更文挑战第31天】在信息化社会,大数据技术正成为推动零售业革新的重要驱动力。本文探讨了大数据在零售业中的应用,包括客户细分、个性化推荐、动态定价、营销自动化、预测性分析、忠诚度管理和社交网络洞察等方面,通过实际案例展示了大数据如何帮助商家洞悉消费者行为,优化决策,实现精准营销。同时,文章也讨论了大数据面临的挑战和未来展望。
|
2月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
35 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
2月前
|
分布式计算 大数据 Linux
大数据体系知识学习(二):WordCount案例实现及错误总结
这篇文章介绍了如何使用PySpark进行WordCount操作,包括环境配置、代码实现、运行结果和遇到的错误。作者在运行过程中遇到了Py4JJavaError和JAVA_HOME未设置的问题,并通过导入findspark初始化和设置环境变量解决了这些问题。文章还讨论了groupByKey和reduceByKey的区别。
34 1
|
2月前
|
SQL 分布式计算 大数据
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
大数据-168 Elasticsearch 单机云服务器部署运行 详细流程
62 2
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
46 3
|
2月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
46 1
|
2月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
35 2