基于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日志并进行多维度分析。
相关文章
|
20天前
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
52 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
21天前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
12 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
1天前
|
人工智能 供应链 搜索推荐
大数据分析:解锁商业智能的秘密武器
【10月更文挑战第31天】在信息爆炸时代,大数据分析成为企业解锁商业智能的关键工具。本文探讨了大数据分析在客户洞察、风险管理、供应链优化、产品开发和决策支持等方面的应用,强调了明确分析目标、选择合适工具、培养专业人才和持续优化的重要性,并展望了未来的发展趋势。
|
17天前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
22 1
|
18天前
|
分布式计算 大数据 Linux
大数据体系知识学习(二):WordCount案例实现及错误总结
这篇文章介绍了如何使用PySpark进行WordCount操作,包括环境配置、代码实现、运行结果和遇到的错误。作者在运行过程中遇到了Py4JJavaError和JAVA_HOME未设置的问题,并通过导入findspark初始化和设置环境变量解决了这些问题。文章还讨论了groupByKey和reduceByKey的区别。
13 1
|
21天前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
21 1
|
4天前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
18 0
|
19天前
|
SQL 分布式计算 大数据
大数据平台的毕业设计01:Hadoop与离线分析
大数据平台的毕业设计01:Hadoop与离线分析
|
21天前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
22天前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
44 3