2014-11-11 3 views
1

Я создаю пользовательский формат вывода для hadoop и задавался вопросом, есть ли способ в выходном формате знать, когда все редукторы (RecordWriters) завершены?Формат выходного сигнала Hadoop, когда все редукторы заканчиваются?

Для того, чтобы узнать, что один RecordWriter завершен, можно использовать метод closeWriter записи, но как насчет выполнения некоторой очистки после завершения всех записей RecordWriters?

+0

какой вид очистки вам нужен? – blackSmith

+0

Я создал запись в базе данных, и мне нужно удалить ее в конце задания MR, поэтому я спрашиваю, когда заканчиваются все редукторы. – nomier

ответ

1

Вы можете использовать сам драйвер, чтобы сделать окончательную очистку вместо того, чтобы полагаться на OutputFormat. Я сомневаюсь, что он действительно предоставляет такую ​​функцию (api). Метод finalize может быть последним, но не рекомендуется вообще.

Метод waitForCompletionJob возвращается только после окончания работ. Так просто сделать это как:

boolean status = job.waitForCompletion(true); 
if(status){ 
    // clean up required for successful jobs 
} else { 
    // clean up required for failed jobs 
} 

Если очистки не имеет никакого отношения к работе в успех/провал, просто удалите if-else часть. И если вам действительно нужен метод в вашем классе OutputFormat, чтобы сделать удаление, сделайте его static. например:

job.waitForCompletion(true); 
CustomOutputFormat.cleanUp(); 

Надеюсь, этого будет достаточно.

+0

Я пробовал это решение, и это лучшее, что у меня есть до сих пор, но то, что я хотел сделать, это сделать очистку независимо от выполняемой работы, и это не будет достигнуто. Я не видел ничего в API, который упоминает, что это поддерживается. – nomier