Мы живем в эпоху данных! Большие большие данные! Машины и приложения существуют по всему миру, генерируя тонны журналов и данных, меняя способ ведения бизнеса, лечя пациентов, перемещаясь по улицам, принимая решения и, одним предложением, меняя образ жизни.

В настоящее время появилось множество концепций и технологий, позволяющих использовать эту быстро развивающуюся лошадь, а также хранить и управлять данными и вычислениями в кластере серверов (например, распределенные файловые системы, MapReduce, NoSql), изменив и все еще меняя то, как мы разрабатываем программные проекты, и как мы развертываем их в производственных средах (например, контейнеры, облачные вычисления, ServerLess).

Одним из первых шагов при разработке таких технологий является моделирование производственной среды на локальной машине. В этой статье я расскажу об одном способе подготовки такой инфраструктуры с помощью docker-compose и решу проблемы и проблемы, которые могут возникнуть вначале. В частности, я разверну HDFS, Hive, Spark, Hue, Zeppelin, Kafka, Zookeeper и Streamsets на некоторых контейнерах Docker, используя docker-compose. ». Есть также некоторые другие варианты или альтернативы для создания такой платформы. Например, вы можете запустить несколько виртуальных машин с помощью инструмента виртуализации, такого как VirtualBox или KVM, с помощью Vagrant. Или вы можете вместо этого использовать Kubernetes в качестве оркестровки контейнеров. Это в основном зависит от вашей производственной среды, и у каждого из них есть свои плюсы и минусы, которые выходят за рамки этой статьи.

В этой статье предполагается, что вы уже знакомы с Docker и технологиями, которые используются в этой статье. Стоит отметить, что исходный код доступен на Github.

Docker Compose

По поводу официального сайта docker compose:

Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. В Compose вы используете файл YAML для настройки служб вашего приложения. Затем с помощью одной команды вы создаете и запускаете все службы из своей конфигурации.

Для создания файла docker-compose лучше иметь в виду следующие проблемы:

  • Для использования образов докеров в файле компоновки вы можете либо создать свой собственный образ докера с нуля, либо использовать готовый образ из Docker Hub (Docker Hub - крупнейшая в мире библиотека и сообщество для образов контейнеров) . Хотя быстрее найти рабочий образ на хабе докеров.
  • Чтобы найти хорошее изображение, стоит посмотреть его количество загрузок. Это показывает, насколько популярно это изображение.
  • Также стоит посмотреть дату последнего обновления образа в хабе Docker. Это показывает, насколько новое изображение!
  • Также обратите внимание на использование совместимых версий каждого компонента в файле docker-compose. Например, если вы используете Hadoop версии 2.7, то для добавления Spark вам необходимо добавить совместимый образ spark-hadoop2.7. Или, если вы используете некоторые компоненты, написанные на Scala, используйте эти компоненты с той же версией Scala. Действительно сложно решить проблемы, возникающие из-за несовместимости библиотек!
  • Используйте определенные номера версий для изображений. Репозитории постоянно обновляются, и доступны новые версии. Поэтому, если номер версии не указан, будет использоваться последняя версия. В этом случае, возможно, в последней версии вашего образа произошли некоторые изменения, которые могут сломать вашу платформу.

В следующих разделах мы будем добавлять каждый компонент в файл «docker-compose.yml» один за другим.

HDFS

Здесь мы также не будем раскручивать Yarn, а будем использовать только HDFS. Для наших заданий Spark используется только автономное управление.

Для запуска HDFS мы использовали предопределенный образ отсюда. Вся конфигурация определяется в файле hadoop-hive.env. Также определяется объем для хранения данных. Данные в этих подключенных папках не будут удалены при отключении или перезапуске контейнеров докеров.

Помимо них определена сеть докеров с именем pet_met. Эта сеть используется для назначения статического IP-адреса контейнерам докеров. Некоторые из его преимуществ будут представлены в следующих разделах. По умолчанию используется драйвер мостового типа. С точки зрения Docker, мостовая сеть использует программный мост, который позволяет контейнерам, подключенным к одной и той же мостовой сети, обмениваться данными, обеспечивая изоляцию от контейнеров, которые не подключены к этой мостовой сети. Различные типы драйверов: мост, хост, оверлей, macvlan и нет. . Вы можете обратиться к сети докеров, чтобы узнать о них больше.

Посетите http: // localhost: 50070 /, чтобы увидеть интерфейс NameNode.

Улей

Для сохранения метаданных Hive вы можете использовать либо внутреннюю базу данных в памяти, либо внешний образ докера БД.

Для простоты, конечно, лучшим выбором будет внутренняя база данных в памяти. Но когда вы перезапустите докер, все данные и хранилище метаданных, которые вы сохранили в своем контейнере, будут потеряны! Неудивительно, что эта функция присуща докеру.

Но какое решение? Решение заключается в использовании образа докера внешней базы данных и, благодаря томам докера, смонтируйте его папку данных где-нибудь на вашем локальном компьютере, и готово! Здесь мы использовали Postgresql как внешний.

Оттенок

Как и Hive, для Hue использовалось изображение из внешней базы данных. Эта часть кода взята из репозитория Hue.

У меня возникла проблема, когда я хотел использовать базу данных Hue в памяти. Он продолжал жаловаться сообщением «База данных заблокирована». После некоторого поиска в Google я пришел к решению использовать внешнюю базу данных.

Но подождите, вам нужно определить разрешение для изображения Hue для доступа к внешнему изображению MySql. В противном случае MySql будет жаловаться на незаконный доступ! Вот что пытается решить файл init.sql.

Это то место, где определение статического IP-адреса очень удобно! мы можем предоставить доступ пользователю hue из образа докера Hue, используя статический IP-адрес Hue: 172.27.1.13. Вы не можете использовать localhost или 127.0.0.1 или оттенок (поскольку это имя контейнера оттенков) здесь. Как вы, возможно, знаете, изображения внутри сети docker-compose доступны по их именам. Например, вы можете пропинговать Hue из контейнера MySql, используя эту команду: «ping hue». Но когда Hue хочет получить доступ к MySql, он будет делать это, используя свой IP-адрес.

посетите http: // localhost: 8888 /, чтобы увидеть пользовательский интерфейс Hue.

Apache Spark

Как упоминалось ранее, здесь мы используем автономную версию для управления нашим искровым кластером. Для получения дополнительной информации о различных типах кластерных менеджеров, пожалуйста, обратитесь к документации по искрам здесь.

Определены один мастер и один рабочий. Также указывается адрес NameNode. Если вы хотите добавить больше воркеров, просто добавьте столько воркеров, сколько хотите. Но не забудьте позаботиться об именах (искра-рабочий-2…).

посетите http: // localhost: 8080 /, чтобы увидеть пользовательский интерфейс SparkMaster.

Apache Zeppelin

Spark - это базовый движок для Zeppelin, поэтому важно установить главный URL-адрес Spark в Zeppelin. Также для подключения к HDFS и Hive необходимо указать URL-адрес NameNode.

посетите http: // localhost: 19090 /, чтобы увидеть Zeppelin UI.

Наборы потоков

Это довольно просто. Посетите http: // localhost: 18630 ​​/, чтобы увидеть пользовательский интерфейс Streamsets.

Apache Kafka

Чтобы запустить Kafka, нам также нужно запустить Zookeeper. Вы можете запустить Zookeeper в том же контейнере. Но лучше всего, чтобы каждый контейнер отвечал за один-единственный компонент.

Сложная часть запуска образов Kafka - правильно установить «KAFKA_ADVERTISED_HOST_NAME». Вот еще одно место, где на помощь пришло наше определение статического IP-адреса.

Устранение неполадок

  • Если некоторые из ваших контейнеров не запускаются, возможно, вам потребуется увеличить ресурсы докера (особенно память!). Для запуска и запуска такого количества контейнеров требуется больше ресурсов, чем обычно.
  • Если через некоторое время один из контейнеров перестает работать без причины или без изменений в исходном коде, одной из причин может быть беспорядочный смонтированный том! очистив смонтированную папку, она может вернуться в нормальное состояние.

Все вместе

Поздравляю! У вас есть рабочий docker-compose, который соединяет ваши компоненты больших данных вместе. Вы можете передавать свои данные в Kafka с помощью StreamSets, затем, используя Zeppelin, определять некоторые потоковые задания для перемещения данных в HDFS и Hive, а после выполнения некоторых вычислений с помощью SparkSql генерировать необычные отчеты в Zeppelin. Просто запустите docker-compose up и наслаждайтесь!