Искра на Кубернетес, внезапно грохот стручков - PullRequest
0 голосов
/ 11 мая 2018

Ниже тестируемый сценарий,

Работа: Задание Spark SQK написано на Scala и выполняется на 1 ТБ ДАННЫХ ЭТАП TPCDS BENCHMARK, которые представлены в виде паркета, мгновенного формата и таблиц кустов.

Диспетчер кластеров: Kubernetes

Конфигурация Spark sql:

Набор 1:

spark.executor.heartbeatInterval 20s
spark.executor.cores 4
spark.driver.cores 4
spark.driver.memory 15g
spark.executor.memory 15g
spark.cores.max 220
spark.rpc.numRetries 5
spark.rpc.retry.wait 5
spark.network.timeout 1800
spark.sql.broadcastTimeout 1200
spark.sql.crossJoin.enabled true
spark.sql.starJoinOptimization true
spark.eventLog.enabled true
spark.eventLog.dir hdfs://namenodeHA/tmp/spark-history
spark.sql.codegen true
spark.kubernetes.allocation.batch.size 30

Комплект 2:

spark.executor.heartbeatInterval 20s
spark.executor.cores 4
spark.driver.cores 4
spark.driver.memory 11g
spark.driver.memoryOverhead 4g
spark.executor.memory 11g
spark.executor.memoryOverhead 4g
spark.cores.max 220
spark.rpc.numRetries 5
spark.rpc.retry.wait 5
spark.network.timeout 1800
spark.sql.broadcastTimeout 1200
spark.sql.crossJoin.enabled true
spark.sql.starJoinOptimization true
spark.eventLog.enabled true
spark.eventLog.dir hdfs://namenodeHA/tmp/spark-history
spark.sql.codegen true
spark.kubernetes.allocation.batch.size 30

Используется Kryoserialiser со значением spark.kryoserializer.buffer.mb 64 МБ. 50 исполнителей создаются с помощью аргумента spark.executor.instances = 50.

Наблюдаемые проблемы:

Задание Spark SQL внезапно завершается, а драйверы и исполнители убиваются случайным образом. Стручки водителя и исполнителей внезапно погибают, а работа не выполняется.

На разных трассах найдено несколько разных трасс стека,

Stack Trace 1:

"2018-05-10 06:31:28 ERROR ContextCleaner:91 - Error cleaning broadcast 136
org.apache.spark.SparkException: Exception thrown in awaitResult:
        at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:205)"

Прикрепленный файл: StackTrace1.txt

Stack Trace 2:

"org.apache.spark.shuffle.FetchFailedException: Failed to connect to /192.178.1.105:38039^M
        at org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:442)^M
        at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:418)"

Прикрепленный файл: StackTrace2.txt

Stack Trace 3:

"18/05/10 11:21:17 WARN KubernetesTaskSetManager: Lost task 3.0 in stage 48.0 (TID 16486, 192.178.1.35, executor 41): FetchFailed(null, shuffleId=29, mapId=-1, reduceId=3, message=^M
org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 29^M
        at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:697)^M
        at org.apache.spark.MapOutputTracker$$anonfun$org$apache$spark$MapOutputTracker$$convertMapStatuses$2.apply(MapOutputTracker.scala:693)"

Прикрепленный файл: StackTrace3.txt

Stack Trace 4:

"ERROR KubernetesTaskSchedulerImpl: Lost executor 11 on 192.178.1.123: Executor lost for unknown reasons."

Это повторяется до тех пор, пока исполнители не умрут полностью без следов стека.

Кроме того, мы видим 18/05/11 07:23:23 INFO DAGScheduler: fail: Set () что это значит ? что-то не так или он говорит, что сбойный набор пуст, что означает отсутствие сбоя?

Наблюдения или изменения опробованы: - Контролировал использование памяти и ЦП между исполнителями, и ни один из них не выходит за пределы.

  • По нескольким прочтениям и предложениям spark.network.timeout было увеличено до 600 с 600, но не помогло.

  • Кроме того, объем памяти драйвера и исполнителя был сохранен по умолчанию в наборе 1 конфигурации и составлял 0,1 * 15 г = 1,5 ГБ. Также увеличил это значение явно до 4 ГБ и уменьшил значения памяти драйвера и исполнителя до 11 ГБ с 15 ГБ в соответствии с набором 2. это не дало каких-либо ценных результатов, такие же сбои наблюдаются.

Spark SQL используется для выполнения запросов, пример строк кода:

val qresult = spark.sql(q)
    qresult.show()

В коде не выполняется перераспределение вручную.

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