2012-06-04 3 views

ответ

20

Они вызываются для каждой задачи, поэтому, если у вас 20 запущенных mappers, для каждого будет вызываться настройка/очистка.

Один из способов получения стандартного запуска как для Mapper, так и для Reducer не использует исключения для методов map/reduce, поэтому, если в этих методах выбрано исключение, метод очистки не будет вызываться.

+4

Всегда можно вызвать метод очистки в предложении catch исключения в map/reduce. Однако для этого требуется интеллектуальный анализ возможных исключений и включение в предложения 'try/catch', чтобы поймать их. – abhinavkulkarni

4

Одно пояснение полезно. Методы настройки/очистки используются для инициализации и очистки на уровне задачи. В рамках задачи первая инициализация происходит с помощью одного вызова метода setup(), а затем все вызовы функции map() [или reduce()] будут выполнены. После этого перед выходом из задачи будет сделан еще один вызов метода cleanup().

2

Он вызван в задачу Mapper или задачу Reducer. Вот код hadoop.

public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    try { 
     while (context.nextKey()) { 
     reduce(context.getCurrentKey(), context.getValues(), context); 
     } 
    } finally { 
     cleanup(context); 
    } 
    } 
1

на редукторе можно выполнять работу job.setNumReduceTasks (1); и таким образом установка и очистка редуктора будут выполняться только один раз.