Hadoop Reducer: как я могу выводить в несколько каталогов, используя умозрительное выполнение?

У меня есть редуктор, который должен выводить результаты в разные каталоги, чтобы впоследствии мы могли использовать выходные данные в качестве входных данных для Hive в качестве секционированной таблицы. (Hive создает разделы на основе имени папки). Чтобы писать в эти места, в настоящее время мы не используем какую-либо инфраструктуру Hadoop для этого, мы просто пишем в разные места, так сказать, за спиной Hadoop. Другими словами, мы не используем API hadoop для вывода этих файлов.

У нас были проблемы с mapred.reduce.tasks.speculative.execution установлен в true, Я понимаю, что это так, потому что несколько попыток для одной и той же задачи пишут в одно и то же место.

Есть ли способ правильно использовать API Hadoop для вывода в несколько разных папок из одного и того же редуктора, чтобы я также мог использовать mapred.reduce.tasks.speculative.execution=true? (Я знаю о MultipleOutputs, который я не уверен, поддерживает спекулятивное выполнение.)

Если так, есть ли способ сделать это и вывести на S3?

2 ответа

Решение

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

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

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

Другие вопросы по тегам