Apache Spark Resource Management и модель приложений от YARN

Краткий обзор разницы между тем как Spark и MapReduce управляют ресурсами с помощью YARN. Также посмотрим на разницу между Spark и MapReduce архитектурой, почему это важно и как они работают в кластере с ресурс медежрером YARN. 

Наиболее популярным 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/

Коментарі

Популярні дописи з цього блогу

Минимальные требование для кластера Hadoop(with Spark)

Apache Spark - основные команды