Apache Hadoop - Apache Hadoop

Apache Hadoop
Логотип Hadoop new.svg
Автор (ы) оригинала Дуг Каттинг , Майк Кафарелла
Разработчики) Фонд программного обеспечения Apache
изначальный выпуск 1 апреля 2006 г . ; 15 лет назад ( 2006-04-01 )
Стабильный выпуск
2.7.x 2.7.7 / 31 мая 2018 г . ; 3 года назад ( 2018-05-31 )
2.8.x 2.8.5 / 15 сентября 2018 г . ; 2 года назад ( 2018-09-15 )
2.9.x 2.9.2 / 9 ноября 2018 г . ; 2 года назад ( 2018-11-09 )
2.10.x 2.10.1 / 21 сентября 2020 г . ; 10 месяцев назад ( 2020-09-21 )
3.1.x 3.1.4 / 3 августа 2020 г . ; 12 месяцев назад ( 2020-08-03 )
3.2.x 3.2.2 / 9 января 2021 г . ; 7 месяцев назад ( 2021-01-09 )
3.3.x 3.3.1 / 15 июня 2021 г . ; 2 месяца назад ( 2021-06-15 )
Репозиторий Репозиторий Hadoop
Написано в Джава
Операционная система Кроссплатформенность
Тип Распределенная файловая система
Лицензия Лицензия Apache 2.0
Интернет сайт hadoop .apache .org Отредактируйте это в Викиданных

Apache Hadoop ( / ч ə д ¯u р / ) представляет собой набор с открытым исходным кодом утилита программного обеспечения , которое облегчает с использованием сети многих компьютеров для решения проблем , связанные с большими объемами данных и вычислений. Он предоставляет программную основу для распределенного хранения и обработки больших данных с использованием модели программирования MapReduce . Изначально Hadoop был разработан для компьютерных кластеров, построенных на стандартном оборудовании , которое до сих пор широко используется. С тех пор он также нашел применение в кластерах высокопроизводительного оборудования. Все модули в Hadoop разработаны с учетом фундаментального предположения, что сбои оборудования являются обычным явлением и должны автоматически обрабатываться платформой.

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

Базовая структура Apache Hadoop состоит из следующих модулей:

  • Hadoop Common - содержит библиотеки и утилиты, необходимые для других модулей Hadoop;
  • Распределенная файловая система Hadoop (HDFS) - распределенная файловая система, которая хранит данные на обычных машинах, обеспечивая очень высокую совокупную пропускную способность в кластере;
  • Hadoop YARN - (введена в 2012 г.) платформа, отвечающая за управление вычислительными ресурсами в кластерах и их использование для планирования приложений пользователей;
  • Hadoop MapReduce - реализация модели программирования MapReduce для крупномасштабной обработки данных.
  • Hadoop Ozone - (введено в 2020 году) хранилище объектов для Hadoop

Термин Hadoop часто используется как для базовых модулей, так и для подмодулей, а также для экосистемы или набора дополнительных программных пакетов, которые могут быть установлены поверх или вместе с Hadoop, таких как Apache Pig , Apache Hive , Apache HBase , Apache Phoenix , Apache Spark , Apache ZooKeeper , Cloudera Impala , Apache Flume , Apache Sqoop , Apache Oozie и Apache Storm .

Компоненты Apache Hadoop MapReduce и HDFS были вдохновлены документами Google по MapReduce и файловой системе Google .

Сама среда Hadoop в основном написана на языке программирования Java с некоторым собственным кодом на C и утилитами командной строки, написанными в виде сценариев оболочки . Хотя Java-код MapReduce является распространенным, с Hadoop Streaming можно использовать любой язык программирования для реализации карты и сокращения частей программы пользователя. Другие проекты в экосистеме Hadoop предоставляют более богатые пользовательские интерфейсы.

История

По словам его соучредителей, Дуга Каттинга и Майка Кафареллы , происхождением Hadoop стала статья о файловой системе Google, опубликованная в октябре 2003 года. Эта статья породила еще одну статью от Google - «MapReduce: упрощенная обработка данных в больших кластерах». Разработка началась над проектом Apache Nutch , но в январе 2006 года была переведена в новый подпроект Hadoop. Дуг Каттинг, работавший в Yahoo! в то время назвал его в честь игрушечного слона своего сына. Первоначальный код, выделенный из Nutch, состоял примерно из 5000 строк кода для HDFS и примерно 6000 строк кода для MapReduce.

В марте 2006 года Оуэн О'Мэлли был первым коммиттером, добавившимся к проекту Hadoop; Hadoop 0.1.0 был выпущен в апреле 2006 года. Он продолжает развиваться за счет вкладов, которые вносятся в проект. Самый первый проектный документ для распределенной файловой системы Hadoop был написан Дхруба Бортакур в 2007 году.

Архитектура

Hadoop состоит из пакета Hadoop Common , который предоставляет абстракции на уровне файловой системы и операционной системы, механизма MapReduce (MapReduce / MR1 или YARN / MR2) и распределенной файловой системы Hadoop (HDFS). Пакет Hadoop Common содержит файлы и сценарии Java Archive (JAR) , необходимые для запуска Hadoop.

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

Кластер Hadoop
Кластер Hadoop с несколькими узлами

Небольшой кластер Hadoop включает один главный и несколько рабочих узлов. Главный узел состоит из трекера заданий, трекера задач, NameNode и DataNode. Подчиненный или рабочий узел действует как DataNode и TaskTracker, хотя могут быть рабочие узлы только для данных и только для вычислений. Обычно они используются только в нестандартных приложениях.

Для Hadoop требуется Java Runtime Environment (JRE) 1.6 или выше. Стандартные сценарии запуска и завершения работы требуют настройки Secure Shell (SSH) между узлами в кластере.

В более крупном кластере узлы HDFS управляются через выделенный сервер NameNode для размещения индекса файловой системы и вторичный NameNode, который может генерировать моментальные снимки структур памяти namenode, тем самым предотвращая повреждение файловой системы и потерю данных. Точно так же автономный сервер JobTracker может управлять планированием заданий по узлам. Когда Hadoop MapReduce используется с альтернативной файловой системой, NameNode, вторичный NameNode и архитектура DataNode HDFS заменяются эквивалентами для конкретной файловой системы.

Файловые системы

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

Распределенная файловая система Hadoop (HDFS) является распределенной, масштабируемой и портативной файловой системой написано на Java для платформы Hadoop. Некоторые считают его хранилищем данных из-за отсутствия соответствия POSIX , но он предоставляет команды оболочки и методы интерфейса программирования приложений Java (API) , которые похожи на другие файловые системы. Экземпляр Hadoop делится на HDFS и MapReduce. HDFS используется для хранения данных, а MapReduce - для обработки данных. HDFS имеет пять следующих сервисов:

  1. Имя узла
  2. Узел вторичного имени
  3. Трекер вакансий
  4. Узел данных
  5. Трекер задач

Первые три - это главные службы / демоны / узлы, а две нижние - подчиненные службы. Главные службы могут связываться друг с другом, и точно так же подчиненные службы могут связываться друг с другом. Узел имени является главным узлом, а узел данных - соответствующим ему ведомым узлом, которые могут взаимодействовать друг с другом.

Узел имени: HDFS состоит только из одного узла имени, который называется главным узлом. Главный узел может отслеживать файлы, управлять файловой системой и иметь метаданные всех хранимых в нем данных. В частности, узел имени содержит сведения о количестве блоков, расположении узла данных, в котором хранятся данные, где хранятся репликации, и другие подробности. Узел имени имеет прямой контакт с клиентом.

Узел данных: узел данных хранит данные в нем в виде блоков. Он также известен как подчиненный узел и хранит фактические данные в HDFS, который отвечает за чтение и запись клиента. Это демоны-рабы. Каждый узел данных отправляет сообщение Heartbeat узлу Name каждые 3 секунды и сообщает, что он активен. Таким образом, когда узел имени не получает контрольный сигнал от узла данных в течение 2 минут, он считает этот узел данных мертвым и запускает процесс репликации блока на каком-либо другом узле данных.

Узел вторичного имени: это только для того, чтобы позаботиться о контрольных точках метаданных файловой системы, которые находятся в узле имени. Это также известно как узел контрольной точки. Это вспомогательный узел для узла имени. Узел вторичного имени указывает узлу имени создать и отправить файл fsimage и editlog, после чего сжатый файл fsimage создается узлом вторичного имени.

Отслеживание заданий: средство отслеживания заданий получает от клиента запросы на выполнение Map Reduce. Трекер заданий обращается к узлу имени, чтобы узнать о местонахождении данных, которые будут использоваться при обработке. Узел имени отвечает метаданными необходимых данных обработки.

Трекер задач: это подчиненный узел для Трекера заданий, и он берет задачу из Трекера заданий. Он также получает код от Job Tracker. Трекер задач возьмет код и применит к файлу. Процесс применения этого кода к файлу известен как Mapper.

Кластер Hadoop номинально состоит из одного узла имени плюс кластер узлов данных, хотя для узла имени доступны варианты избыточности из-за его критичности. Каждый узел данных обслуживает блоки данных по сети с использованием блочного протокола, специфичного для HDFS. Файловая система использует сокеты TCP / IP для связи. Клиенты используют удаленные вызовы процедур (RPC) для связи друг с другом.

HDFS хранит большие файлы (обычно в диапазоне от гигабайт до терабайт) на нескольких машинах. Он обеспечивает надежность за счет репликации данных на нескольких хостах и, следовательно, теоретически не требует избыточного массива независимых дисков (RAID) для хранения на хостах (но для увеличения производительности ввода-вывода (I / O) некоторые конфигурации RAID по-прежнему полезны). При значении репликации по умолчанию, 3, данные хранятся на трех узлах: два в одной стойке и один в другой стойке. Узлы данных могут взаимодействовать друг с другом, чтобы сбалансировать данные, перемещать копии и поддерживать репликацию данных на высоком уровне. HDFS не полностью совместима с POSIX, поскольку требования к файловой системе POSIX отличаются от целевых целей приложения Hadoop. Компромисс отсутствия полностью совместимой с POSIX файловой системы - это повышенная производительность для пропускной способности данных и поддержка операций, не относящихся к POSIX, таких как Append.

В мае 2012 года в HDFS были добавлены возможности высокой доступности, что позволило главному серверу метаданных, называемому NameNode, вручную переключаться на резервную копию. В рамках проекта также началась разработка автоматического переключения при отказе .

Файловая система HDFS включает в себя так называемый вторичный узел имен , вводящий в заблуждение термин, который некоторые могут неправильно интерпретировать как резервный узел имен, когда основной узел имен переходит в автономный режим. Фактически, вторичный namenode регулярно соединяется с первичным namenode и создает моментальные снимки информации каталога первичного namenode, которые затем система сохраняет в локальных или удаленных каталогах. Эти образы с контрольными точками можно использовать для перезапуска отказавшего основного узла имен без необходимости воспроизводить весь журнал действий файловой системы, а затем для редактирования журнала для создания актуальной структуры каталогов. Поскольку namenode является единой точкой для хранения и управления метаданными, он может стать узким местом для поддержки огромного количества файлов, особенно большого количества небольших файлов. HDFS Federation, новое дополнение, нацелено на решение этой проблемы в определенной степени, позволяя обслуживать несколько пространств имен отдельными узлами имен. Более того, в HDFS есть некоторые проблемы, такие как проблемы с небольшими файлами, проблемы масштабируемости, единственная точка отказа (SPoF) и узкие места в огромных запросах метаданных. Одним из преимуществ использования HDFS является осведомленность о данных между системой отслеживания вакансий и системой отслеживания задач. Расписания отслеживания вакансий отображают или сокращают задания до средств отслеживания задач с учетом местоположения данных. Например: если узел A содержит данные (a, b, c), а узел X содержит данные (x, y, z), средство отслеживания заданий планирует узел A для выполнения сопоставления или сокращения задач на (a, b, c) и узле X будет запланировано выполнять отображение или сокращение задач на (x, y, z). Это уменьшает объем трафика, который проходит по сети, и предотвращает ненужную передачу данных. Когда Hadoop используется с другими файловыми системами, это преимущество не всегда доступно. Это может существенно повлиять на время выполнения заданий, что продемонстрировано на примере заданий с большим объемом данных.

HDFS была разработана для в основном неизменяемых файлов и может не подходить для систем, требующих одновременных операций записи.

HDFS может быть смонтирован непосредственно с виртуальной файловой системой Filesystem in Userspace (FUSE) в Linux и некоторых других системах Unix .

Доступ к файлам может быть обеспечен через собственный Java API, Thrift API (создает клиент на нескольких языках, например, C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa , Smalltalk и OCaml ), интерфейс командной строки , то HDFS-интерфейс веб - приложения через HTTP или с помощью библиотек сети клиента третьих лиц.

HDFS разработана для переносимости на различные аппаратные платформы и для совместимости с множеством базовых операционных систем. Дизайн HDFS вводит ограничения переносимости, которые приводят к некоторым узким местам производительности, поскольку реализация Java не может использовать функции, которые являются эксклюзивными для платформы, на которой работает HDFS. Благодаря широкой интеграции в инфраструктуру корпоративного уровня, мониторинг производительности HDFS в масштабе становится все более важной проблемой. Мониторинг сквозной производительности требует отслеживания метрик от узлов данных, узлов имен и базовой операционной системы. В настоящее время существует несколько платформ мониторинга для отслеживания производительности HDFS, включая Hortonworks , Cloudera и Datadog .

Другие файловые системы

Hadoop работает напрямую с любой распределенной файловой системой, которая может быть смонтирована базовой операционной системой, просто используя file://URL-адрес; Однако за это приходится расплачиваться - потеря местоположения. Чтобы уменьшить сетевой трафик, Hadoop необходимо знать, какие серверы находятся ближе всего к данным - информацию, которую могут предоставить мосты файловой системы Hadoop.

В мае 2011 года список поддерживаемых файловых систем в комплекте с Apache Hadoop был:

  • HDFS: собственная файловая система Hadoop с поддержкой стойки. Он предназначен для масштабирования до десятков петабайт хранилища и работает поверх файловых систем базовых операционных систем .
  • Apache Hadoop Ozone: HDFS-совместимое хранилище объектов, оптимизированное для миллиардов небольших файлов.
  • Файловая система FTP : все данные хранятся на удаленно доступных FTP-серверах.
  • Объектное хранилище Amazon S3 (Simple Storage Service) : предназначено для кластеров, размещенных в инфраструктуре сервера Amazon Elastic Compute Cloud, работающей по запросу. В этой файловой системе нет поддержки рэка, поскольку она полностью удаленная.
  • Файловая система Windows Azure Storage Blobs (WASB): это расширение HDFS, которое позволяет дистрибутивам Hadoop получать доступ к данным в хранилищах BLOB-объектов Azure без постоянного перемещения данных в кластер.

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

  • В 2009 году IBM обсуждала возможность использования Hadoop поверх общей параллельной файловой системы IBM . Исходный код был опубликован в октябре 2009 года.
  • В апреле 2010 года Parascale опубликовала исходный код для запуска Hadoop в файловой системе Parascale.
  • В апреле 2010 года Appistry выпустила драйвер файловой системы Hadoop для использования с собственным продуктом CloudIQ Storage.
  • В июне 2010 года HP обсудила драйвер файловой системы IBRIX Fusion с функцией определения местоположения .
  • В мае 2011 года MapR Technologies Inc. объявила о доступности альтернативной файловой системы для Hadoop, MapR FS , которая заменила файловую систему HDFS файловой системой чтения / записи с полным произвольным доступом.

JobTracker и TaskTracker: движок MapReduce

Поверх файловых систем находится механизм MapReduce Engine, который состоит из одного JobTracker , которому клиентские приложения отправляют задания MapReduce. JobTracker передает работу доступным узлам TaskTracker в кластере, стремясь максимально приблизить работу к данным. Благодаря файловой системе, поддерживающей стойку, JobTracker знает, какой узел содержит данные и какие другие машины находятся поблизости. Если работа не может быть размещена на фактическом узле, где находятся данные, приоритет отдается узлам в той же стойке. Это снижает сетевой трафик в основной магистральной сети. Если TaskTracker выходит из строя или истекает время ожидания, эта часть задания переносится. TaskTracker на каждом узле порождает отдельный процесс виртуальной машины Java (JVM), чтобы предотвратить сбой самого TaskTracker, если выполняющееся задание приводит к сбою его JVM. Контрольное сообщение отправляется из TaskTracker в JobTracker каждые несколько минут для проверки его статуса. Jetty предоставляет информацию о состоянии и информации Job Tracker и TaskTracker, и их можно просматривать в веб-браузере.

Известные ограничения этого подхода:

  1. Распределить работу по TaskTrackers очень просто. Каждый TaskTracker имеет ряд доступных слотов (например, «4 слота»). Каждая активная карта или задача уменьшения занимает один слот. Трекер заданий распределяет работу на трекер, ближайший к данным с доступным слотом. Не учитывается текущая системная загрузка выделенной машины и, следовательно, ее фактическая доступность.
  2. Если один TaskTracker работает очень медленно, он может задержать выполнение всего задания MapReduce - особенно ближе к концу, когда все может ждать самой медленной задачи. Однако при включенном спекулятивном выполнении одна задача может выполняться на нескольких подчиненных узлах.

Планирование

По умолчанию Hadoop использует планирование FIFO и, при необходимости, 5 приоритетов планирования для планирования заданий из рабочей очереди. В версии 0.19 планировщик заданий был переработан из JobTracker, при этом была добавлена ​​возможность использования альтернативного планировщика (такого как планировщик Fair или планировщик емкости , описанный ниже).

Планировщик ярмарки

Планировщик ярмарки был разработан Facebook . Цель честного планировщика - обеспечить быстрое время отклика для небольших заданий и обеспечение качества обслуживания (QoS) для производственных заданий. Планировщик ярмарки имеет три основных концепции.

  1. Задания сгруппированы в пулы .
  2. Каждому пулу назначается гарантированная минимальная доля.
  3. Избыточная мощность распределяется между работами.

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

Планировщик емкости

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

  1. Очередям выделяется часть общей емкости ресурсов.
  2. Свободные ресурсы выделяются очередям сверх их общей емкости.
  3. В очереди задание с высоким уровнем приоритета имеет доступ к ресурсам очереди.

Когда задание выполняется, приоритетного прерывания не происходит.

Разница между Hadoop 1 и Hadoop 2 (YARN)

Самым большим различием между Hadoop 1 и Hadoop 2 является добавление YARN (еще одного согласователя ресурсов), который заменил механизм MapReduce в первой версии Hadoop. YARN стремится эффективно распределять ресурсы между различными приложениями. Он запускает два демона, которые заботятся о двух разных задачах: диспетчер ресурсов , который отслеживает задания и распределение ресурсов для приложений, мастер приложения , который отслеживает ход выполнения.

Разница между Hadoop 2 и Hadoop 3

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

В Hadoop 3 есть контейнеры, работающие по принципу Docker , что сокращает время, затрачиваемое на разработку приложений.

Одно из самых больших изменений заключается в том, что Hadoop 3 снижает накладные расходы на хранилище за счет кодирования со стиранием .

Кроме того, Hadoop 3 позволяет использовать аппаратное обеспечение графического процессора в кластере, что является очень существенным преимуществом для выполнения алгоритмов глубокого обучения в кластере Hadoop.

Другие приложения

HDFS не ограничивается заданиями MapReduce. Его можно использовать для других приложений, многие из которых разрабатываются в Apache. В список входят база данных HBase , система машинного обучения Apache Mahout и хранилище данных Apache Hive . Теоретически Hadoop можно использовать для любой рабочей нагрузки, ориентированной на пакетную обработку, а не в режиме реального времени, с очень большим объемом данных и преимуществами параллельной обработки . Его также можно использовать для дополнения системы реального времени, такой как лямбда-архитектура , Apache Storm , Flink и Spark Streaming .

Коммерческие приложения Hadoop включают:

Известные варианты использования

19 февраля 2008 г. Yahoo! Inc. запустила то, что они назвали крупнейшим в мире производственным приложением Hadoop. Yahoo! Search Webmap - это приложение Hadoop, которое работает в кластере Linux с более чем 10 000 ядер и производит данные, которые использовались в каждом Yahoo! поисковый запрос в Интернете. Yahoo! имеет несколько кластеров Hadoop. и никакие файловые системы HDFS или задания MapReduce не распределяются между несколькими центрами обработки данных. Каждый узел кластера Hadoop выполняет загрузку образа Linux, включая дистрибутив Hadoop. Известно, что работа, выполняемая кластерами, включает в себя расчеты индекса для Yahoo! поисковый движок. В июне 2009 года Yahoo! сделал исходный код своей версии Hadoop доступным сообществу разработчиков ПО с открытым исходным кодом.

В 2010 году Facebook заявил, что у них самый большой кластер Hadoop в мире с 21 ПБ хранилища. В июне 2012 года они объявили, что данные выросли до 100 ПБ, а позже в том же году объявили, что данные увеличиваются примерно на половину ПБ в день.

По состоянию на 2013 год внедрение Hadoop стало повсеместным: более половины компаний из списка Fortune 50 использовали Hadoop.

Хостинг Hadoop в облаке

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

Коммерческая поддержка

Ряд компаний предлагают коммерческое внедрение или поддержку Hadoop.

Брендинг

Apache Software Foundation заявила, что только программное обеспечение, официально выпущенное проектом Apache Hadoop, может называться Apache Hadoop или дистрибутивами Apache Hadoop . Именование продуктов и производных работ от других поставщиков, а также термин «совместимый» несколько противоречивы в сообществе разработчиков Hadoop.

Статьи

Некоторые статьи повлияли на зарождение и развитие Hadoop и обработки больших данных. Вот некоторые из них:

Смотрите также

использованная литература

Список используемой литературы

внешние ссылки