Инициализируйте открытую статическую переменную в Hadoop через аргументы - PullRequest
3 голосов
/ 16 сентября 2011

У меня проблема с изменением общедоступных статических переменных в Hadoop. Я пытаюсь передать некоторые значения в качестве аргументов в файл jar из командной строки.

вот мой код:

public class MyClass {
  public static long myvariable1 = 100;
  public static class Map extends Mapper<Object, Text, Text, Text> {
    public static long myvariabl2 = 200;
    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {

    }
  }
  public static class Reduce extends Reducer<Text, Text, Text, Text> {
    public void reduce(Text key, Iterable<Text> values, Context context)
    throws IOException, InterruptedException {

    }
  }
  public static void main(String[] args) throws Exception {
    col_no = Long.parseLong(args[0]);
    Map.myvariable1 = Long.parseLong(args[1]);
    Map.myvariable2 = Long.parseLong(args[1]);
    other stuff here
  }
}

Но это не работает, myvariable1 & myvaribale2 всегда имеют 100 & 200. Я использую Hadoop 0.20.203 с Ubuntu 10.04

1 Ответ

4 голосов
/ 16 сентября 2011

То, что вы можете сделать, чтобы получить то же поведение, это сохранить ваши переменные в конфигурации, которую вы используете для запуска задания.

public static class Map extends Mapper<Object, Text, Text, Text> {
  public void map(Object key, Text value, Context context) throws IOException, InterruptedException {

    Configuration conf = context.getConfiguration();
    String var2String = conf.get("myvariable2");
    long myvariable2 = Long.parseLong(var2String);
    //etc.
  }
}

public static void main(String[] args) throws Exception {
  col_no = Long.parseLong(args[0]);
  String myvariable1 = args[1];
  String myvariable2 = args[1];

  // add values to configuration
  Configuration conf = new Configuration();
  conf.set("myvariable1", myvariable1);
  conf.set("myvariable2", myvariable2);

  //other stuff here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...