Как передать пользовательские параметры, используя объект конфигурации Hadoop MapReduce? - PullRequest
0 голосов
/ 24 марта 2012

Я относительный новичок в Hadoop MapReduce.Я пробовал вариант образца WordCount в http://archive.cloudera.com/cdh/3/hadoop/mapred_tutorial.html.В моем исходном файле есть дополнительные столбцы, и я хочу иметь возможность указать, по какому столбцу должно происходить суммирование.

В методе run (...) (строки с 87 по 116) аргументы передаются изкомандная строка.У меня есть два дополнительных аргумента, один из которых имеет разделитель, а второй - позицию столбца, для которого я хочу выполнить фильтрацию).

Я устанавливаю эти значения как

    if (args.length == 5) {
        conf.set("ipPosition", args[4]);
    }
    if (args.length == 6) {
        conf.set("delimiter", args[5]);
    }

Однако, когда я пытаюсь получить эти значения в методе configure (строка 28 примера), они возвращают ноль.

    public void configure(JobConf job) {
        try {
            String varIpPosition = job.get("ipPosition");
            if (varIpPosition != null) {
                ipPosition = Integer.parseInt(varIpPosition);
            }
            String varDelimiter = job.get("delimiter");
            if (varDelimiter != null) {
                if (varDelimiter == "comma") {
                    lineDelimiter = ",";
                } else {
                    lineDelimiter = " ";
                }
            }
            System.err.println("IP Position" + ipPosition);
        } catch (Exception ex) {
            System.err.println("Error Configuring Job :"
                    + job.get("ipPosition") + " - "
                    + StringUtils.stringifyException(ex));
        }
    }

Я неправильно устанавливаю параметры конфигурации или неправильно получаю их?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 марта 2012

Как уже упоминалось в комментариях выше. Это была «ошибка кода». Ничего плохого в API. Если условия должны быть

if (args.length >= 5) {
    conf.set("ipPosition", args[4]);
}
if (args.length >= 6) {
    conf.set("delimiter", args[5]);
}

Спасибо.

...