gpt4 book ai didi

java - 如何在 MapReduce hadoop 中使用 GeoLite 数据库?

转载 作者:可可西里 更新时间:2023-11-01 16:52:27 25 4
gpt4 key购买 nike

我正在尝试编写一个 Map Reduce 程序,我正在尝试使用 GeoLite 数据库来解析 IP 地址的位置。我不确定如何将数据库文件传递给映射器以及要使用哪些依赖项?

最佳答案

在 Map Reduce hadoop 中使用 GeoLite 数据库的一种方法是将数据库作为缓存文件传递,方法是使用:

DistributedCache.addCacheFile(inputPath.toUri(), job.getConfiguration());

您可以使用缓存文件将 .mmdb 文件传递​​给每个映射器。

我用于使用 GeoLite 数据库的依赖项是:

    </dependency>
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.3.0</version>
</dependency>

<dependency>
<groupId>com.maxmind.db</groupId>
<artifactId>maxmind-db</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>

然后您可以覆盖设置并将缓存文件传递给映射器,如下所示:

@Override
public void setup(Context context)

{
Configuration conf = context.getConfiguration();

try {

cachefiles = DistributedCache.getLocalCacheFiles(conf);

File database = new File(cachefiles[0].toString());

reader = new DatabaseReader.Builder(database).build();

} catch (IOException e) {
e.printStackTrace();
}

}

然后我在 map 函数中使用了这样的:

public void map(Object key, Text line, Context context) throws IOException,
InterruptedException {

InetAddress ipAddress = InetAddress.getByName(address.getHostAddress());
CityResponse response = null;
try {
response = reader.city(ipAddress);
} catch (GeoIp2Exception ex) {
ex.printStackTrace();
return;
}

Country country = response.getCountry();
String count = country.getName(); // 'US'

if (country.getName() == null) {
return;
}

您可以查看工作示例 here .

关于java - 如何在 MapReduce hadoop 中使用 GeoLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com