Как обработать сценарий сбоя в записи Spark или c файл - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть сценарий использования, когда я отправляю данные из Mongodb в HDFS в файл или файл c, который выполняется каждые 1 день и добавляет данные в файл или файл c, существующий в формате hdf.

Теперь меня беспокоит, если во время записи в файл или файл c задание будет каким-то образом сбой или остановлено. Как мне справиться с этим сценарием, учитывая, что некоторые данные уже записаны в файл или c. Я хочу избежать дублирования в файле или c.

Фрагмент для записи в файл или c формат файла -

  val df = sparkSession
          .read
          .mongo(ReadConfig(Map("database" -> "dbname", "collection" -> "tableName")))
          .filter($"insertdatetime" >= fromDateTime && $"insertdatetime" <= toDateTime)

        df.write
          .mode(SaveMode.Append)
          .format("orc")
          .save(/path_to_orc_file_on_hdfs)

Я не хочу go для контрольной точки завершите СДР, так как это будет очень дорогая операция. Кроме того, я не хочу создавать несколько файлов или c. Требование - поддерживать только один файл.

Любое другое решение или подход, который я должен попробовать?

1 Ответ

0 голосов
/ 04 февраля 2020

Привет, один из лучших подходов - записывать данные в виде одной папки в день в HDFS.

Так что, если вам не удастся выполнить задание ИЛИ C, вы сможете очистить папку.

Чистка должна происходить на стороне bash вашей работы. Если код возврата! = 0, то удалите папку ИЛИ C. А затем повторите попытку.

Изменить: разбиение по дате записи будет более мощным для вас ИЛИ C чтение позже с искрой

...