Hadoop 配置单元ip地理编码(交叉连接半大表)

Hadoop 配置单元ip地理编码(交叉连接半大表),hadoop,hive,ip-geolocation,Hadoop,Hive,Ip Geolocation,我的问题 我有500000个不同的IP地址需要进行地理编码。地理代码查找表有一个ip from和ip to范围,我必须与之进行比较,一个180万行的表 所以基本上是: select * /*+ MAPJOIN(a) */ from ip_address a cross join ip_lookup b where a.AddressInt >= b.ip_from and a.AddressInt <= b.ip_to; 问题: 1) 有人有比交叉连接更好的想法吗?我不介意再举几

我的问题

我有500000个不同的IP地址需要进行地理编码。地理代码查找表有一个ip from和ip to范围,我必须与之进行比较,一个180万行的表

所以基本上是:

select *
/*+ MAPJOIN(a) */
from ip_address a
cross join  ip_lookup b
where a.AddressInt >= b.ip_from and a.AddressInt <= b.ip_to;
问题: 1) 有人有比交叉连接更好的想法吗?我不介意再举几个(几十个)例子,但我怀疑这是否会有帮助 2) 我真的像在内存中存储ip_地址那样进行交叉映射连接吗

提前谢谢。

我去年遇到了你的(某种)问题

因为我的地理编码表安装在RAM中,所以我做了以下工作:

  • 我已经编写了Java类(我们称之为
    GeoCoder
    ),它将地理编码信息从光盘读取到RAM和 在内存中进行地理编码
  • 我已经将文件
    geocode.info
    添加到分布式缓存中(Hive
    addfile
    命令执行此操作)
  • 我已经在
    evaluate
    方法中编写了
    UDF
    ,它创建(或者如果已经创建)了
    GeoCoder
    实例。Hive
    UDF
    可以通过
    getClass().getClassLoader().getResource(“geocode.info”).getFile()
  • 现在我有了
    geocode.info
    (现在它是一个普通文件)的本地路径,其余的是一个历史记录
  • 也许这个方法有些过分(150行Java代码),但它对我来说是有效的

    我还假设您真的需要使用Hadoop(就像我做的那样)来完成任务。 500000个IP的地理编码可能可以在笔记本电脑上快速完成

    Stage-5: number of mappers: 1; number of reducers: 0