Параметры Hadoop не имеют никакого эффекта (mapreduce.input.lineinputformat.linespermap, mapred.max.map.failures.percent) - PullRequest
3 голосов
/ 17 сентября 2011

Я пытаюсь реализовать задание MapReduce, где каждый из сопоставителей будет занимать 150 строк текстового файла, и все сопоставители будут выполняться одновременно; кроме того, оно не должно давать сбои, независимо от того, сколько задач с картами не сработало.

Вот часть конфигурации:

        JobConf conf = new JobConf(Main.class);
        conf.setJobName("My mapreduce");

        conf.set("mapreduce.input.lineinputformat.linespermap", "150");
        conf.set("mapred.max.map.failures.percent","100");

        conf.setInputFormat(NLineInputFormat.class);

        FileInputFormat.addInputPath(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

Проблема в том, что hadoop создает маппер для каждой отдельной строки текста, кажется, что они запускаются последовательно, и если один из них не выполняется, задание не выполняется.

Из этого я делаю вывод, что примененные мною настройки не имеют никакого эффекта.

Что я сделал не так?

Ответы [ 4 ]

3 голосов
/ 18 сентября 2011

Я предполагаю, что вы используете Hadoop 0.20. В 0.20 параметром конфигурации является «mapred.line.input.format.linespermap», и вы используете «mapreduce.input.lineinputformat.linespermap». Если параметр конфигурации не задан, то по умолчанию он равен 1, поэтому вы видите поведение, указанное в запросе.

Вот фрагмент кода из 0,20 NLineInputFormat.

public void configure (JobConf conf) {N = conf.getInt ("mapred.line.input.format.linespermap", 1); }

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

1 голос
/ 28 сентября 2011

Если вы хотите быстро найти правильные имена для параметров для нового API Hadoop, используйте эту ссылку: http://pydoop.sourceforge.net/docs/examples/intro.html#hadoop-0-21-0-notes.

1 голос
/ 18 сентября 2011

Для начала «mapred. » - это старый API, а «mapreduce. » - новый API. так что вам лучше не использовать их вместе. проверьте, какую версию вы используете, и придерживайтесь этого. А также перепроверьте ваш импорт, так как есть 2 NLineInputFormat также (mapred и mapreduce).

Во-вторых, вы можете проверить эту ссылку : (вставлю важную часть)

NLineInputFormat будет разбивать N строк ввода как одно разбиение. Итак, каждая карта получает N строк.

Но RecordReader по-прежнему является LineRecordReader, который читает одну строку в время, таким образом, Key - это смещение в файле, а Value - это строка. Если вы хотите, чтобы в качестве ключа использовалось N строк, вы можете переопределить LineRecordReader.

0 голосов
/ 28 сентября 2011

Опции нового API в основном недокументированы

...