关于hive中iP地址映射地域调研

说明:日常业务经常涉及到ip映射地域的统计,有一定的使用复杂度,本文结合业界几种现状,做一次综合测试评估。

什么是ip地址库

通过ip地址获取用户地理位置信息,一般包括的信息由国家、区域(省/州)、城市、街道、经纬度、ISP提供商等信息。

质量评价标准

  • 粒度。 ip地址库中IP(段)对应的其他信息的精确程度。例如精确到国家还是市、县?不同的应用对IP地址库的粒度要求是不同的。但就IP地址库的自身评价来说,粒度越细,IP地址库的价值越大。
  • 准确度。 提供信息的准确程度,准确度越高,IP地址库的价值越大。
  • 覆盖度。 特定集合,IP地址库覆盖的比例。例如中国IPv4有3.1亿,某IP地址库中含有中国的IP地址数为2.8亿,覆盖度为90%,覆盖度越高,IP地址库越好。
  • 是否有人维护
  • 更新频率

国内外IP地址数据库

国内比较有名的是”纯真“数据库,以及最近更出来的17MON,国外常用的MaxMind、ip2location。

国内百度、淘宝、新浪对外也提供有api接口,可以获取用户经纬度,但是存在访问次数限制。

一般有人维护的,都是收费的,质量、干净、准确程度更好些。

  质量 粒度 准确度 维护 经纬度 收费 吐槽
公司 --- --- 地址库太旧
纯真 数据比较杂
17MON 暂无 只能精确到省份
MaxMind 免费/收费 中国地区,以汉语拼音显示

如下从本公司(ip库)、17MON、MaxMind(免费版)做统计查询比较。

综合来说:推荐MaxMind wiki、文档齐全,也有相应的API。

数据来源,从iplog抓取2500万条用户记录,统计用户uv

  耗时 uv
公司 101.3s  
841974 
17MON 92.3s  
1152597 
MaxMInd 170.0s  
1391777 

测试sql语句:

公司:

hive -e "create temporary function ip_to_city as 'com.renren.dolphin.udf.IpToArea';use acorn_3g;select count(distinct id) from  test_iplog where  get_json_object(ip_to_city(ip),'$.province') = '北京市';"

17MON:

hive -e "use acorn_3g;add FILE ./17monipdb.dat;add JAR ./HiveUDFs-1.0-SNAPSHOT.jar;create temporary function ip_to_mon as 'cn.gxnu.ipdata.MonIp';select count(distinct id) from test_iplog where split(ip_to_mon(ip),'\t')[1] = '北京';"

MaxMind

hive -e "add FILE ./GeoLiteCity.dat;add JAR ./HiveUDFs-1.0-SNAPSHOT.jar;CREATE TEMPORARY FUNCTION geoip as 'net.petrabarus.hiveudfs.GeoIP'; ;select count(distinct id) from acorn_3g.test_iplog where  geoip(cast (ip_num as bigint),'REGION_NAME','./GeoLiteCity.dat')='Beijing';"

新建hive函数

名称 说明 参数 返回值
iptolog IP地址转换为long型 string long
longtoip long转变为ip地址类型 long string
iptocountry 返回国家名称 ip string
iptoprovince 
返回省份名称 ip string
iptocity 返回城市名称 ip string

根据以往业务,打算开发以上几个函数,内置到hive中,减轻大家ip转地域使用复杂度

参考文献

17MON:http://tool.17mon.cn/ipdb.html

maxmind:http://dev.maxmind.com/geoip/legacy/geolite/#

使用Hive UDF和GeoIP库为Hive加入IP识别功能:http://www.cnblogs.com/likai198981/p/3465365.html


你可能感兴趣的:(关于hive中iP地址映射地域调研)