我正在使用此配置单元查询来发现所有帐户的国家代码。问题是连接将数据集爆炸到无法管理的大小,甚至有时作业也无法完成。
完成此 geoip 查找查询的快速有效方法是什么?使用 Hive 不是强制性的
SELECT /*+ MAPJOIN(geoip) */
data.account_id, geoip.country_code
FROM data JOIN geoip
WHERE data.ip_num BETWEEN geoip.begin_ip_num AND geoip.end_ip_num
Hive 不支持BETWEEN
insideON
子句。此外,WHERE
过滤器仅在连接完成后应用。任何提示也会很有用。我目前正在尝试使用自定义 MapReduce 作业来解决此问题。有人有什么想法吗?
信息
geoip
表大小约为 1MB- Hadoop集群只有12个map slot和12个reduce slot
- 我试图根据第
begin_ip_num
一个八位位组(例如:123
of123.0.0.0
)存储 geoip 表,然后使用JOIN
子句中的条件,例如FROM data JOIN geoip ON (data.first_octet_bucket=geoip.first_octet_bucket)
. 此技术不起作用,因为某些行将被遗漏。