Когда безопасно удалять файлы при использовании потоковой передачи на основе файлов? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую потоковую передачу с помощью Spark на основе файлов и хочу удалить старые файлы с диска.

Приложение Spark очень простое: просто читайте текстовые файлы, count () и pprint (). Работает нормально. Нет окон или что-нибудь.

Но с интервалом, скажем, 5 секунд, если я удаляю файлы после, скажем, 5 минут, Spark будет жаловаться на отсутствующий файл.

Это связано со сборкой мусора? Должны ли исходные файлы существовать в течение всего срока службы RDD в DStream? Могу ли я заставить мой DStream отказаться от СДР после определенного интервала.

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

1 Ответ

0 голосов
/ 27 апреля 2018

Удаление файлов может создать проблемы двумя способами: -

Во-первых, DStream.clearMetadata(..) (и методы в производных классах) отвечают за удаление старых СДР.

DStream учитывает rememberDuration - которое вычисляется на интервале между партиями, minRememberDuration и т. Д.

Представляется целесообразным удалять только те файлы, для которых соответствующий СДР больше не существует.

Во-вторых, в процессе поиска новых файлов FileInputDStream сначала получит список каталогов, а затем запросит у каждого файла свое последнее измененное время по очереди (в findNewFiles(..)), чтобы определить, является ли файл новым. Следовательно, если файл удаляется между этими двумя шагами, даже если он старый - вторая проверка завершится неудачей - поскольку файл больше не существует.

Удаление старых файлов может работать некоторое время, но рано или поздно это не удастся. Если время, необходимое для создания списка новых файлов, приближается к интервалу пакета, вероятность сбоя возрастает.

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

...