1

Я запускаю Spark 1.5.1 в автономном (клиентском) режиме с использованием Pyspark. Я пытаюсь запустить работу, которая, по-видимому, тяжелая память (в питоне, который не должен быть частью настройки памяти исполнителя). Я тестирую машину с 96 ядрами и 128 ГБ оперативной памяти.Spark запускает больше исполнителей, чем указано

У меня есть хозяин и рабочий, который начал использовать скрипт start -all.sh в/sbin.

Это конфигурационные файлы, которые я использую в/conf.

искровым defaults.conf:

spark.eventLog.enabled   true 
spark.eventLog.dir    /home/kv/Spark/spark-1.5.1-bin-hadoop2.6/logs 
spark.serializer     org.apache.spark.serializer.KryoSerializer 
spark.dynamicAllocation.enabled false 
spark.deploy. 
defaultCores  40 

spark-env.sh:

PARK_MASTER_IP='5.153.14.30' # Will become deprecated 
SPARK_MASTER_HOST='5.153.14.30' 
SPARK_MASTER_PORT=7079 
SPARK_MASTER_WEBUI_PORT=8080 
SPARK_WORKER_WEBUI_PORT=8081 

Я начинаю свой скрипт, используя следующую команду:

export SPARK_MASTER=spark://5.153.14.30:7079 #"local[*]" 
spark-submit \ 
    --master ${SPARK_MASTER} \ 
    --num-executors 1 \ 
    --driver-memory 20g \ 
    --executor-memory 30g \ 
    --executor-cores 40 \ 
    --py-files code.zip \ 
<script> 

Теперь, Я замечаю поведение, которое я не понимаю:

  • Когда я запускаю приложение с настройками выше, я ожидаю, что будет 1 исполнитель. Однако запускаются 2 исполнителя, каждый из которых имеет 30 г памяти и 40 ядер. Почему искра это делает? Я пытаюсь ограничить количество ядер, чтобы иметь больше памяти на ядро, как я могу обеспечить это? Теперь мое приложение убивается, потому что оно использует слишком много памяти.
  • Когда я увеличиваю executor-cores до более 40, моя работа не начинается из-за нехватки ресурсов. Я ожидаю, что это связано с установкой defaultCores 40 в моих значениях по умолчанию. Но разве это просто резервная копия, когда мое приложение не предоставляет максимальное количество ядер? Я должен переписать это право?

Извлечение из сообщений об ошибках, которые я получаю:

Lost task 1532.0 in stage 2.0 (TID 5252, 5.153.14.30): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed) 
    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:203) 
    at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:207) 
    at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:125) 
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
    at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:69) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:262) 
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70) 
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:297) 
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264) 
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) 
    at org.apache.spark.scheduler.Task.run(Task.scala:88) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:392) 
    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:139) 
    ... 15 more 

[...] 

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 111 in stage 2.0 failed 4 times, most recent failure: Lost task 111.3 in stage 2.0 (TID 5673, 5.153.14.30): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed) 
+0

У вас есть два ответа! :) – gsamaras

ответ

1

Проверить или установить значение для spark.executor.instances. Значение по умолчанию равно 2, что может объяснить, почему вы получаете 2 исполнителя.

Поскольку ваш сервер имеет 96 ядер, а вы устанавливаете значения по умолчанию для 40, у вас есть только 2 исполнителя с 2 * 40 = 80. Остальные 16 ядер недостаточны для другого исполнителя, а драйвер также требует ядра ЦП.

0

Ожидает, что будет 1 исполнитель. Однако, 2 исполнителя запущены

Я думаю, что один исполнитель вы видите, это на самом деле водитель.

Итак, один мастер, один подчиненный (всего 2 узла).

Вы можете добавить в скрипт эти конфигурации флаги:

--conf spark.executor.cores=8  <-- will set it 8, you probably want less 
--conf spark.driver.cores=8   <-- same, but for driver only 

моя работа не запускался из-за не достаточно ресурсов.

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

Контейнер может превышать пределы его памяти (вы должны быть в состоянии видеть больше в журналах, чтобы быть уверенным, хотя).

 Смежные вопросы

  • Нет связанных вопросов^_^