项目要求
根据电商日志文件,分析:
统计页面浏览量(每行记录就是一次浏览)
统计各个省份的浏览量 (需要解析IP)
日志的ETL操作(ETL:数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程)
为什么要ETL:没有必要解析出所有数据,只需要解析出有价值的字段即可。本项目中需要解析出:ip、url、pageId(topicId对应的页面Id)、country、province、city。
1. 纯真数据库 qqwry.dat
纯真数据库(QQWry.dat)是一种IP地址数据库文件,用于将IP地址转换为相应的地理位置信息。它由纯真网络开发,广泛用于中国地区的网络应用和服务。以下是关于纯真数据库的详细信息:
纯真数据库的主要功能
IP地址解析:将一个IP地址解析为地理位置,包括国家、省份、城市等信息。
地理位置查询:通过IP地址查询,可以知道访问者的大致位置,便于统计和分析。
网络安全:在某些网络安全应用中,可以通过IP地址定位来分析潜在的威胁来源。
使用场景
网站分析:网站运营者可以通过解析访问者的IP地址,了解用户的地理分布情况,从而进行更精准的市场营销和内容分发。
个性化服务:根据用户的地理位置提供定制化的内容或服务,例如推荐本地新闻、天气预报等。
网络安全监控:通过分析IP地址来源,可以识别和阻止来自某些高风险地区的访问请求,提高网络安全性。
广告投放:广告商可以根据用户的地理位置,进行精准的广告投放,提高广告效果。
使用方法
已经提供工具类utils,可以直接调用方法,即可根据ip映射对应的国家、省份、城市
具体代码放后面
使用hive编程
搭建hive环境
- hive的下载、安装、配置
- MySQL的下载、安装、配置
- 启动:hive是建立在hdfs之上的,先启动hdfs,再启动hive
- 进入hive客户端,或者访问web界面,端口3032
- 运行sql并测试
编写代码
使用 hive 只需编写sql
use test; -- 创建日志信息表 describe trackinfo; drop table if exists trackinfo; create table trackInfo( id string, url string, sessionId string, ip string, `time` string )row format delimited fields terminated by ','; -- 创建ip映射信息表 drop table if exists ipInfo; create table ipInfo( ip string, country string, province string, city string )row format delimited fields terminated by ','; --导入数据 load data local inpath "/root/SX_data/ipInfo.txt" overwrite into table ipInfo; load data local inpath "/root/SX_data/trackInfo.txt" overwrite into table trackinfo; -- 创建结果信息表 truncate table track_log; create table track_log( url string, pageId string, ip string, country string, province string, city string )row format delimited fields terminated by ','; --创建ipinfo_1存入去重数据 create table ipInfo( ip string, country string, province string, city string )row format delimited fields terminated by ','; --去重 insert into ipinfo_1 select distinct ip,county,province,city from ipinfo insert into track_log select url, regexp_extract(url,'topicId=(\\d{5})') as pageId, t.ip, i.country, i.province, i.city from trackinfo t left join ipinfo i on t.ip = i.ip ; -- 查询省份浏览量 select province, count(*) from track_log group by province; select url, regexp_extract(url,'topicId=(\\d{5})') as pageId from trackinfo t where id = '20960991758' ;
结果展示