Из предыдущей статьи мы увидели несколько сред программирования и то, как они позволяют разработчикам приложений развертывать свои пользовательские приложения в облаке. Теперь мы увидим, как можно физически развернуть эти приложения с помощью MapReduce, взяв в качестве примера Microsoft Azure.

Первым шагом будет создание учетной записи в Azure. При бесплатном использовании нам предоставляется 200 долларов, а использование любого сервиса на Azure будет стоить денег. Обязательно завершите услуги после их создания, так как активные услуги продолжают взимать плату в час.

Итак, следуйте инструкциям, чтобы настроить запуск нашего первого приложения.

Шаг 1. Основы

Существует несколько способов запуска приложений с помощью MapReduce, но мы сосредоточимся на создании кластеров на базе Linux в HDInsight. Мы можем выбрать любой тип кластера на основе таких требований, как:

  • Hadoop: пакетный запрос и анализ сохраненных данных
  • Kafka: распределенная платформа потоковой передачи, которую можно использовать для создания конвейеров и приложений потоковой передачи данных в реальном времени.
  • Spark: обработка в памяти, интерактивные запросы, микропакетная потоковая обработка.
  • Интерактивный запрос: кэширование в памяти для интерактивных и более быстрых запросов Hive.
  • HBase: обработка больших объемов бессхемных данных NoSQL.
  • Storm: обработка событий в реальном времени.

Здесь мы будем использовать кластер Hadoop стандартного уровня вместе с Secure Shell (SSH) для подключения к кластеру. Этот SSH-клиент может быть подключен к любому узлу, но всегда предпочтительнее подключаться к граничному узлу, используя указанный адрес и номер порта. Подробнее о граничных узлах мы поговорим далее в этой статье.

Что такое Apache Hadoop и Azure HDInsight?

Apache Hadoop — это платформа с открытым исходным кодом для распределенной обработки и анализа больших наборов данных в кластерах. Azure HDInsight — это полностью управляемая облачная служба аналитики с открытым исходным кодом. Таким образом, создание кластера Apache Hadoop в Azure HDInsight позволяет нам использовать платформу программирования MapReduce для параллельной обработки и анализа пакетных данных. Это также позволяет нам использовать службу управления ресурсами под названием Apache Hadoop YARN, а также распределенную файловую систему Apache Hadoop (HDFS) в качестве хранилища.

Шаг 2. Хранение

Теперь, создав наш кластер Hadoop, нам нужно настроить хранилище для кластера, чтобы можно было загружать данные. Хотя локальная установка Hadoop использует распределенную файловую систему Hadoop (HDFS), лучше использовать конечные точки внешнего облачного хранилища, подключенные к кластеру, что помогает сохранять вычислительные данные даже после удаления кластеров. Кластеры Hadoop в HDInsight совместимы с несколькими внешними облачными хранилищами, такими как:

  • Azure Data Lake Storage 2-го поколения
  • Azure Data Lake Storage 1-го поколения
  • Хранилище Azure общего назначения v2
  • Хранилище Azure общего назначения v1
  • Большой двоичный объект блока хранилища Azure

Здесь мы будем использовать хранилище BLOB-объектов Azure. Таким образом, мы устанавливаем конечную точку хранилища по умолчанию во время настройки для указанного контейнера больших двоичных объектов, который мы создали. Теперь кластер может получить доступ к этому хранилищу BLOB-объектов для загрузки данных, которые можно использовать в качестве входных данных для приложения MapReduce. Это хранилище по умолчанию также содержит журналы приложений и системы.

Шаг 3. Безопасность + сеть

После настройки хранилища мы можем указать наши требования к безопасности и сети.

Безопасность:

В целях безопасности мы можем либо выбрать корпоративный пакет безопасности для Hadoop, либо настроить протокол TLS (безопасность транспортного уровня). Этот TLS применяется к узлам шлюза кластера, которые действуют как прокси-сервер при подключении к кластеру HDInsight через общедоступную конечную точку кластера. Итак, мы должны указать минимальную версию TLS, совместимую с кластером. Чем выше версия, тем лучше безопасность. Однако TLS 1.2 устанавливается по умолчанию в кластерах Azure HDInsight для подключений к общедоступным конечным точкам HTTPS.

Кроме того, данные на управляемых дисках, таких как диски данных, диски ОС и временные диски, могут быть зашифрованы в этих кластерах Azure HDInsight. Он поддерживает несколько типов шифрования:

  • Шифрование на стороне сервера (SSE), выполняемое службой хранения. Эта служба шифрования уровня 1 включена по умолчанию и используется для шифрования ОС и дисков данных в HDInsight.
  • Шифрование на хосте — это еще одно похожее шифрование уровня 1, которое может выполняться с использованием ключа, управляемого платформой, но только для временных дисков и не включено по умолчанию.
  • Шифрование при хранении – это служба шифрования уровня 2, которая требует от клиента предоставления собственного ключа через хранилище ключей Azure. Он используется для данных и временных дисков и не включен по умолчанию. Это одноэтапный процесс, выполняемый во время создания кластера.

Теперь, чтобы включить это шифрование для кластера HDInsight, нам необходимо:

  • Создайте назначаемые пользователем управляемые удостоверения для аутентификации в хранилище ключей.
  • Создать хранилище ключей Azure
  • Создайте ключ указанного типа (RSA/EC) и размера (2048/3072/4096)
  • Создать политику доступа

Теперь этот управляемый клиентом ключ можно добавить в новый кластер HDInsight. Обратите внимание, что этот ключ можно использовать только для новых кластеров во время создания кластера и нельзя добавить к существующим кластерам. Точно так же шифрование не может быть удалено из кластеров после их добавления.

Сеть.
Нам не нужно ограничиваться только нашим локальным типом кластера, фактически различные типы кластеров могут быть связаны друг с другом через виртуальную сеть Azure. Таким образом, это позволяет нам соединять технологические стеки различных типов кластеров HDInsight, обеспечивая большую гибкость. Такие виртуальные сети также полезны для фильтрации и маршрутизации сетевого трафика, а также для подключения служб Azure к Интернету и локальным ресурсам.

Мы также можем контролировать сетевой трафик, фильтруя подсети, используя группы безопасности сети или виртуальные сетевые устройства.

  • Группы безопасности сети (NSG): они содержат несколько правил безопасности для входящего и исходящего трафика, которые позволяют нам фильтровать входящий и исходящий трафик с использованием IP-адресов, портов и протоколов. Эти группы безопасности сети необходимо изменить для подсети, состоящей из кластера HDInsight.
  • Сетевое виртуальное устройство: это в основном виртуальные машины, которые реплицируют задачи с помощью программного обеспечения, которое ранее выполнялось аппаратными устройствами, такими как брандмауэры, оптимизаторы глобальной сети и т. д. Однако их можно использовать только для исходящего трафика. Мы рассмотрим виртуализацию сетевых функций вместе с реальными примерами кода о том, как это сделать с помощью Docker.

Мы также можем эффективно управлять маршрутизацией сетевого трафика, изменяя эти маршруты между подсетями, Интернетом, локальными сетями и даже другими виртуальными сетями. Эта маршрутизация может быть выполнена путем создания пользовательских таблиц маршрутизации для управления пунктом назначения для этих подсетей. Мы также можем распространять маршруты локального протокола пограничного шлюза (BGP) в нашу виртуальную сеть, когда она подключена через VPN к локальной сети. Таким образом, эти виртуальные сети обеспечивают эффективную монополию над потоком сетевого трафика.

Шаг 4. Конфигурация + цены

Здесь нам нужно выбрать требуемую конфигурацию с точки зрения количества узлов каждого типа (головных и рабочих узлов) вместе с их емкостью. Каждый из этих типов различается по стоимости в зависимости от характерных характеристик, которые он демонстрирует. Эта конфигурация узла зависит от типа кластера, который мы собираемся использовать. В нашей ситуации для Hadoop требуется 2 головных узла и более одного рабочего узла. Однако кластер Hadoop по умолчанию настроен на 2 головных узла и 4 рабочих узла. Чем больше количество рабочих, тем тяжелее становится головной узел с точки зрения вычислительных возможностей. Размер кластера, который мы хотим выбрать, также зависит от размера виртуальной машины.

Теперь мы также можем устанавливать приложения в нашем кластере HDInsight на базе Linux, которые могут быть предоставлены Microsoft, третьими сторонами или могут быть даже собственной разработки. Эти приложения устанавливаются на виртуальную машину Linux, настроенную аналогично головному узлу. Это называется граничным узлом, который можно использовать для:

  • Доступ к кластеру HDInsight
  • Размещение клиентских приложений
  • Тестирование этих клиентских приложений

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

Запуск приложений MapReduce в нашем кластере
Следуя всем этим шагам, мы полностью настроили наш кластер в соответствии с нашими потребностями. Следующим шагом будет запуск этих приложений MapReduce в нашем кластере. Для этого требуется клиент SSH, настроенный с кластером Hadoop, который мы уже рассмотрели ранее. После того, как это соединение установлено, мы запускаем файлы .jar для приложения MapReduce, используя YARN. Если приложение требует, мы должны указать пути для входных и выходных файлов, которые существуют в хранилище кластера по умолчанию, а не в локальной файловой системе. Мы также можем указать несколько входных файлов.

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

Как реализовать собственные приложения MapReduce:

Мы можем использовать python для реализации потоковых программ MapReduce, используя потоковый API, предоставляемый Hadoop. Это позволяет нам писать эти приложения Map и Reduce на Python. Все, что нам требуется, это:

  • Hadoop на базе Linux в кластере HDInsight
  • Подходящий текстовый редактор

Ознакомьтесь с этим репозиторием GitHub для полных реализаций кода на python для этих карт и функций сокращения вместе с подробным пошаговым объяснением.

Еще один полезный ресурс для помощи в написании программ MapReduce на Python для Hadoop — здесь.

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА:

[1] Дин, Дж., и Гемават, С. (2008). MapReduce. Сообщения ACM, 51(1), 107. doi:10.1145/1327452.1327492

[2] Документация по Azure HDInsight. Доступно здесь: https://docs.microsoft.com/en-us/azure/hdinsight/