Мы живем в эпоху данных! Большие большие данные! Машины и приложения существуют по всему миру, генерируя тонны журналов и данных, меняя способ ведения бизнеса, лечя пациентов, перемещаясь по улицам, принимая решения и, одним предложением, меняя образ жизни.
В настоящее время появилось множество концепций и технологий, позволяющих использовать эту быстро развивающуюся лошадь, а также хранить и управлять данными и вычислениями в кластере серверов (например, распределенные файловые системы, 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 и наслаждайтесь!