Статьи

Docker Global Hack Day # 3: Кластеры YARN по требованию

Примечание редактора: этот пост был результатом совместных усилий Свапнила Дайнгаде, Сарджита Сингха и Митры Касибхотлы.

Недавно мы с удовольствием участвовали в Docker Global Hack # 3 . Мы рады объявить, что заняли первое место в категории «фристайл», что означало, что наше решение должно было использовать функции из последних версий Docker, включая Engine и другие проекты Docker OSS. В этом посте мы подробно расскажем о нашем решении для предоставления кластеров YARN в общей инфраструктуре, которые имеют одинаковую безопасность и производительность.

проблема

Предприятия постоянно стремятся к более высокой загрузке и большей отдаче от своих инвестиций в центры обработки данных. Эта необходимость заставляет компании исследовать объединение своей инфраструктуры в один гигантский кластер вместо нескольких отдельных.

Решение

В настоящее время предприятия имеют несколько кластеров Hadoop / YARN, которые необходимо разделить по разным причинам (безопасность, производительность и т. Д.). Можно ли обеспечить кластеры YARN в общей инфраструктуре, которые имеют одинаковую безопасность и производительность?

Недавний проект под названием Apache Myriad (инкубационный) пытается решить эту проблему. Он использует Apache Mesos в качестве основного планировщика ресурсов. В настоящее время он поддерживает запуск одного кластера YARN поверх кластера Mesos. Предприятия могут совместно использовать ресурсы между YARN и другими приложениями, такими как веб-серверы, Spark и т. Д. В качестве активных участников Myriad мы изучаем варианты обеспечения многопользовательской и изолированной аренды в Myriad. Мы попытались использовать экспериментальный сетевой плагин для создания оверлейных сетей для изоляции сети. С контейнерами вычислительная изоляция бесплатна. Что касается хранилища, мы рассмотрели несколько вариантов: 1) Предоставление каждому кластеру отдельного хранилища (петлевые или необработанные устройства, подключенные к контейнерам, и 2) Обеспечение изоляции через разрешения файловой системы для одного общего экземпляра DFS.

Детали реализации

YARN состоит из центрального демона под названием ResourceManager (RM). Приложения, работающие на YARN, могут запрашивать ресурсы у RM в виде контейнеров YARN (блоки CPU, mem). У каждого узла в кластере есть демон, который управляет ресурсами на этом узле, который называется NodeManager (NM).

Mesos — это легкий планировщик ресурсов. Приложения, работающие на Mesos, называются фреймворками. В отличие от YARN, именно Mesos предлагает ресурсы (CPU, mem) для каркасов. Если платформа может использовать предложение, она принимает предложение и запускает задачу Mesos (процесс) на узле, на котором был предложен ресурс. Задача Mesos не завершена, пока процесс не завершится.

В Myriad RM запускается с использованием мета-фреймворка, такого как Marathon (с открытым исходным кодом). Марафон принимает предложение от Mesos и запускает RM как задачу Mesos. У Myriad есть код, работающий внутри процесса RM, который регистрируется в Mesos в качестве еще одной платформы. Мы называем этот код Myriad Scheduler. Обратите внимание, что поскольку RM теперь зарегистрирован как среда Mesos, он может запускать NM после принятия предложений от Mesos.

В настоящее время Myriad не поддерживает контейнеры Docker для RM и NM. Он также не поддерживает многопользовательский режим или изоляцию от других не-YARN-приложений, таких как веб-серверы. Ниже приведены подробности того, что мы попробовали в рамках хакатона. Mesos развернут на физическом кластере. РМ и НМ находятся в контейнерах. RM и NM, принадлежащие к одному кластеру YARN, могут общаться друг с другом. Те, которые принадлежат к разным кластерам YARN, не могут общаться друг с другом.

Конфигурация и изоляция сети

DockerGlobal-Блог-Img1

Диаграмма выше показывает, как мы настроили сеть в нашем физическом кластере. В демонстрационных целях мы предполагаем, что на нашем физическом кластере работают три кластера YARN. Мы создаем оверлейную сеть для каждого кластера YARN, которая охватывает все узлы физического кластера. Мы используем подключаемый плагин Docker. Однако членство в оверлейной сети не позволяет контейнеру общаться с подстилающей сетью. Это проблема для нас. Если RM должен работать в контейнере Docker, он должен иметь возможность зарегистрироваться в Mesos в качестве среды Mesos для запуска NM (инфраструктура Mesos работает в подстилающей сети).

Кроме того, мы хотели бы поддержать конфигурацию, в которой имеется только один экземпляр распределенной файловой системы ( HDFS , MapR-FS и т. Д.) В нескольких кластерах YARN. Кластеры YARN, использующие этот единственный экземпляр DFS, изолированы разрешениями файловой системы. Следовательно, чтобы позволить контейнерам Docker получать доступ к DFS, мы создали мост для каждого кластера на каждом хосте (точно так же, как мост docker0, который присутствует после установки Docker.) Как и на мосте docker0, NAT настроен так, чтобы контейнеры могли легко получить доступ к подстилающей сети, но не может получить доступ к контейнерам, принадлежащим другому кластеру.

Эта конфигурация позволяет RM (который также действует как платформа Mesos) регистрироваться в Mesos, работающем в сети подложки. На рисунке 2 (ниже) показано, как выглядит эта конфигурация сети, если смотреть на физический кластер с тремя узлами. См. Сценарии OnDemandYARNClusters / scripts / docker-create-master.sh и OnDemandYARNClusters / scripts / docker-create-worker.sh, чтобы увидеть, как это настроено.

Когда RM (действующий в качестве среды Mesos) решает запустить контейнер NM, он принимает предложение от Mesos и просит Mesos запустить сценарий OnDemandYARNClusters / scripts / docker_deploy.sh (присутствует на каждом физическом сервере).

Этот скрипт принимает три параметра:

  1. Идентификатор задачи Mesos запускаемого контейнера NM
  2. Оверлейная сеть для подключения. (Помните, что все оверлейные сети доступны на всех физических хостах).
  3. Образ Docker для запуска на NM.

Этот скрипт настраивает хранилище и сеть (соединяя контейнер с правым мостом, чтобы он мог общаться с сетью подложки в дополнение к сети оверлея).

Мы также изменили код Myriad, чтобы RM (действующий как среда Mesos) мог генерировать команду для создания контейнера NM Docker. Патч для myriad (ветвь phase1) представлен здесь: OnDemandYARNClusters / myriad-docker-hack-day-3.patch

Можно также построить Myriad с этим патчем, выполнив следующие действия:

1
2
3
git clone https://github.com/sdaingade/myriad.git
git checkout docker-hack-day
./gradlew clean; ./gradlew build

Наконец, файлы Docker для MapR Distribution, включая Hadoop , также представлены в разделе:

DockerGlobal-Блог-Img2

Хранилище : мы пытались использовать петлевые устройства, открытые для контейнеров Docker, для запуска DFS (т. Е. Один экземпляр DFS на кластер YARN). В будущем мы планируем попробовать использовать один экземпляр DFS для нескольких кластеров YARN с изоляцией, обеспечиваемой с помощью разрешений файловой системы.

Статус: мы смогли выполнить все части по отдельности (например, сеть, создание RM и NM, конфигурация хранилища и т. Д.). У нас не хватило времени во время интеграции, но мы очень уверены, что если немного больше времени, мы сможем довести эту работу до конца.

В этой записи блога вы узнали о решении, которое мы предложили на Docker Global Hack Day для предоставления кластеров YARN в общей инфраструктуре с одинаковой безопасностью и производительностью.

Если у вас есть какие-либо вопросы о нашем решении, пожалуйста, задавайте их в разделе комментариев ниже.

Ссылка: Docker Global Hack Day # 3: Кластеры YARN по требованию от нашего партнера JCG Митры Касибхотлы в блоге Mapr .