Я запускаю 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)
У вас есть два ответа! :) – gsamaras