学习笔记--hive网站日志统计分析(代码片段)

一加六 一加六     2022-12-10     617

关键词:

前言

本次实践的目的是结合之前所学flume、hadoop、hive几个主要技术,完成一个小案例。
目标:
统计出独立ip数量
统计一个ip使用的header数量
访问最多的url链接 每个ip常访问的url
单日每小时访问量折线图

准备

安装并配置好flume、hadoop、hive
hive安装配置
hadoop安装配置
数据源 nginx日志文件access.log

需修改nginx日志输出格式
满足如下格式,可减免数据清洗步骤

10.88.122.105  09:15:04  GET /js/pagination.js HTTP/1.1
304 0 "http://10.88.105.20:8063/stockrecommand.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)" 


准备一台服务器运行web服务,使用nginx做代理,使用flume采集nginx生产的日志上传至hdfs;

修改hdfs默认配置
因为我的网站每天只产生很少的数据量远小于hdfs默认的(128M)块大小因此为避免空间浪费需修改默认块大小

#修改默认块大小
<property>
	<name>dfs.blocksize</name>
	<value>10240000</value>
</propery>
#修改检查块大小 满足块大小整除检查块大小
<property>
	<name>dfs.bytes-per-checksum</name>
	<value>512</value>
</property>

yran资源管理器配置
在用hive操作时使用的内存会大于默认分配的资源因此需修改

#使用物理内存大小
  <property>
     <name>yarn.nodemanager.resource.memory-mb</name>
     <value>2048</value>
  </property>
  <property>
     <name>yarn.scheduler.maximum-allocation-mb</name>
     <value>2048</value>
  </property>

flume采集方案

cd /export/servers/flume/conf/

#定义三大组件的名称

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1

agent1.sources.source1.type = exec
agent1.sources.source1.command = tail -F /www/wwwlogs/139.198.168.168.log
agent1.sources.source1.channels = channel1

agent1.sinks.sink1.hdfs.path =hdfs://master:9000/weblog/year=20%y/month=%m/day=%d
agent1.sinks.sink1.hdfs.filePrefix = mylog
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat = Text
# 当文件滚动  生成新文件
# 配置文件滚动方式(文件大小10M) #8M
agent1.sinks.sink1.hdfs.rollSize = 8000000
agent1.sinks.sink1.hdfs.rollCount = 0
agent1.sinks.sink1.hdfs.rollInterval = 0
# 指的是正在写的hdfs文件多长时间不更新就关闭文件
agent1.sinks.sink1.hdfs.idleTimeout = 5
agent1.sinks.sink1.hdfs.minBlockReplicas = 1
# 向hdfs上刷新的event的个数
# 这三者之间的关系:batchsize <=transactionCapacity<=capacity
# 就是sink会一次从channel中取多少个event去发送,而这个发送是要最终以事务的形式去发送的
agent1.sinks.sink1.hdfs.batchSize = 10

# 我们打算对时间戳根据分钟以每10分钟为单位进行四舍五入。
# agent1.sinks.sink1.hdfs.round = true
# agent1.sinks.sink1.hdfs.roundValue = 24
# agent1.sinks.sink1.hdfs.roundUnit = hour
 
agent1.sinks.sink1.hdfs.useLocalTimeStamp = true
 
#使用通道在内存中缓冲事件
agent1.channels.channel1.type = memory
agent1.channels.channel1.keep-alive = 120
# capacity是指整个队列的缓存最大容量
agent1.channels.channel1.capacity = 1500
# transactionCapacity则是指事务event的最大容量,即每次传输的event最大为多少
agent1.channels.channel1.transactionCapacity = 100
 
#将源和接收器绑定到通道
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
agent1.sinks.sink1.type = hdfs

启动flume采集

#/bin/bash
#执行参数解析
nohup flume-ng agent --conf /export/servers/flume-1.9.0/conf --conf-file flume-spark-push.properties -name a1  >> /export/data/flume/loglisence.log &
#1、flume-ng  agent   运行一个Flume Agent
#2、--conf  指定配置文件路径
#3、--conf-file 收集方案文件
#4、-name  a1  Agent的名称 即上面的前缀 agent1

查看收集的记录

HIVE操作

首先在hive创建日志表,

create external table mlog(ip string,
mtime string,
url string,
respCode int,
header string)
partitioned by (year string,month string,day string)
row format delimited
fields terminated by '\\t';
location 'mylog/';

然后在hive shell commend repair一下mlog表;

msck repair table mlog;

将分区数据添加到metastore

数据查询
全部记录 5866479

select count(*) from log;


独立ip数量 2387

select count(distinct(ip)) from log;


一个ip使用header数量

select ip,count(distinct(header)) c  from log group by ip order by c desc# limit 10;


访问最多的url

select url,count(url) c from log group by url order by c desc;

每个ip访问最多的url

select ip,url,count(url) c from log group by ip,url order by c desc#limit 300;

每小时访问量 指定分区

#不区分ip
select substring(mtime,0,2),count(*) from log where year='2021' and month='11' and day='07' group by substring(mtime,0,2) limit 10;
#每小时独立ip访问量
select substring(mtime,0,2),count(distinct(ip)) from log where year='2021' and month='11' and day='07' group by substring(mtime,0,2) limit 10;
#

编写shell脚本将每天的小时访问量数据导出到mysql,

hive -e "create table qph as select substring(mtime,0,2),count(distinct(ip)) from log where year='2021' and month='11' and day='07' group by substring(mtime,0,2) limit 10;"

sqoop export --connect jdbc:mysql://localhost:3306/loginfo
--uername hadoop --password pwd --table daily 
--fields-terminated-by '\\001' --export-dir 'user/hive/warehouse/log/qph'

hive -e "drop table qph;"

添加定时任务
crontab -e
加入以下内容
00 00 * * * /bin/sh /user/local/src/mysh/daily.sh
每天凌晨0点执行昨天的日志统计任务,储存到mysql。
可视化数据
6.4样例

7.总结
实现了分析网站访问日志,统计出关键的信息(浏览量、注册数量、独立IP访问数量、跳出率),统计各模块的访问数量,一天内每个时刻的四项指标访问量。可供网站决策者,也就是我自己,分析数据做出对热度较高的版块加关注,对热度低的板块做优化等。
缺陷与不足是,将网站和后台数据处理一并部署在一台云服务器上了,采用的单机,性能限制很大,做MapReduce清洗时服务器负载较大,特别容易挂掉。
遇到的问题与困难是,各项指标的sql和hql语句使用并不熟悉,导致导出的可使用的数据并不多。

学习笔记hive——hive应用——数据库定义创建表(代码片段)

一、任务讲解泰坦尼克号乘客信息存储与分析泰坦尼克号乘客信息存储与分析:创建乘客信息表导入数据到表中统计获救与死亡情况统计舱位分布情况统计港口登船人数分布情况统计性别与生存率的关系统计客舱等级与生存... 查看详情

spark综合学习笔记搜狗搜索日志分析(代码片段)

...,调用Transformation函数和Action函数进行处理不同业务统计分析三、分词工具测试使用比较流行好用的中文分区:HanLP,面向生产环境的自然语言处理工具包,HanLP是由一系列模型与算法组成的Java工具包,目标是普及... 查看详情

学习笔记hive——实例:航空客户价值分析数据预处理(代码片段)

一、背景与目标1.1、背景1.、行业内竞争民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司、民营航空公司,甚至国外航空巨头。航空产品生产过剩,产品同质化特征愈加明显,... 查看详情

hive学习笔记(代码片段)

安装配置安装hive下载hive解压重命名添加环境变量Vi/etc/proflie使环境变量生效Source/etc/profile修改配置文件cphive-env.sh.templatehive-env.shHiveMetastore配置将自带的derby数据库替换为mysql数据库参考文章https://my.oschina.net/u/4292373/blog/3497563登录... 查看详情

学习笔记hive——hive应用——hive查询(代码片段)

五、Hive查询5.1、创建职工信息表任务实现:1、创建表dept,emp和salgrade2、导入数据将数据emp.txt导入到表emp#emp.txt7369,SMITH,CLERK,7902,1980-12-17,800.00,,207499,ALLEN,SALESMAN,7698,1981-2-20,1600.00,300.00,307521,WARD,SALE 查看详情

学习笔记hive——hive应用——hive导入及导出数据(代码片段)

四、Hive导入及导出数据通过HDFS直接导入导出通过Hive命令导入导出4.1、Hive导入数据的语法LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]LOCAL:导入语句带有LOCALÿ 查看详情

学习笔记hive——hive安装配置(代码片段)

一、环境介绍环境描述4个Linux操作系统虚拟机使用centos7镜像配置安装java1.8以上版本安装Hadoop2.6.5以上版本安装MySQL5.1以上版本二、安装MySQL(这里我是CentOs7)安装教程链接:https://www.jb51.net/article/150557.htm1、安装完成... 查看详情

深入浅出学习hive(代码片段)

本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情

深入浅出学习hive(代码片段)

本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情

深入浅出学习hive(代码片段)

本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情

hive网站日志数据分析

...在前面的话  上一篇,楼主介绍了使用flume集群来模拟网站产生的日志数据收集到hdfs。但我们所采集的日志数据是不规则的,同时也包含了许多无用的日志。当需要分析一些核心指标来满足系统业务决策的时候,对日志的数据... 查看详情

sql使用hadoop,hive和hbase进行apache日志分析(代码片段)

查看详情

学习笔记hive——查询优化(代码片段)

一、视图1.1、Hive的视图视图是基于数据库的基本表进行创建的一种伪表,数据库中储存视图的定义,不存数据项,数据项仍然存在基本表中它可作为一个抽象层,将数据发布给下游用户。目前Hive版本支持逻辑视... 查看详情

python数据分析与挖掘学习笔记-电商网站数据分析及商品自动推荐实战与关联规则算法(代码片段)

这一节主要涉及到的数据挖掘算法是关联规则及Apriori算法。由此展开电商网站数据分析模型的构建和电商网站商品自动推荐的实现,并扩展到协同过滤算法。关联规则最有名的故事就是啤酒与尿布的故事,非常有效地说... 查看详情

hive学习之路(二十)hive执行过程实例分析(代码片段)

一、Hive执行过程概述1、概述(1)Hive将HQL转换成一组操作符(Operator),比如GroupByOperator,JoinOperator等(2)操作符Operator是Hive的最小处理单元(3)每个操作符代表一个HDFS操作或者MapReduce作业(4)Hive通过ExecMapper和ExecReducer执行Map... 查看详情

hive学习02天-访问次数统计(代码片段)

hive的写法和sql类似,却又有一点不一样,本次采用模拟数据编写hql统计访问次数:求出当月的访问次数,截至当月前的每个月最大访问次数、截至当月前每个用户总的访问次数。数据表如下A,2015-01,5A,2015-01,15B,2015-01,5A,2015-01,8B,201... 查看详情

学习笔记hive——自定义函数(代码片段)

一、自定义函数简介1.1、函数类型UDF:用户定义函数UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)UDAF:用户定义聚集函数UDAF接受多个输入... 查看详情

hive的数据案例统计网站的数据信息(代码片段)

根据hive的案例一增加需求一:增加案例需求:统计pv,uv,登录人数,游客人数,平均访问时长,二跳率,独立IP用一张表去处理1.1查看track_log的分区showpartitionstrack_log;1.2建立一张会话信息表(session):createtablesession_info(session_idstring,guids... 查看详情