Java 如何在运行时更改map reduce作业的作业参数?

Java 如何在运行时更改map reduce作业的作业参数?,java,hadoop,mapreduce,bigdata,Java,Hadoop,Mapreduce,Bigdata,我已经写了一个地图工作,它占用了一堆推特和关键字列表,并为关键字发出推特计数 @Override public void map(Object key, Text value, Context output) throws IOException, InterruptedException { JSONObject tweetObject = null; ArrayList<String> keywords = this.getKeyWords()

我已经写了一个地图工作,它占用了一堆推特和关键字列表,并为关键字发出推特计数

@Override
public void map(Object key, Text value, Context output) throws IOException,
        InterruptedException {

    JSONObject tweetObject = null;

    ArrayList<String> keywords = this.getKeyWords();

    try {
        tweetObject = (JSONObject) parser.parse(value.toString());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (tweetObject != null) {
        String tweetText = (String) tweetObject.get("text");

        StringTokenizer st = new StringTokenizer(tweetText);

        ArrayList<String> tokens = new ArrayList<String>();

        while (st.hasMoreTokens()) {
            tokens.add(st.nextToken());
        }

        for (String keyword : keywords) {

            for (String token : tokens) {
                token = token.toLowerCase();
                if (token.equals(keyword) || token.contains(keyword)) {
                    output.write(new Text(keyword), one);
                    break;
                }
            }
        }

    }
    output.write(new Text("count"), one);

}

ArrayList<String> getKeyWords() {

    ArrayList<String> keywords = new ArrayList<String>();

    keywords.add("vodka");
    keywords.add("tequila");
    keywords.add("mojito");
    keywords.add("margarita");

    return keywords;

}
@覆盖
公共void映射(对象键、文本值、上下文输出)引发IOException,
中断异常{
JSONObject tweetObject=null;
ArrayList关键字=this.getKeyWords();
试一试{
tweetObject=(JSONObject)parser.parse(value.toString());
}捕获(解析异常){
e、 printStackTrace();
}
if(tweetObject!=null){
String tweetText=(String)tweetObject.get(“文本”);
StringTokenizer st=新的StringTokenizer(tweetText);
ArrayList标记=新的ArrayList();
而(st.hasMoreTokens()){
添加(st.nextToken());
}
for(字符串关键字:关键字){
for(字符串标记:标记){
token=token.toLowerCase();
if(token.equals(关键字)| | token.contains(关键字)){
输出.写入(新文本(关键字),一个);
打破
}
}
}
}
输出。写入(新文本(“计数”),一个;
}
ArrayList getKeyWords(){
ArrayList关键字=新建ArrayList();
关键词:添加(“伏特加”);
关键词:添加(“龙舌兰”);
关键词:添加(“莫吉托”);
关键词:添加(“玛格丽塔”);
返回关键字;
}
现在我的关键字列表在map reduce jar文件中是静态/硬编码的,如何使其成为动态的?i、 我希望能够在运行时更改关键字


最好的方法是什么

我有多种方法:查询Web服务、读取文件


在任何情况下,您可能都不希望对映射的每个记录执行此操作。使用缓存层(例如Guava)缓存外部数据源并使其失效(例如通过时间或修改)是很常见的。

如何通过读取文件来实现这一点?映射作业将在不同的服务器上运行,不同服务器的路径可能不同。@Dude您可以使用HDFS,为什么要从本地磁盘读取?但是如果我将关键字文件放入HDFS,它将在多台计算机上拆分?如何在map/reduce作业中访问该文件?您能给我举个例子吗?