2

我必须用 Java 编写一个使用外部 Web 服务的 Map Reduce 作业。我的问题是是否允许从 Map Reduce 作业的 Map 函数调用 HTTP 请求,即:

public class GeoLocator {

private static String genderCheck = "female";    

    public static class Map extends MapReduceBase implements Mapper {
    /* CALL EXTERNAL WEB SERVICE HERE */
    }
    .. 
}

如果是这样,我该如何调用 Web 服务?

4

1 回答 1

1

我认为您使用的是旧 API,因为我在您的课堂上看到了这一行,

public static class Map extends MapReduceBase implements Mapper {}

因此,对此,首先,您需要在 JobConf 对象中设置 Web 服务 URL,然后,从 JobConf 实例中检索映射器中的相同 URL。

此外,确保您的 Web 服务 url 可以从所有 Hadoop 节点访问

例如-

在 main() 函数中,您可以执行以下操作,

JobConf job = (JobConf) getConf();
job.set("webservice.url", "http://your_address_whatsoever");

在 Mapper 类中 -

String url = null;
public void configure(JobConf job) {
       url = (String) job.get("webservice.url");
} 

但我建议你使用新的 API 来让事情变得简单——

在 main() 你可以简单地去,

Configuration conf = getConf();
set("webservice.url", "http://your_address_whatsoever");

而映射器类的 map() 函数只是做

String url = context.getConfiguration().get("webservice.url");
于 2013-06-06T08:10:32.107 回答