Автономная настройка кластера Spark

У нас есть автономный кластер spark 2.1.0, работающий на одном узле с 8 ядрами и 50 ГБ памяти (один рабочий).

Запускаем искровые приложения в кластерном режиме со следующими настройками памяти —

--driver-memory = 7GB (default - 1core is used)
--worker-memory = 43GB (all remaining cores - 7 cores)

В последнее время мы наблюдали, как исполнитель часто убивался и перезапускался драйвером/мастером. Я нашел ниже журналы на драйвере -

17/12/14 03:29:39 WARN HeartbeatReceiver: Removing executor 2 with no recent heartbeats: 3658237 ms exceeds timeout 3600000 ms  
17/12/14 03:29:39 ERROR TaskSchedulerImpl: Lost executor 2 on 10.150.143.81: Executor heartbeat timed out after 3658237 ms  
17/12/14 03:29:39 WARN TaskSetManager: Lost task 23.0 in stage 316.0 (TID 9449, 10.150.143.81, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 3658237 ms  
17/12/14 03:29:39 WARN TaskSetManager: Lost task 9.0 in stage 318.0 (TID 9459, 10.150.143.81, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 3658237 ms  
17/12/14 03:29:39 WARN TaskSetManager: Lost task 8.0 in stage 318.0 (TID 9458, 10.150.143.81, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 3658237 ms  
17/12/14 03:29:39 WARN TaskSetManager: Lost task 5.0 in stage 318.0 (TID 9455, 10.150.143.81, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 3658237 ms  
17/12/14 03:29:39 WARN TaskSetManager: Lost task 7.0 in stage 318.0 (TID 9457, 10.150.143.81, executor 2): ExecutorLostFailure (executor 2 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 3658237 ms

Приложение не так интенсивно использует память, есть пара объединений и запись набора данных в каталог. Тот же код работает на spark-shell без каких-либо сбоев.

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


person veerat    schedule 14.12.2017    source источник


Ответы (3)


Во-первых, я бы посоветовал никогда не выделять 50 ГБ ОЗУ ни одному приложению, если у вашего экземпляра ровно 50 ГБ ОЗУ. Остальным системным приложениям также требуется некоторое количество оперативной памяти для работы, а оперативная память, не используемая приложениями, используется системой для кэширования файлов и уменьшения объема операций чтения с диска. Сама JVM также имеет небольшие накладные расходы на память.

Если ваша искровая работа использует всю память, то ваш инстанс неизбежно будет подкачиваться, а если подкачаться, то начнет вести себя некорректно. Вы можете легко проверить использование памяти и посмотреть, не переключается ли ваш сервер, выполнив команду htop. Вы также должны убедиться, что swapiness уменьшен до 0, чтобы он не менялся, если это действительно необходимо.

Это все, что я могу сказать, учитывая предоставленную вами информацию. Если это не поможет, вам следует рассмотреть возможность предоставления дополнительной информации, например полных точных параметров вашего задания искры.

person FurryMachine    schedule 25.05.2018

может быть проблема с памятью с исполнителем. Поэтому вы должны настроить свои ядра с памятью исполнителя в файле spark-env.sh. Его можно найти по пути ~/spark/conf/spark-env.sh :- Поскольку у вас всего 50 ГБ памяти.

export SPARK_WORKER_CORES=8
export SPARK_WORKER_INSTANCES=5
export SPARK_WORKER_MEMORY=8G
export SPARK_EXECUTOR_INSTANCES=2

И если ваши данные не слишком велики для обработки, вы можете установить память драйвера в spark-default.conf. Также дайте некоторую дополнительную память исполнителю в этом файле ~/spark/conf/spark-default.conf` как: -

spark.executor.memoryOverhead 1G
spark.driver.memory  1G
person hitttt    schedule 14.12.2017
comment
Я не получил ваши настройки кластера. В качестве кластера с одним узлом SPARK_WORKER_INSTANCES может быть один/узел, если только его узел с большим объемом памяти не является в моем случае. Я думаю, что ваши запросы конфигурации - SPARK_WORKER_CORES * SPARK_WORKER_INSTANCES = 8 * 5 = 40 ядер, которые недоступны. Точно так же есть еще кое-что, что, я думаю, здесь не поможет. Спасибо за ответ :) - person veerat; 14.12.2017
comment
У вас проблема с памятью исполнителя. Поэтому попробуйте передать служебную память исполнителю. - person hitttt; 15.12.2017

В искровой оболочке водитель также является исполнителем. Похоже, водитель убил исполнителя, потому что он не получал пульса в течение 1 часа. Обычно такты настраиваются на 10 секунд.

  1. Изменили ли вы настройки сердцебиения по умолчанию?
  2. Проверьте GC на исполнителе. Длинные паузы GC — частая причина отсутствия сердечных сокращений. Если это так, улучшите память на ядро ​​​​в вашем исполнителе. Обычно это означает увеличение памяти или уменьшение количества ядер.
  3. Есть ли что-нибудь в вашей сети, что может привести к падению сердцебиения?

Журналы ясно показывают, что драйвер убил исполнителя, потому что он не получал пульса в течение 1 часа, а также что исполнитель выполнял некоторые задачи, когда он был убит.

person Rohit Karlupia    schedule 25.05.2018