利用hadoop+hive+python+qqwry.dat批量解析ip物理地址

因为要做用户地域分布,需要将大约1000W个ip地址解析出物理地址。本文使用Hadoop+hive+python+qqwry.dat的方式实现分布式批量查询。


整体的思路是用python解析qqwry.dat文件,将ip解析出地址,并将python脚本和qqwry.dat放入hadoop缓存,达到分布式批量处理的效果。


使用Python解析ip的帖子,请看

http://demon.tw/programming/python-qqwry-dat.html


因为要将脚本配合hadoop,因此对脚本进行了简单的编辑,修改后如下:


#!/usr/bin/env python
# coding: utf-8

import sys
import socket
from struct import pack, unpack

class IPInfo(object):
        def __init__(self, dbname):
                self.dbname = dbname
                f = open(dbname, 'rb')
                self.img = f.read()
                f.close()
                (self.firstIndex, self.lastIndex) = unpack('

在hive中建表,并load数据。


数据样本如下:


[root@nn1 ~]# tail /data/pro/ip_convert/address.csv
223.255.30.125
223.255.30.126
223.255.30.134
223.255.30.137
223.255.30.138
223.255.229.70
223.255.229.76
223.255.230.61
223.255.230.75
223.255.230.78


CREATE TABLE `address`(
  `address` string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t';

load data local inpath '/data/pro/ip_convert/address.csv' overwrite into table address;



最后,进入hive开始运行,hql如下:


add file /data/pro/ipinfo/atol.py;
add file /data/pro/ipinfo/qqwry.dat;
select transform(address) using 'python atol.py' from address limit 10;



你可能感兴趣的:(hadoop,hive)