Являются ли большие рабочие места идемпотентными? - PullRequest
0 голосов
/ 20 июня 2019

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

Задание сначала записывает данные во временный каталог, т. Е. ".Hivestaging ..." или "_teven"

Затем данные объединяются в конечный пункт назначения с помощью FileOutputCommitter по следующим критериям:

  • Если каталог назначения уже имеет каталог, он удаляется.
  • Каталог перемещен из временного местоположения в местоположение назначения.

Мой вопрос: почему мы говорим, что работа идемпотентна, либо она будет успешной, либо неудачной? Не может ли быть случай, когда некоторые данные перемещаются в корзину, и заданию не удалось переместить файлы из временного каталога в место назначения, что привело к сбою задания и потере данных?

1 Ответ

0 голосов
/ 20 июня 2019

Задания с большими данными иногда идемпотентны, а иногда не идемпотентны. Как и многие аспекты программирования.

Со следующего URL Что такое идемпотентная операция? :

В вычислениях идемпотентная операция - это операция, которая не имеет никакого дополнительного эффекта, если она вызывается более одного раза с одинаковыми входными параметрами. Например, удаление элемента из набора может рассматриваться как идемпотентная операция на множестве.

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

Однако, если ваша работа выполняет некоторые манипуляции с внешними источниками (например, загрузку в базу данных), повторные запуски могут добавить дополнительные данные. Таким образом, он не был бы идемпотентом в этом случае.

...