Как запустить 2 EMR Spark Step одновременно?
Я пытаюсь запустить 2 шага одновременно в EMR. Однако я всегда выполняю первый шаг и второй ожидающий.
Часть моей конфигурации пряжи выглядит следующим образом:
{
"Classification": "capacity-scheduler",
"Properties": {
"yarn.scheduler.capacity.resource-calculator": "org.apache.hadoop.yarn.util.resource.DominantResourceCalculator",
"yarn.scheduler.capacity.maximum-am-resource-percent": "0.5"
}
}
Когда я работаю на своем локальном Mac, я могу запустить приложение 2 на Yarn с аналогичной конфигурацией, где изменения на самом деле представляют собой запрос на отправку с использованием искры, чтобы соответствовать требуемой емкости и производительности кластера.
Другими словами, My пряжа настроена для запуска нескольких приложений.
Следовательно, прежде чем я углублюсь в это, я задаюсь вопросом, возможно ли на самом деле сделать шаг одновременно или только последовательно?
Еще есть какие-то советы или что-то конкретное, чтобы работать на работу одновременно?
Мой кластер перегружен по отношению к каждому запросу на работу. Поэтому я не понимаю, почему он не может работать одновременно.
1 ответ
Можно ли выполнить шаг одновременно или только последовательно?
- Сотрудники службы поддержки AWS подтвердили, что мы не можем выполнять несколько шагов параллельно (одновременно), эти шаги являются последовательными, поэтому ожидается то, что вы видите (т.е. вторая работа в состоянии ожидания).
Есть ли какие-то советы или что-то конкретное, чтобы работать одновременно?
- Вы можете просто вставить как spark-submit в скрипт bash, так и запустить скрипт bash, но вы можете потерять некоторую информацию о прямой отладке в веб-консоли AWS (которая уже работает медленно), вы можете увидеть эту информацию отладки на
spark-history server
- Вы можете просто вставить как spark-submit в скрипт bash, так и запустить скрипт bash, но вы можете потерять некоторую информацию о прямой отладке в веб-консоли AWS (которая уже работает медленно), вы можете увидеть эту информацию отладки на
On your local mac, you are able to run multiple YARN application in parallel because you are submitting the applications to yarn directly, whereas in EMR the yarn/spark applications are submitted through AWS's internal `command-runner.jar`, it does a bunch of other logging/bootstrapping etc to be able to see the `emr step` info on the web console.
Похоже, AWS наконец-то реализовала эту функцию в EMR 5.28.0!
Параметр называется "Параллелизм" в мастере консоли или StepConcurrencyLevel в API:
Задает количество шагов, которые могут выполняться одновременно. Значение по умолчанию - 1. Максимальное значение - 256.
В AWS EMR Yarn есть 2 режима работы приложения:
- клиент
- кластер
Если вы используете режим клиента, тогда только один шаг будет в состоянии выполнения в данный момент времени. Однако есть вариант, при котором вы можете выполнить более 1 шага одновременно.
попробуйте отправить свой шаг в режиме удара: spark-submit --master yarn --deploy-mode cluster --executor-memory 1G --num-executors 2 --driver-memory 1g --executor-cores 2 --conf spark.yarn.submit.waitAppCompletion=false --класс WordCount.word.App /home/hadoop/word.jar
- Вместо того чтобы позволить AWS EMR определять распределение памяти, попробуйте определить ваше распределение. Обратитесь по ссылке: http://site.clairvoyantsoft.com/understanding-resource-allocation-configurations-spark-application/
- spark.yarn.submit.waitAppCompletion = false: в режиме кластера YARN определяет, ожидает ли клиент выхода из системы до завершения приложения. Если установлено значение true, клиентский процесс будет оставаться в живых, сообщая о состоянии приложения. В противном случае клиентский процесс завершится после отправки.
Надеюсь, что это может помочь вам.
AWS теперь позволяет выполнять шаги одновременно в более поздних версиях EMR. https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-emr-now-allows-you-to-run-multiple-steps-in-parallel-cancel-running-steps-and-integrate-with-aws-step-functions/
При этом следует отметить одну вещь: заботиться о ресурсах, поскольку ваши приложения будут бороться за доступный ресурс, и одно из них может оказаться в принятом состоянии, не запустившись, пока другое не завершит работу, что приведет к поражению цели.
Вы всегда можете оставить шаг на заднем плане. не должно быть проблемой, если вы обрабатываете условия ведения журнала и гонки.
step-job.sh
#!/bin/bash
function main(){
do_this
do_that
}
if [[ "$1" == "1" ]]; then
main
else
/bin/bash "$0" 1 $@ &
fi