почему nifi теряет содержимое потока файлов? - PullRequest
0 голосов
/ 14 ноября 2018

У меня очень странная проблема.

Эта ошибка появляется случайно в процессоре "EvaluateJsonPath 1.6.0". У меня есть 3 экземпляра этого процессора в моем рабочем процессе. Произошла ошибка случайным образом, она не появляется в одном месте.

Иногда поток работает нормально (очень редко). эта ошибка достаточно частая, но местоположение ошибки случайное.

поток такой: => запустить http URL -> eval результат Json -> получить больше URL -> вызвать эти http URL -> сделать eval -> ждать -> объединить весь результат -> запись в fs -> end

wait часть кода ждет около 30 мин.

каждое отношение имеет достаточно буфера (5 ГБ, 100000 фф). и я не вижу обратного давления.

системе достаточно памяти. также JVM работает с кучей 28 ГБ.

Я на версии 1.6.0

В чем может быть причина? это какой-то фоновый процесс, очищающий файл перед тем, как процесс его выпускает?

возможно, я настроил некоторую оптимизацию, которая заставляет nifi чистить папку содержимого? Это не так, папка содержимого пуста, в ней все еще есть старые файлы, так что не может быть.

Я действительно смущен.

Я вижу следующую трассировку стека

`

2018-11-14 12:04:04,120 ERROR [Timer-Driven Process Thread-2] o.a.n.p.standard.EvaluateJsonPath EvaluateJsonPath[id=d9d338ca-5396-3f8c-e134-753aacda1ca6] EvaluateJsonPath[id=d9d338ca-5396-3f8c-e134-753aacda1ca6] failed to process session due to org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile; Processor Administratively Yielded for 1 sec: org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile
org.apache.nifi.processor.exception.MissingFlowFileException: Unable to find content for FlowFile
        at org.apache.nifi.controller.repository.StandardProcessSession.handleContentNotFound(StandardProcessSession.java:3104)
        at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2228)
        at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2175)
        at org.apache.nifi.processors.standard.AbstractJsonPathProcessor.validateAndEstablishJsonContext(AbstractJsonPathProcessor.java:77)
        at org.apache.nifi.processors.standard.EvaluateJsonPath.onTrigger(EvaluateJsonPath.java:271)
        at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
        at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1147)
        at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:175)
        at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.nifi.controller.repository.ContentNotFoundException: Could not find content for StandardContentClaim [resourceClaim=StandardResourceClaim[id=1542197040430-4449, container=default, section=353], offset=844526, length=142607]
        at org.apache.nifi.controller.repository.StandardProcessSession.getInputStream(StandardProcessSession.java:2167)
        at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2192)
        ... 14 common frames omitted
Caused by: java.io.EOFException: null
        at org.apache.nifi.stream.io.StreamUtils.skip(StreamUtils.java:242)
        at org.apache.nifi.controller.repository.FileSystemRepository.read(FileSystemRepository.java:859)
        at org.apache.nifi.controller.repository.StandardProcessSession.getInputStream(StandardProcessSession.java:2135)
        ... 15 common frames omitted

`

1 Ответ

0 голосов
/ 15 июля 2019

После небольшого поиска может возникнуть проблема двух типов, которая может привести к таким ошибкам:

  1. Проблемы с содержимым сообщения

ЭтоТакая проблема должна быть воспроизводимой, поэтому, если сообщение не проходит один раз в вашем конвейере, оно должно завершиться снова при повторном запуске.Эти проблемы должны легко решаться.

На что нужно обратить внимание, так это на некорректное содержание сообщения или, возможно, даже на пустые сообщения.

Проблема с хранилищем содержимого

Когда Nifi принимает сообщение, оно помещается в хранилище содержимого, пока к нему не понадобится повторное прикосновение.Вторая возможность заключается в том, что существует проблема с хранилищем.

Вероятными причинами будет внешнее вмешательство в хранилище (что-то еще при записи / удалении / блокировке содержимого).Или, возможно, проблемы на уровне ОС.Я нашел этот угол благодаря этому сообщению HCC: https://community.hortonworks.com/questions/231364/nifi-processing-files-as-zero-bytes.html

Я не могу помочь разобраться в этом, но если вы организовали поддержку со стороны Cloudera (движущей силы Nifi), команда поддержки должна бытьвозможность дальнейшего расследования в случае необходимости.

Полное раскрытие: я сотрудник Cloudera

...