Кто-нибудь переопределил метод Mapper run(Context) в ваших реализациях?

https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/Mapper.html#method.summary

запустить (контекстный) метод org.apache.hadoop.mapreduce.Mapper

a). Expert users can override this method for more complete control over the execution of the Mapper.
  1. В настоящее время каково поведение метода run(Context) по умолчанию.

  2. Если я переопределю run(Context), какой особый элемент управления получит согласно документации?

  3. Кто-нибудь переопределил этот метод в ваших реализациях?


person Nireekshan    schedule 19.06.2017    source источник


Ответы (1)


  1. В настоящее время каково поведение метода run(Context) по умолчанию.

Реализация по умолчанию видна в исходном коде Apache Hadoop для Mapper:

/**
 * Expert users can override this method for more complete control over the
 * execution of the Mapper.
 * @param context
 * @throws IOException
 */
public void run(Context context) throws IOException, InterruptedException {
  setup(context);
  try {
    while (context.nextKeyValue()) {
      map(context.getCurrentKey(), context.getCurrentValue(), context);
    }
  } finally {
    cleanup(context);
  }
}

Обобщить:

  1. Вызовите setup для однократной инициализации.
  2. Перебрать все пары ключ-значение во входных данных.
  3. Передайте ключ и значение реализации метода map.
  4. Позвоните cleanup для разового демонтажа.
  1. Если я переопределю run(Context), какой специальный элемент управления будет получен в соответствии с документацией?

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

  1. Кто-нибудь переопределил этот метод в ваших реализациях?

В кодовой базе Apache Hadoop есть два переопределения этого:

  • ChainMapper позволяет объединение нескольких реализаций класса Mapper для выполнения в рамках одной задачи карты. Переопределение run устанавливает объект, представляющий цепочку, и передает каждую входную пару ключ/значение через эту цепочку преобразователей.
  • MultithreadedMapper позволяет многопоточное выполнение другого класса Mapper. Этот класс Mapper должен быть потокобезопасным. Переопределение run запускает несколько потоков, итерирующих входные пары ключ-значение и пропускающих их через базовый Mapper.
person Chris Nauroth    schedule 19.06.2017