博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop(Pig)统计IP地理位置
阅读量:6974 次
发布时间:2019-06-27

本文共 2942 字,大约阅读时间需要 9 分钟。

 

很常见的分析需求:日志中记录有访客IP(国内),现在要根据IP地址得出访客的地理位置,精确到市县一级,数据量平均是每天15G,需要统计日、周、月的结果。

最后的实现方式是,先找到IP地理位置数据库,包含每个ip段对应的地址:1.1.0.0,1.1.0.255,福建省然后把它转成具体每个IP对应的地址,即:1.1.0.1,福建省。这样在Pig中用JOIN的方式,就可以获得这个IP实际对应的地址了。

IP Database

12年成立的中国广告协会互动网络分会IP地理信息标准委员会(简称IPB)已经发布了IP地理信息标准库,委员会成员和大广告公司都有一份。也可以,取其中CN部分:

点击下载文件信息:cn.csv 大小:1.26MB

有效时间:永久

读取这个文件,把ip转成数字,起止ip的差,就是这个ip段所包含的主机数,用range函数生成,主要的python代码如下:

处理结果会保存在out.csv文件中,中国地区总共有3亿个IP,生成的文件是7.9G,gz默认压缩后是900MB左右,按Map需求进行分割。

Pig Latin

LOAD保存在hdfs中的日志文件(*.log.gz)和IP数据库(ip*.tar.gz),將日志文件中的访客IP转成数字,用JOIN方法组合,再做GROUP和COUNT的操作,就可以得出该地区的访客数了:

耗时44分33秒,统计出一周的结果:

(北京市,32174022)
(保定市,4244694)
(邯郸市,1062551)
Job Name: PigLatin:ip.pig
Job-ACLs: All users are allowed
Job Setup: Successful
Status: Succeeded
Finished in: 44mins, 33sec
Job Cleanup: Successful

Afterword

之前尝试做一个Pig的UDF,用{IP : CITY}形式的字典来做IP到城市的匹配,但JAVA函数大小有限制,而且用UDF会影响性能,所以没有采用。如果是自己写REDUCE来支持类似传统 SQL中JOIN BETWEEN的方法,就不需要生成这个3亿多条记录的文件了。以上是在一个很小的测试Hadoop架构中进行的处理,理论上在实际生产环境可以处理得更 快。

 

转载于:https://www.cnblogs.com/laughing-xian/p/4742912.html

你可能感兴趣的文章
HNOI 2002 营业额统计(Splay入门)
查看>>
Python面向对象关系
查看>>
OpenCV学习(2)--基本数据结构
查看>>
PCIE错误分析
查看>>
linux服务器开发并发模型
查看>>
YYHS-Floor it(递推+矩阵乘法+快速幂)
查看>>
redis安装
查看>>
da面板修改SSH端口号
查看>>
python基础语法学习
查看>>
nginx+ssl 服务器 双向认证
查看>>
【2018】ios app真机调试到上架App Store完整教程
查看>>
ajax文件上传
查看>>
ztree树形菜单
查看>>
(一)Model的产生及处理
查看>>
A value is trying to be set on a copy of a slice from a DataFrame.
查看>>
leetcode12_C++整数转罗马数字
查看>>
网页自动登录,自动填充表单代码
查看>>
【转】web测试方法总结
查看>>
所有者,群组,其他人
查看>>
HDFS dfsclient读文件过程 源码分析
查看>>