我必须在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服务?
我认为你在使用旧的API,因为,我在你的类中看到这一行,
public static class Map extends MapReduceBase implements Mapper {}
因此,首先,您需要在JobConf对象中设置web服务URL,然后,从JobConf实例中检索映射器中的相同URL。
此外,确保您的webservice 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");