Spark структурированная потоковая работа завершилась - PullRequest
2 голосов
/ 21 мая 2019

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

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

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

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

Похоже, пряжа тоже не убивала работу.Контейнер драйвера неожиданно превратился из RUNNING в COMPLETED.

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

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Пожалуйста, проверьте ниже ссылку для деталей-

Ссылка: проблема с ошибкой узла данных Hortonworks-

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

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

Чтобы решить эту проблему, установите следующие два свойства из Ambari> HDFS> Configs> Custom HDFS site>Добавить недвижимость:

dfs.client.block.write.replace-datanode-on-failure.enable=NEVER
dfs.client.block.write.replace-datanode-on-failure.policy=NEVER
0 голосов
/ 21 мая 2019

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

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

Поскольку вы работаете в AWS, вы можете использовать более высокий тип экземпляра ОЗУ для своего узла драйвера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...