Apache Hadoop: архитектура распределенного хранилища для больших объемов данных

Большие данные: это слово обозначает огромные объемы данных нашей все более оцифрованной жизни. Компании по всему миру заняты разработкой более эффективных методов компиляции электронных данных в огромных масштабах и сохранения их в огромных архитектурах хранения, где они затем систематически обрабатываются. Поэтому массивы данных, измеряемые петабайтами или экзабайтами, в наши дни уже не редкость. Но ни одна система не в состоянии эффективно обрабатывать такие объемы данных. Поэтому для анализа больших данных требуются программные платформы, позволяющие распределять сложные вычислительные задачи на большое количество различных компьютерных узлов. Одним из известных решений является Apache Hadoop — платформа, которая служит основой для нескольких дистрибутивов и пакетов Больших Данных.

Что такое Hadoop?

Apache Hadoop — это основа на Java, используемая для различных программных компонентов, которая позволяет разделять задачи (задания) на подпроцессы. Эти процессы распределяются по различным узлам компьютерного кластера, где они могут выполняться одновременно. В больших архитектурах Hadoop используются тысячи отдельных компьютеров. Преимущество этой концепции заключается в том, что каждый компьютер в кластере должен предоставлять только часть необходимых аппаратных ресурсов. Таким образом, работа с большими объемами данных не обязательно требует высокопроизводительных компьютеров, а может осуществляться с помощью различных экономичных серверов.

Проект с открытым исходным кодом Hadoop был инициирован в 2006 году разработчиком Дагом Каттингом и восходит к алгоритму MapReduce компании Google. В 2004 году поставщик поисковых систем опубликовал информацию о новой технологии, позволяющей распараллеливать сложные вычислительные процессы на основе больших объемов данных с помощью компьютерного кластера. Каттинг, который до этого работал в Excite, Apple Inc. и Xerox Parc и уже сделал себе имя благодаря Apache Lucene, вскоре осознал потенциал MapReduce для собственного проекта и получил поддержку от своего тогдашнего работодателя, компании Yahoo. В 2008 году Hadoop стал проектом высшего уровня Apache Software Foundation, а в 2011 году фреймворк получил статус релиза 1.0.0.

Помимо официального релиза Apache, существуют также различные форки программной платформы, доступные в виде дистрибутивов, подходящих для бизнеса, которые предоставляются клиентам различных поставщиков программного обеспечения. Одна из форм поддержки Hadoop предлагается нынешним работодателем Дуга Каттинга, компанией Cloudera, которая предоставляет «готовый для предприятия» дистрибутив с открытым исходным кодом CDH. Hortonworks и Teradata предлагают аналогичные продукты, а Microsoft и IBM интегрировали Hadoop в свои продукты — облачный сервис Azure и InfoSphere Biglnsights.

Архитектура Hadoop: устройство и основные компоненты

Обычно, когда говорят о Hadoop, подразумевают обширный пакет программного обеспечения, который также иногда называют экосистемой Hadoop. Здесь находятся основные компоненты системы (Core Hadoop), а также различные расширения (многие носят красочные названия Pig, Chukwa, Oozie или ZooKeeper), которые добавляют различные функции к структуре для обработки больших объемов данных. Эти тесно связанные проекты также разработаны Apache Software Foundation.

Core Hadoop составляет основу экосистемы Hadoop. В версии 1 в состав программного ядра входят базовый модуль Hadoop Common, распределенная файловая система Hadoop Distributed File System (HDFS) и механизм MapReduce Engine, который в версии 2.3 был заменен на систему управления кластерами YARN (также называемую MapReduce 2.0). Эта установка устраняет алгоритм MapReduce из фактической системы управления, придавая ей статус плагина на основе YARN.

Hadoop Common

Модуль Hadoop Common предоставляет всем остальным компонентам фреймворка набор базовых функций. Среди них:

  • Архивные файлы Java (JAR), которые необходимы для запуска Hadoop,
  • Библиотеки для сериализации данных,
  • Интерфейсы для доступа к файловой системе архитектуры Hadoop, а также к удаленным процедурам-вызовам связи, расположенным внутри компьютерного кластера.

Распределенная файловая система Hadoop (HDFS)

HDFS — это высокодоступная файловая система, которая используется для сохранения больших объемов данных в компьютерном кластере и, соответственно, отвечает за хранение данных внутри структуры. Для этого файлы разделяются на блоки данных и затем избыточно распределяются по различным узлам; это делается без какой-либо предопределенной организационной схемы. По словам разработчиков, HDFS способна управлять файлами, количество которых исчисляется миллионами.

Кластер Hadoop обычно функционирует в соответствии с моделью «ведущий/ведомый». Архитектура этой структуры состоит из ведущего узла, к которому приписаны многочисленные подчиненные «ведомые» узлы. Этот принцип снова прослеживается в структуре HDFS, которая основана на узле NameNode и различных подчиненных узлах DataNode. Узел NameNode управляет всеми метаданными для файловой системы и для структур каталогов и файлов. Фактическое хранение данных происходит на подчиненных узлах DataNode. Чтобы минимизировать потерю данных, файлы разделяются на отдельные блоки и сохраняются несколько раз на разных узлах. Стандартная конфигурация организована таким образом, что каждый блок данных сохраняется в трех экземплярах.

Каждый узел данных посылает узлу имени через регулярные промежутки времени сигнал жизни, известный как «сердцебиение». Если этот сигнал не поступает, узел NameNode объявляет соответствующее ведомое устройство «мертвым» и с помощью копий данных обеспечивает наличие в кластере достаточного количества копий соответствующего блока данных. Узел NameNode занимает центральное место в структуре. Для того чтобы он не стал «единой точкой отказа», принято снабжать этот главный узел вторичным узлом NameNode. Он отвечает за запись любых изменений, внесенных в метаданные, что позволяет восстановить централизованно управляемый экземпляр HDFS.

На этапе перехода от Hadoop 1 к Hadoop 2 в HDFS была добавлена еще одна система безопасности: NameNode HA (высокая доступность) добавляет в систему еще один механизм отказоустойчивости, который автоматически запускает резервный компонент всякий раз, когда происходит сбой NameNode. Более того, функция моментального снимка позволяет вернуть систему в прежнее состояние. Кроме того, расширение Federation позволяет управлять несколькими NameNode в рамках кластера.

MapReduce-Engine

Первоначально разработанный компанией Google алгоритм MapReduce, который в версии 1 Hadoop реализован в фреймворке как автономный движок, является еще одним основным компонентом Core Hadoop. Этот механизм в первую очередь отвечает за управление ресурсами, а также контроль и мониторинг вычислительных процессов (планирование/мониторинг заданий). Здесь обработка данных в основном опирается на фазы «map» и «reduce», которые позволяют напрямую обрабатывать данные на локальности данных. Это уменьшает время вычислений и пропускную способность сети. В рамках фазы map сложные вычислительные процессы (задания) разделяются на отдельные части и затем распределяются так называемым JobTracker (расположенным на главном узле) по многочисленным подчиненным системам в кластере. Там TaskTracker’ы обеспечивают распараллеленную обработку подпроцессов. На последующем этапе уменьшения промежуточные результаты собираются механизмом MapReduce и затем компилируются в один общий результат.

Если главные узлы обычно содержат компоненты NameNode и JobTracker, то DataNode и TaskTracker работают над каждым подчиненным узлом. На следующем графике показана базовая структура архитектуры Hadoop (согласно версии 1), которая разделена на слои MapReduce и HDFS.

С выходом Hadoop версии 2.3 механизм MapReduce был кардинально переработан. Результатом стала система управления кластером YARN/MapReduce 2.0, которая отделила управление ресурсами и заданиями (планирование/мониторинг заданий) от MapReduce и тем самым открыла фреймворк для новой модели обработки и широкого спектра приложений Больших Данных.

YARN/MapReduce 2.0

С появлением модуля YARN («Yet Another Resource Negotiator»), начиная с версии 2.3, архитектура Hadoops претерпела фундаментальные изменения, ознаменовавшие переход от Hadoop 1 к Hadoop 2. Хотя Hadoop 1 предлагает MapReduce только в качестве приложения, он позволяет отделить управление ресурсами и задачами от модели обработки данных, что позволяет интегрировать в структуру широкий спектр приложений для работы с Большими Данными. Следовательно, MapReduce в Hadoop 2 является лишь одним из многих возможных приложений для доступа к данным, которые могут быть выполнены в рамках фреймворка. Это означает, что фреймворк представляет собой нечто большее, чем простая среда выполнения MapReduce; YARN берет на себя роль распределенной операционной системы для управления ресурсами приложений Больших Данных.

Фундаментальные изменения в архитектуре Hadoop в первую очередь затрагивают оба трекера механизма MapReduce, которые больше не существуют в Hadoop 2 как автономные компоненты. Вместо этого модуль YARN полагается на три новые сущности: ResourceManager, NodeManager и ApplicationMaster.

  • ResourceManager: глобальный ResourceManager действует как высший орган в архитектуре Hadoop (Master), которому назначены различные NodeManagers в качестве «ведомых». В его обязанности входит управление компьютерными кластерами, организация распределения ресурсов между подчиненными NodeManagers и распределение приложений. ResourceManager знает, где находятся отдельные подчиненные системы в кластере и какие ресурсы они могут предоставить. ResourceScheduler является особенно важным компонентом ResourceManger; он решает, как распределяются доступные ресурсы в кластере.
  • NodeManager: на каждом из узлов компьютерного кластера расположен NodeManager. Он принимает позицию ведомого узла в инфраструктуре Hadoop 2 и таким образом действует как получатель команд для ResourceManager. Когда NodeManager запускается на узле кластера, он регистрируется в ResourceManager и через регулярные промежутки времени посылает «признаки жизни», heartbeat. Каждый NodeManager отвечает за ресурсы своих узлов и предоставляет кластеру их часть. Как эти ресурсы используются, решает ResourceScheduler менеджера ресурсов.
  • ApplicationMaster: каждый узел в системе YARD содержит ApplicationMaster, который запрашивает ресурсы у ResourceManager и получает их в виде контейнеров. Приложения больших данных от ApplicationMaster выполняются и наблюдаются на этих контейнерах.

Вот схематическое изображение архитектуры Hadoop 2:

Если приложение Больших Данных должно быть выполнено на Hadoop 2, то, как правило, в процесс вовлечены три участника:

  • клиент
  • Менеджер ресурсов (ResourceManager) и,
  • один или несколько NodeManagers.

Во-первых, клиент передает менеджеру ресурсов заказ, или задание, которое должно быть запущено приложением Больших Данных в кластере. После этого выделяется контейнер. Другими словами, ResourceManager резервирует ресурсы кластера для приложения и связывается с NodeManager. Связавшийся NodeManager запускает контейнер и выполняет в нем ApplicationMaster. Этот последний компонент отвечает за мониторинг и выполнение приложения.

Экосистема Hadoop: дополнительные компоненты расширения

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

  • Ambari: проект Apache Проект Ambari был инициирован дистрибьютором Hadoop компанией Hortonworks и добавляет в экосистему инструменты установки и управления, которые облегчают предоставление ИТ-ресурсов, а также управление и мониторинг компонентов Hadoop. Для этого Apache Ambari предлагает пошаговый мастер установки сервисов Hadoop на любое количество компьютеров в кластере, а также функцию управления, с помощью которой сервисы могут быть централизованно запущены, остановлены или настроены. Графический интерфейс пользователя информирует пользователей о состоянии системы. Кроме того, система Ambari Metrics System и Ambari Alert Framework позволяют регистрировать показатели и настраивать уровни тревоги.
  • Avro: Apache Avro — это система для сериализации данных. Avro использует JSON для определения типов данных и протоколов. Фактические данные, с другой стороны, сериализуются в компактном двоичном формате. Это служит форматом передачи данных для связи между различными узлами Hadoop, а также службами Hadoop и клиентскими программами.
  • Cassandra: написанная на Java, Apache Cassandra представляет собой распределенную систему управления базами данных для больших объемов структурированных данных, которая использует нереляционный подход. Этот вид программного обеспечения также называют базами данных NoSQL. Первоначально разработанная компанией Facebook, цель системы с открытым исходным кодом заключается в достижении высокой масштабируемости и надежности в больших распределенных архитектурах. Хранение данных происходит на основе отношений «ключ-значение».
  • HBase: HBase также является NoSQL-базой данных с открытым исходным кодом, которая обеспечивает доступ к записи и чтению больших объемов данных в реальном времени в рамках компьютерного кластера. HBase основана на высокопроизводительной системе баз данных Google BigTable. По сравнению с другими базами данных NoSQL, HBase характеризуется высокой согласованностью данных.
  • Chukwa: Chukwa — это система сбора и анализа данных, которая опирается на HDFS и MapReduce фреймворка больших данных Hadoop; она позволяет осуществлять мониторинг в режиме реального времени, а также анализировать данные в больших распределенных системах. Для этого Chukwa использует агентов, которые запускаются на каждом наблюдаемом узле и собирают файлы журналов приложений, которые там работают. Эти файлы отправляются на так называемые коллекторы, а затем сохраняются в HDFS.
  • Flume: Apache Flume — это еще один сервис, созданный для сбора, агрегирования и перемещения данных журналов. Чтобы передавать данные для хранения и анализа из различных источников в HDFS, flume реализует такие транспортные форматы, как Apache Thrift или Avro.
  • Pig: Apache Pig — это платформа для анализа больших объемов данных, которую высокоуровневый язык программирования Pig Latin делает доступной для пользователей Hadoop. Pig позволяет описать поток заданий MapReduce на абстрактном уровне. После этого запросы MapReduce больше не создаются на Java; вместо этого они программируются на гораздо более эффективном языке Pig Latin. Это значительно упрощает управление заданиями MapReduce. Например, этот язык позволяет пользователям понять параллельное выполнение сложных анализов. Pig Latin был первоначально разработан компанией Yahoo. Название основано на подходе программного обеспечения: подобно «всеядному», Pig предназначен для обработки всех типов данных (структурированных, неструктурированных или реляционных).
  • Hive: с помощью Apache Hive к Hadoop добавляется хранилище данных. Это централизованные базы данных, используемые для различных видов анализа. Программное обеспечение было разработано компанией Facebook и основано на фреймворке MapReduce. С помощью HiveQL Hive наделен SQL-подобным синтаксисом, позволяющим вызывать, компилировать или анализировать данные, сохраненные в HDFS. Для этого Hive автоматически переводит SQL-подобные запросы в задания MapReduce.
  • HCatalog: основным компонентом Apache Hive является HCatalog, система управления метаданными и диаграммами, которая позволяет хранить и обрабатывать данные независимо от их формата и структуры. Для этого HCatalog описывает структуру данных и тем самым облегчает их использование через Hive или Pig.
  • Mahout: Apache Mahout добавляет в экосистему Hadoop легко расширяемые библиотеки Java, которые можно использовать для добычи данных и математических приложений для машинного обучения. Алгоритмы, которые могут быть реализованы с помощью Mahout в Hadoop, позволяют выполнять такие операции, как классификация, кластеризация и коллаборативная фильтрация. При применении Mahout можно использовать, например, для разработки рекомендательных сервисов (клиенты, купившие этот товар, также купили…).
  • Oozie: дополнительный компонент рабочих процессов, Oozie, позволяет создавать цепочки процессов, автоматизировать их, а также выполнять их с контролем времени. Это позволяет Oozie компенсировать недостатки механизма MapReduce в Hadoop 1.
  • Sqoop: Apache Sqoop — это программный компонент, который облегчает импорт и экспорт больших объемов данных между Hadoop Big Data framework и структурированными хранилищами данных. В настоящее время данные компаний обычно хранятся в реляционных базах данных. Sqoop позволяет эффективно обмениваться данными между этими системами хранения и компьютерным кластером.
  • ZooKeeper: Apache ZooKeeper предлагает услуги по координации процессов в кластере. Для этого предоставляются функции для хранения, распределения и обновления информации о конфигурации.

Hadoop для предприятий

Учитывая, что кластеры Hadoop могут быть настроены для обработки больших объемов данных с помощью стандартных ПК, система обработки больших данных стала популярным решением для многих компаний. Среди них такие компании, как Adobe, AOL, eBay, Facebook, Google, IBM, LinkedIn, Twitter и Yahoo. Помимо возможности легко сохранять и одновременно обрабатывать данные на распределенной архитектуре, стабильность, расширяемость и широкий спектр функций Hadoop являются дополнительными преимуществами этого программного обеспечения с открытым исходным кодом.

Оцените статью
cdelat.ru
Добавить комментарий