Как справиться со сценарием сбоя в Spark, записать в файл orc

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

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

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

  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)

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

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


person tenderfoot    schedule 04.02.2020    source источник


Ответы (1)


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

Поэтому, если вы не сможете написать задание ORC, вы сможете очистить папку.

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

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

person airliquide    schedule 04.02.2020
comment
Вы хотите сказать, что я должен писать в отдельный файл ORC каждый день? но, как я уже упоминал, я не хочу поддерживать несколько файлов. Мне нужен один файл орка, в который я мог бы ежедневно добавлять данные. Итак, есть ли способ реализовать этот подход, или я должен каждый день работать с отдельным файлом? - person tenderfoot; 05.02.2020
comment
Да. Невозможно добавить в файл ORC. Но чтение будет легким с подстановочным знаком, чтобы избежать всех дат на стороне чтения. Это лучший и более эффективный способ - person airliquide; 05.02.2020