2016-04-12 1 views
0

У меня есть образец входного файла, как показано ниже, который содержит порядковый номер, имя, медицину, пол, потраченное количество. Мое требование состоит в том, чтобы получить общую сумму, потраченную на каждое лекарство. Я написал программу Mapreduce и запустил ее на своей локальной машине в кластере с одним узлом с Hadoop и другими необходимыми пакетами.Похоже, что метод редуктора не работает в моем классе Reducer

  1. Ирма Эллисона, Avil, женщина, 872
  2. Хилари Буш, Avil, мужчина, 999
  3. Ахмед Мехия, парацетамол, женщина, 654
  4. Грейс Boone, метацин, женщина, 918
  5. Hayes Ortiz, парацетамол, мужчина, 734
  6. Лани Matthews, парацетамол, женщина, 836
  7. Кэтлин Стюарт, парацетамол, мужчина, 178
  8. Jonas Boone, метацин, женщина, 649
  9. Дезире Пирсон, Avil, мужчина, 439
  10. Britanney Sullivan, метацин, женщина, 659

для вышеприведенного входа я жду выход, как показано ниже.

avil 2310 
metacin 2226 
paracetamol 2402 

Когда я объявляю свой класс редуктор, как
общественного класса VisReducer расширяет Reducer < текст, IntWritable, Текст, IntWritable>. Я получаю ожидаемый результат, и все выглядит хорошо.

Но по ошибке я изменил свой класс Редуктор декларацию
общественного класса VisReducer расширяет Reducer < текст, Iterable < IntWritable>, текст, IntWritable>. Вывод, кажется, всего лишь выход Mapper и по какой-то причине выглядит, метод уменьшения в классе Reduceer не запускается. Я добавил метод System.out.println() в методе уменьшения и проверил журналы и не смог увидеть, что я напечатал. Если в первом случае я вижу результат. Я не могу понять, что вызывает проблему.

Может кто-нибудь помочь мне понять, что именно происходит.

Выход в моем втором корпусе.

avil 439 
avil 999 
avil 872 
metacin 659 
metacin 649 
metacin 918 
paracetamol 178 
paracetamol 836 
paracetamol 734 
paracetamol 654 

Это может быть очень простой вопрос, как я только начинал свое обучение Hadoop и не смогли найти соответствующие quetions онлайн.

+0

Отправьте свой код драйвера. –

ответ

0

Вы получите желаемый выход при объявлении Reducer в соответствии со спецификацией

Посетите Apache документации, на Reducer, Reducer содержит четыре параметра

org.apache.hadoop.MapReduce

Class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> 

KEYIN - the input key 
VALUEIN - the input value 
KEYOUT - the output key type 
VALUEOUT - the output value 

Из вашего примера:

public class VisReducer extends Reducer < Text, IntWritable, Text, IntWritable > 


KEYIN  - Text 
VALUEIN - IntWritable 
KEYOUT - Text 
VALUEOUT - IntWritable 

Если передать входной ключ в виде текста, ввод значения в качестве IntWritable к Reducer, он будет генерировать выходной ключ в виде текста и выходного значения как IntWritable

0

После того, как все мапперы завершают работу, они выдают в качестве ключей, значений пары. напр: предположим, 2 картографами в Уре случае выход картостроители является

mapper1 о/р

key1,value1 key2,value1

mapper2 о/р

key1,value2 key3,value1 key2,value2

А потом Reducer класс будет называться. Класс Reducer имеет 3 фазы.

1.Shuffle: Reducer копирует отсортированный вывод из каждого Mapper с использованием HTTP по сети. здесь shuffed температура о/р

key1,value1 key2,value1 key1,value2 key3,value1 key2,value2

2.Sort: Рамки слияния сортирует Концентрические входы с помощью клавиша (так как различный Mappers может иметь выводит же ключ).

здесь отсортированный температуры о/р

key1,value1 key1,value2 key2,value1 key2,value2 key3,value1

3.Reduce: В этой фазе снижения (Объект, Iterable, org.apache.hadoop.mapreduce.Reducer.Context) метод вызывается для каждого в отсортированных входах. здесь фактический уменьшить метод, который работает на картограф о/р она принимает входные данные как

key1,<value1,value2> key2,<value1,value2> key3,<value1>

Класса Редуктора декларации и метод снижения в стороне класс Reducer будет отличаться. В качестве входных параметров для класса Reducer будут выходные параметры класса Mapper (максимальные случаи), а параметры метода уменьшения будут (Object, Iterable, org.apache.hadoop.mapreduce.Reducer.Context).