Apache Spark Resource Management и модель приложений от YARN
Краткий обзор разницы между тем как Spark и MapReduce управляют ресурсами с помощью YARN. Также посмотрим на разницу между Spark и MapReduce архитектурой, почему это важно и как они работают в кластере с ресурс медежрером YARN.
Наиболее популярным YARN приложением после MapReduce является Apache Spark.
Наиболее популярным YARN приложением после MapReduce является Apache Spark.
Приложения
В MapReduce, "job" является блоком наивысшего уровня. Система загружает данные в map функцию, перемешивает их и отправляет в reduce функцию. После записывает результат обратно в хранилище. Spark имеет похожий принцип работы(job может состоять не только из шагов map и reduce), но он имеет ещё один блок уровня управления , который называется "application", который может запустить много job-в в последовательном или паралельном режиме.
Архитектура Spark приложений
Для тех, кто хорошо знаком с SPARK API, приложению соответствует экземпляр класса SparkContext. В приложении может быть использован однин job, интерактивная сессия с несколькими job-ами отдельно, или долгоживущий сервер отвечающий на запросы. В отличии MapReduce, приложения имеет процессы, которые называются Executor-ами, которые запущены от имени кластера даже если они не выполняют никаких job-ов. Этот подход обеспечивает хранение данных в памяти для быстрого доступа а также быстрый запуск тасок.
Executor-ы
MapReduce запускает каждую таску в собственном процессе. Когда таска заканчивает свою работу, процесс умирает. В Spark-е много тасок могут быть запущено одновременно в рамках одного процесса, и этот процесс жывёт постоянно на протяжении всего времени жизни Spark приложения, даже когда не существует job-ов, которые нужно выполнять.
Приемуществом такой модели является скорость: таски могут быть запущены очень быстро и обрабатывать данные, которые находяться в оперативной памяти. Недостатком является грубое распределение ресурсов. Так как колличество exectutor-ов в приложении фиксировано и каждый executor имеет часть своих выделенных ресурсов, то приложение занимает это эти ресурсы на протяжении всего времени своей работы. Пока в YARN не реализована функция динамического ресайза контейнера.
Active Driver
В управлении ресурсами и расписанием тасок Spark полагается на процесс active driver. Практически процесс active driver является тем самым клиентом, который инициализирует job-ы. В отличии от MapReduce, клиент-прцесс может быть отключён в любой момент и job будет продолжать свою работу. В Hadoop 1.x JobTracker был ответственнен за управление тасками а в Hadoop 2.x эту роль на себя взял MapReduce application master.
Подключаемые ресурс-менеджеры
Spark поддерживает возможность подключить другие менеджеры кластера. Менеджер кластера ответственен за запуск процессов execut-ора. Spark приложением не нужно беспокоиться о том какой именно менеджер кластера запущен вместе с Spark-ом.
Spark поддерживает YARN, Mesos, и его собственный "standalone" меджер кластера. Все три фреймворка имеют 2 компонента. Центральный master сервис(YARN ResourceManager, Mesos master или Spark standalone master) решает какое приложение получит процесс exetutor-a для выполнения. Slave сервис запускается на каждой ноде(YARN NodeManager, Mesos slave или Spark standalone slave) собственно стартует процес executor-a. Он тажке мониторит его работоспособность и потребление ресурсов.
Почему работать с YARN?
Использование YARN в роли менеджера Spark кластера имеет несколько приемуществ перед Spark standalone и Mesos:
- YARN позволяет динамически распределять и централизовано конфигурировать один и тот же пулл ресурсов кластера между всеми фреймворками, что запущены на YARN. Вы можете выделить весь свой кластер для задач MapReduce, поделить их между запросами Impala и остальное отдать под Spark приложения без каких либо изменений в настройках
- Вы также получаете приемущества от всех возможностей планировщика YARN(изоляция, приоритезация, категоризация и т.д.)
- Режим Spark standalone требует от каждого приложения запускать executor-а на каждой ноде кластера, тогда как YARN позволяет выбрать конкретные ноды для этих целей.
- YARN является единтсвенным менеджером для Spark-a что поддерживает безопасность. C YARN Spark может быть запущен по протоколу Kerberos и использовать безопасную аутентификацию между своими процессами.
Работа с YARN
Когда Spark запущен с YARN, каждый Spark executor запущен как YARN контейнер. Где MapReduce управляет контейнером и запускает JVM для каждой таски, Spark содержит много тасок внутри одно и того же контейнера. Такой подход позволяет ускорить время запуска на несколько порядков.
Spark поддерживает два режими для запуска с YARN, "yarn-cluster" и режим "yarn-client". Режим Yarn-cluster имеет смысл использовать для продуктовых задач тогда как режим yarn-client имеет смысл использовать для интерактивного режима и для дебагинга случаев где вы хотите увидеть результат выполнения приложения немедленно.
Для понимания разницы, нужно понять концепцию YARN Application Master. В YARN, каждый экземпляр приложения имеет свой Aplication Master процесс, который является контейнером, который стартует это приложение. Приложение ответственно за запрос ресурсов от ResourceManager-а, и, получив их, говорит NodeManager-у что нужно стартовать контейнер от его имени. Application Master устраняет необходимость проявлять активность клиенту - процесс, который стартовал приложение может отключаться и координация продолжается от процесса, который менеджерит запущеный YARN на кластере.
В режиме yarn-cluseter контроллер запущен в Application Master. Это означает что один и тот же процесс ответственнен за выполнение приложения и за запрос ресурсов от YARN-a и этот процес запущен внутри YARN контейнера. Клиент, что стартовал приложение не нужно быть запущеным на продолжении всего времени выполнения.
режим yarn-cluster
Режим yarn-cluster, тем не менее, не очень хорошо подходит для для интерактивного использования Spark-a. Spark приложения что требуют ввода данных от пользователя, такие как spark-shell и PySpark, нуждаются в запуске Spark driver-a внутри клиентского процесса что инициирует Spark приложение. В режиме yarn-client, Application Master просто предоставляет контейнер с YARN executor-у по запросу. Клиент общается с этим контейнером для управления работой после старта:
режим yarn-client
Эта табличка вкратце показывает разницу между режимами:
Резюмируем ключевые понятия:
- Приложение(Application): Это может быть единственная задача, последовательность задач, длительный сервис выдающий команды по мере необходимости, интерактивная сессия
- Spark Driver: Spark driver это процесс, что запущен в контексте Spark(который предоставляет сессию приложения). Этот драйвер, ответственный за конвертацию приложения в направленный граф конкретных шагов для выполнения на кластере. Существует один driver на приложение.
- Spark Application Master: Spark Application Master ответственный за распределение ресурсов по запросам что были получены от YARN и за поиск подходящих контейнеров для выполнения Spark приложений. Есть один Spark Application Master на приложение.
- Spark Executor: JVM экземпляр на ноде что обслуживает одно Spark приложение. Executor выполняет множество тасок за время жизни и много задач паралельно. Нода может иметь несколько Spark executor-ов и несколько нод обрабатывают Spark executor-ов для каждого клиентского приложения.
- Spark Task: Spark таски представляют рабочую единицу работы над распределённым набором данных.k
Полезные ссылки:
http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
Коментарі
Дописати коментар