Это действительно интересная проблема, и она фундаментальна для того, как вы реализуете аналитику данных в масштабе, где сбои неизбежны.
Алгоритм Hadoop V1
HDFS: O(1)
для фиксации задачиУстойчив к отказу в задаче коммита.Фиксация задания ~ 1006 * с большим количеством файлов;если он завершается неудачно на полпути, состояние вывода неизвестно.
S3: O(data)
для принятия задания, очень медленное для выполнения задания (O(data)
для вывода всего задания).Отсутствие атомарного переименования потенциально опасно.
Алгоритм фиксации Hadoop V2
HDFS: O(files)
для фиксации задачи, не может обработать сбой.Передача задания - это вызов O (1) touch _SUCCESS
.S3: O(data)
для фиксации задачи, не может обработать сбой, и с более длинной операцией COPY для фиксации вероятность сбоя фиксации задачи выше.
Лично я не считаю семантику сбоя V2алгоритм работы;и MapReduce, и Spark предполагают, что задача, которая не выполняется во время процесса фиксации, может быть повторена ... этого здесь нет.
Есть некоторые дополнительные детали, о которых вы не хотите знать, например, как драйверыКак сделать вывод, что задача не выполнена, как MapReduce решает, что она отделена от YARN и, следовательно, не должна фиксироваться, но, как правило, все зависит от пульса и предположения о том, что после истечения времени ожидания задачи она не выходит на поверхность.Если вы сами реализуете алгоритм фиксации, убедитесь, что коммиттер задач, который завис до тех пор, пока не завершено все задание , не повлияет на вывод
Для хранилищ объектов:
- Блок данных DBIO.Не видно кода, похоже, что они используют DynamoDB для XAs.
- IBM Stocator: прочитайте статью, Stocator: Высокопроизводительный коннектор хранилища объектов для Spark .Основное внимание уделяется минимизации HTTP-запросов и возможности отката от неудачных фиксаций задания / задачи.
- Коммиттеры S3A Hadoop 3.1, читайте: Коммиттер с нулевым переименованием .Время на выполнение задачи зависит от того, какой коммиттер выбран;в худшее время для загрузки данных с ВМ на S3.Сбои задач восстанавливаются.Фиксация задания: один * HTTP POST на файл создан, распараллелен, поэтому
O(files/threads
).Ошибка во время выполнения задания не подлежит восстановлению.
Округлить вещи;У облачных хранилищ Azure и Google есть переименования каталогов, хотя обычно это O (файлы), а не O (1), но, по крайней мере, не O (данные), как S3.Вы можете безопасно использовать коммиттер Hadoop V1.