Задание структурированной потоковой передачи Spark завершено без уведомления

У меня есть задание структурированной потоковой передачи Spark, которое незаметно завершилось без явных сообщений об ошибках в журналах приложений. Он работал нормально около 10 часов, а затем начал выдавать несколько нефатальных сообщений об ошибках. Он продолжал давать результаты около суток, затем контейнер-водитель тихо умер.

Задание выполняется в кластере на базе платформы HDP с 3 узлами, управляемом в режиме кластера пряжи. Он принимает данные из Kafka, выполняет некоторые вычисления, а затем отправляет вывод в Kafka и HDFS.

Сначала я просмотрел журналы приложения yarn для контейнера драйвера и обнаружил следующие сообщения об ошибках:

19/05/19 21:02:08 ERROR AsyncEventQueue: Listener EventLoggingListener threw an exception
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: curr
ent=[DatanodeInfoWithStorage[10.8.0.247:50010,DS-6502520b-5b78-408b-b18d-a99df4fb76ab,DISK], DatanodeInfoWithStorage[10.8.0.145:50010,DS-d8133dc8
-cfaa-406d-845d-c819186c1450,DISK]], original=[DatanodeInfoWithStorage[10.8.0.247:50010,DS-6502520b-5b78-408b-b18d-a99df4fb76ab,DISK], DatanodeIn
foWithStorage[10.8.0.145:50010,DS-d8133dc8-cfaa-406d-845d-c819186c1450,DISK]]). The current failed datanode replacement policy is DEFAULT, and a
client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:1059)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:1122)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1280)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.processDatanodeError(DFSOutputStream.java:1005)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:512)

End of LogType:stderr
***********************************************************************

Это последнее сообщение водителя.

Это выглядит ужасно, но работа давала результат - 36 628 таких ошибок в день, так что это не приводило к прямому прекращению работы. Система HDFS, похоже, тоже работает.

Потом посмотрел логи исполнителя. Они вышли после смерти драйвера и не содержат ошибок или исключений:

19/05/19 21:02:09 ERROR CoarseGrainedExecutorBackend: Executor self-exiting due to : Driver ip-10-8-0-247.us-west-2.compute.internal:11269 disass
ociated! Shutting down.

Мне не удалось выяснить причину, поэтому я просмотрел журнал диспетчера ресурсов пряжи и нашел следующие сообщения:

2019-05-19 18:36:44,047 INFO  availability.MetricSinkWriteShardHostnameHashingStrategy (MetricSinkWriteShardHostnameHashingStrategy.java:findColl
ectorShard(42)) - Calculated collector shard ip-10-8-0-145.us-west-2.compute.internal based on hostname: ip-10-8-0-145.us-west-2.compute.internal
2019-05-19 19:48:04,041 INFO  availability.MetricSinkWriteShardHostnameHashingStrategy (MetricSinkWriteShardHostnameHashingStrategy.java:findColl
ectorShard(42)) - Calculated collector shard ip-10-8-0-145.us-west-2.compute.internal based on hostname: ip-10-8-0-145.us-west-2.compute.internal
2019-05-19 21:02:08,797 INFO  rmcontainer.RMContainerImpl (RMContainerImpl.java:handle(422)) - container_e01_1557249464624_0669_01_000001 Contain
er Transitioned from RUNNING to COMPLETED
2019-05-19 21:02:08,797 INFO  scheduler.SchedulerNode (SchedulerNode.java:releaseContainer(220)) - Released container container_e01_1557249464624
_0669_01_000001 of capacity <memory:1024, vCores:1> on host ip-10-8-0-247.us-west-2.compute.internal:45454, which currently has 7 containers, <me
mory:19968, vCores:7> used and <memory:2560, vCores:1> available, release resources=true
2019-05-19 21:02:08,798 INFO  attempt.RMAppAttemptImpl (RMAppAttemptImpl.java:rememberTargetTransitionsAndStoreState(1209)) - Updating applicatio
n attempt appattempt_1557249464624_0669_000001 with final state: FAILED, and exit status: -104
2019-05-19 21:02:08,798 INFO  attempt.RMAppAttemptImpl (RMAppAttemptImpl.java:handle(809)) - appattempt_1557249464624_0669_000001 State change fr
om RUNNING to FINAL_SAVING
2019-05-19 21:02:08,798 INFO  integration.RMRegistryOperationsService (RMRegistryOperationsService.java:onContainerFinished(143)) - Container con
tainer_e01_1557249464624_0669_01_000001 finished, skipping purging container-level records (should be handled by AM)
2019-05-19 21:02:08,801 INFO  resourcemanager.ApplicationMasterService (ApplicationMasterService.java:unregisterAttempt(685)) - Unregistering app
 attempt : appattempt_1557249464624_0669_000001
2019-05-19 21:02:08,801 INFO  security.AMRMTokenSecretManager (AMRMTokenSecretManager.java:applicationMasterFinished(124)) - Application finished
, removing password for appattempt_1557249464624_0669_000001
2019-05-19 21:02:08,801 INFO  attempt.RMAppAttemptImpl (RMAppAttemptImpl.java:handle(809)) - appattempt_1557249464624_0669_000001 State change fr
om FINAL_SAVING to FAILED
2019-05-19 21:02:08,801 INFO  rmapp.RMAppImpl (RMAppImpl.java:transition(1331)) - The number of failed attempts is 1. The max attempts is 2
2019-05-19 21:02:08,801 INFO  rmapp.RMAppImpl (RMAppImpl.java:handle(779)) - application_1557249464624_0669 State change from RUNNING to ACCEPTED
2019-05-19 21:02:08,801 INFO  capacity.CapacityScheduler (CapacityScheduler.java:doneApplicationAttempt(812)) - Application Attempt appattempt_15
57249464624_0669_000001 is done. finalState=FAILED

Похоже, пряжа тоже не убила работу. Контейнер с драйверами внезапно превратился из РАБОТАЕТ в ЗАВЕРШЕН.

Я ожидаю увидеть какое-то явное сообщение, такое как OOM, вызывающее сбой задания, но теперь я не понимаю, почему оно завершилось тихо. Есть ли связь с ошибкой HDFS? Есть ли в Spark какой-либо механизм для тихой остановки драйвера при слишком большом количестве исключений (даже если они не являются фатальными)? Любые советы приветствуются, спасибо!


person Kevin Li    schedule 21.05.2019    source источник


Ответы (2)


Код выхода пряжи -104 означает, что ограничения физической памяти для этот контейнер пряжи был превышен.

Контейнер остановлен из-за превышения предела выделенной физической памяти.

Поскольку вы работаете на AWS, вы можете использовать для узла драйвера более высокий тип инстанса RAM.

person Liam Clarke    schedule 21.05.2019
comment
Спасибо, Лиам, да, я думаю, это потому, что yarn уничтожил контейнер после того, как он превысил лимит памяти, вы знаете, почему это происходит? Я имею в виду, что проблемы с памятью, которые я видел раньше, обычно выводят сообщение об ошибке в журнале приложений, Spark жаловался, что не хватает памяти, поэтому я знаю, что памяти недостаточно, и это увеличит память. Но здесь кажется, что с точки зрения искры памяти было достаточно, а с точки зрения пряжи - нет. Это смущает. - person Kevin Li; 24.05.2019

Пожалуйста, проверьте ссылку ниже для получения подробной информации.

Ссылка: Проблема сбоя Bad DataNode, Hortonworks-

Причина. - Эта проблема возникает, когда мы выполняем задания в небольших кластерах (кластеры с менее чем 5 узлами данных) и при большой загрузке данных. Если в конвейере записи произошел сбой узла данных / сети, DFSClient попытается удалить отказавший узел данных из конвейера, а затем продолжит запись с оставшимися узлами данных. В результате количество узлов данных в конвейере уменьшается. Ниже описаны свойства, которые помогут нам в решении этой проблемы.

Решение: - Измените политику замены DataNode, как показано ниже -

Чтобы решить эту проблему, установите следующие два свойства: Ambari> HDFS> Конфигурации> Пользовательский сайт HDFS> Добавить свойство:

dfs.client.block.write.replace-datanode-on-failure.enable=NEVER
dfs.client.block.write.replace-datanode-on-failure.policy=NEVER
person MIKHIL NAGARALE    schedule 21.05.2019
comment
Спасибо MIKHIL, это проблема для HDP 2.6.1, 2.5.5, 2.6, 2.6.3, 2.6.4, но я использую HDP 2.6.5 и не могу найти этот параметр конфигурации. Я думаю, что это объяснило ошибку HDFS, и я попытаюсь настроить параметры HDFS, но моей основной проблемой по-прежнему является проблема с выходом из драйвера. - person Kevin Li; 24.05.2019