Могу ли я прочитать вывод редуктора, когда редуктор все еще работает?

Я пытаюсь уменьшить задержку задания mapreduce в своем потоке данных и хочу постоянно следить за выводом файла редуктора part-xxxx, используя hdfs-api, вместо того, чтобы читать его после завершения задания. но мне интересно, это безопасно для работы с хаупом?


person Shawn    schedule 05.01.2013    source источник


Ответы (1)


Когда вы используете форматы вывода на основе FileOutputFormat (текст, файл последовательности и т. д.), они используют общий FileOutputCommitter, который отвечает за фиксацию или отмену вывода редукторов, когда он завершается успешно / не удается и т. д.

За кулисами, когда ваш редьюсер записывает вывод, он записывается в подкаталог _temporary указанного вами выходного каталога HDFS.

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

Когда коммиттер вывода фиксирует вывод попытки, он просто перемещает файл part-r-xxxxx из временного каталога попытки в назначенный каталог вывода.

Имея это в виду, когда вы видите файлы part-r-* в выходном каталоге, они полностью записаны и их можно безопасно отслеживать. Таким образом, в этом смысле вы можете получить скачок при обработке вашего вывода редуктора (скажем, у вас есть 10 000 редукторов, работающих на кластере из 1000 слотов редуктора), но вы не можете запланировать другое задание map/reduce для обработки этого вывода, так как только вывод редуктора, который имеет Готово будет использоваться в следующем задании уменьшения карты (когда задание будет отправлено, оно будет рассматривать только те файлы, которые в настоящее время доступны в качестве входных данных, оно не будет постоянно сканировать новые файлы, которые появляются после отправки задания).

Вы также должны учитывать, что ваша работа может на самом деле завершиться ошибкой в ​​последних нескольких редюсерах - в этом случае вы все еще хотите с нетерпением обработать выходные данные редуктора тех, которые были завершены до сбоя, или вы хотите обрабатывать только в том случае, если все задание завершится (что имеет смысл для большинства вакансий).

person Chris White    schedule 05.01.2013