Краткое содержание статьи:
Прежде чем приступить к развертыванию Hadoop, вам необходимо понять его базовые знания и некоторые принципы. Поскольку эта статья в основном посвящена внедрению, а место ограничено, я лишь кратко объясню эту часть содержания. Будет возможность. написать специальный принцип и основу Hadoop позже.
01Введение в Hadoop
1. Что такое Hadoop?
Hadoop — это распределенная системная инфраструктура, разработанная Apache Foundation. Пользователи могут разрабатывать распределенные программы, не понимая основных деталей распространения. В полной мере используйте возможности кластеров для решения проблем хранения больших объемов данных, а также их анализа и вычислений.
Hadoop в широком смысле относится ко всей технологической экосистеме Hadoop; в узком смысле Hadoop относится к трем ее основным компонентам, включая HDFS, YARN и MapReduce.
2. История развития Hadoop
Hadoop возник на основе платформы Lucene. Позже, чтобы решить проблемы сложного хранения и медленного извлечения больших данных, ее основатель использовал три основные идеи Google о больших данных и создал Nutch, который позже был выделен и включен в проект Apache. Хадуп. Поэтому не будет преувеличением сказать, что три идеи Google в области больших данных являются источником идей Hadoop. Этим трем основным идеям соответствуют три статьи соответственно:
Всем рекомендуется прочитать и изучить эти три статьи, которые очень полезны для понимания больших данных. Лучше всего прочитать оригинальную английскую версию. Ресурсы можно найти в Интернете.
3. Версия дистрибутива Hadoop
В настоящее время Hadoop имеет три основных наиболее развитых дистрибутива: Apache, Cloudera (CDH) и Hortonworks (HDP). Все они имеют свои особенности:
Наше введение основано на версии Apache.
4. Преимущества Hadoop
5. Разница между Hadoop1.x и 2.x
В эпоху Hadoop1.x MapReduce в Hadoop одновременно обрабатывает операции бизнес-логики и планирование ресурсов и тесно связан. В эпоху Hadoop2.x был добавлен Yarn. Yarn отвечает только за планирование ресурсов, а MapReduce отвечает только за операции анализа. Hadoop3.x не имеет изменений в составе, но в ядро Hadoop внесено множество существенных улучшений с точки зрения функциональности и производительности. Поскольку эта статья основана на последней версии 2.x, 2.10.1, версия 3.x будет подробно рассмотрена позже.
Рисунок 1-5-1. Разница между Hadoop1.x и 2.x.
02Основные компоненты Hadoop
В настоящее время Hadoop имеет множество компонентов, но в узком смысле Hadoop относится к трем его основным компонентам: HDFS, YARN и MapReduce.
1. HDFS (распределенная файловая система Hadoop)
HDFS (распределенная файловая система Hadoop) отвечает за хранение больших объемов данных. Это высокоотказоустойчивая система, которая может обнаруживать сбои оборудования и реагировать на них. Основные роли — NameNode, DataNode и SecondaryNameNode. HDFS использует архитектуру «главный/подчиненный». HDFS состоит из NameNode и определенного количества DataNodes.
Рисунок 2-1-1: Схема архитектуры HDFS
Рисунок 2-1-2: Этапы выполнения HDFS
1. NameNode (NN)
NN — это центральный сервер, отвечающий за управление пространством имен файловой системы и клиентским доступом к файлам. Он хранит метаданные файла, включая имя файла, структуру каталогов файлов, атрибуты файла (время создания, количество копий, разрешения) и т. д., а также список блоков каждого файла и адрес между блоками в списке. и DataNode, в котором находится блок.
Механизм отказоустойчивости NN очень важен, поскольку если машина, на которой работает NN, выйдет из строя, файлы в системе будут полностью потеряны. Hadoop предоставляет два механизма: 1) резервное копирование метаданных файловой системы, которые постоянно хранятся на локальном жестком диске. 2) запускает вспомогательный NN (SecondaryNameNode) для регулярного резервного копирования файла образа пространства имен (fsimage) и файла журнала операций (журнала редактирования); .
Как правило, максимальный размер одного кластера NN составляет 4000 единиц.
2. DataNode (DN)
DN обычно один на каждый узел и отвечает за управление хранилищем на узле, где он расположен. Фактически он используется для хранения данных в локальной файловой системе. Базовая единица DN — блок, значение по умолчанию — 128M. Копии данных будут сохранены в HDFS. Значение по умолчанию — 3, то есть один и тот же фрагмент данных будет храниться на трех разных DN для резервного копирования одновременно. Это количество копий можно установить, о чем будет сказано позже. конфигурация.
3. SecondaryNameNode (2NN)
2NN — это вспомогательный узел, используемый для синхронизации информации метаданных. Он помогает NN объединить fsimage и журнал редактирования (холодное резервное копирование) для решения проблемы чрезмерного журнала редактирования и потери информации об изменениях.
Рисунок 2-1-3: Принцип работы SecondaryNameNode
2. YARN (структура управления планированием ресурсов)
YARN (еще один переговорщик ресурсов) заменяет управление планированием ресурсов MapReduce в Hadoop1.x и обеспечивает унифицированное управление планированием ресурсов для приложений верхнего уровня (задачи Spark, Hive-MR и т. д.). После Hadoop2.x MapReduce работает только на нем. Пряжа. Чистая вычислительная структура.
Во всей системе планирования и управления ресурсами YARN ResourceManager выступает в роли главного, а NodeManager каждого узла выступает в качестве подчиненного. Компонент ResourceManager и NameNode HDFS развертываются на одном узле, а NodeManager, ApplicationMaster и контейнер YARN. (представляющий вычислительные ресурсы) и DataNode HDFS развертываются вместе.
Рисунок 2-2-1: Схема архитектуры YARN
1. ResourceManager (RM) – руководитель отдела
RM — это основной компонент YARN или главный узел YARN. Обычно он выделяется на главном узле и развертывается для обеспечения высокой доступности. Основная функция — обработка запроса на отправку задания клиента, мониторинг NodeManager, управление, распределение и планирование всех ресурсов (ЦП и памяти) в кластере, а также максимальный контроль над ресурсами в системе. Ее можно понимать как роль, аналогичную роли руководителя отдела.
В качестве координатора ресурсов RM имеет два основных компонента: планировщик и диспетчер приложений (AsM).
Планировщик отвечает за выделение приложению минимального количества ресурсов, достаточного для удовлетворения требований для запуска приложения. Планировщик планирует только на основе использования ресурсов и не отвечает за мониторинг или отслеживание состояния приложения. Конечно. , он не будет обрабатывать невыполненные задачи.
ApplicationsManager отвечает за обработку заданий, отправленных клиентом, и согласование первого контейнера для запуска ApplicationMaster, а также перезапускает ApplicationMaster в случае сбоя ApplicationMaster.
2. NodeManager (Нью-Мексико) — руководитель группы.
NM — это диспетчер ресурсов и задач на каждом дочернем узле или подчиненном узле YARN. С одной стороны, он будет сообщать RM об использовании ресурсов на этом узле и рабочем статусе каждого Контейнера посредством информации о пульсе, с другой стороны, он будет получать и обрабатывать команды от RM и Контейнера, запуская и останавливая его с помощью ApplicationMaster. Ее можно понимать как роль, аналогичную роли руководителя отдела.
Конкретный метод работы заключается в том, что NM запускает Контейнер, назначенный RM для ApplicationMaster, и Контейнер, представляющий ApplicationMaster, и контролирует рабочее состояние Контейнера.
При запуске Контейнера NM установит некоторые необходимые переменные среды и загрузит jar-пакеты и файлы, необходимые для запуска Контейнера, из HDFS в локальную систему, что представляет собой так называемую локализацию ресурсов. Когда все приготовления будут завершены, для запуска программы будет запущен сценарий, представляющий Контейнер. После запуска NM будет периодически контролировать ресурсы, занимаемые Контейнером. Если количество ресурсов, заявленное Контейнером, будет превышено, процесс, представленный Контейнером, будет завершен.
3. ApplicationMaster (AM) – менеджер проекта
Приложение соответствует АМ, и этот процесс выполняется на одном из узлов. В основном для того, чтобы само приложение могло подавать заявки на ресурсы из RM, сегментировать данные, связываться с NM для запуска или остановки задач, отслеживать состояние выполнения всех задач, а также повторно подавать заявки на ресурсы и перезапускать задачу в случае сбоя задачи (отказоустойчивость). функция). Ее можно понимать как роль менеджера проекта, аналогичную проекту под руководством руководителя группы.
Поскольку NM требует ресурсов для выполнения и мониторинга задач, приложение ресурсов требует связи с RM через AM для получения ресурсов. Другими словами, АМ играет роль посредника. Это одна из обязанностей менеджера проекта, которому часто приходится обращаться за ресурсами.
Если объяснить с более профессиональной точки зрения, AM отвечает за запрос контейнеров ресурсов от RM для NM для выполнения задач. Более конкретно, AM отвечает за заявку на ресурсы из планировщика, отслеживание использования этих ресурсов и мониторинг хода выполнения задач.
4. Контейнер — ресурсы проекта
Контейнер — это абстракция системных ресурсов YARN. Он также является базовой единицей распределения системных ресурсов. Он инкапсулирует многомерные ресурсы на узле, включая процессор, память, диск, сеть и т. д. Под ним можно понимать ресурсы, необходимые для аналогичных проектов, включая персонал, средства, оборудование и т. д.
YARN выделяет контейнер для каждой задачи, и задача может использовать только ресурсы, описанные в контейнере. Обратите внимание, что Contariner — это динамическая единица разделения ресурсов, и ресурсы изменяются в соответствии с фактическими требованиями приложения, что аналогично концепции Docker-контейнера.
3. MapReduce (инфраструктура распределенных вычислений)
MapReduce — это вычислительная модель, используемая для обработки больших объемов данных. Вычислительный процесс можно разделить на два этапа (по сути, три этапа), а именно «Карта» и «Сокращение».
Рисунок 2-3-1: Этапы выполнения MapReduce
Карта преобразует входной исходный набор данных в ключ-значение (пары ключ-значение), разбивает его на разные узлы для параллельного выполнения заданных вычислительных операций (таких как сортировка, агрегирование) и формирует промежуточный результат. Этот процесс операции вычисления называется. Map shuffle; Редукция параллельно выполняет сокращение, объединение и суммарную обработку всех значений одного и того же ключа в сгенерированных промежуточных результатах, а затем выводит новое значение ключа для получения окончательного результата. Этот процесс обработки одного и того же ключа. называется Уменьшить перемешивание. Видно, что между Map и уменьшить на самом деле есть еще один процесс, который должен организовать вывод карты и передать его в сокращение. Этот процесс представляет собой перемешивание операций Map и сокращения, требующих от нас определения соответствующего класса карты и сокращения. class сами, а Shuffle автоматически реализуется системой для нас.
Если говорить просто, то Map можно рассматривать как разбиение набора данных на разные узлы для параллельных вычислительных операций, а сокращение — как интеграцию результатов вычислений каждого узла для суммирования конечного результата (т. е. Map отвечает за расчет точек, и Уменьшить отвечает за общий расчет).
Рисунок 2-3-2: Принцип работы MapReduce
(1) JobTracker
JobTracker — это главный узел. В кластере только один. Он отвечает за управление всеми заданиями, мониторинг задач/заданий, обработку ошибок и т. д., а также разбивает задачи на ряд задач и назначает их TaskTracker.
(2) TaskTracker
TaskTracker — это подчиненный узел, отвечающий за выполнение задач Map и сокращения. Он взаимодействует с JobTracker посредством периодических контрольных сигналов, уведомляя JobTracker о текущем состоянии работоспособности. Каждый тактовый сигнал включает количество доступных задач Map и сокращения, количество занятых и число. сведения о выполняемых задачах.
TaskTracker и DataNode работают на одном и том же компьютере, поэтому каждая физическая машина является одновременно вычислительным узлом и узлом хранения, а на каждом рабочем узле имеется только один TaskTracker.
2. Задача «Карта» и задача «Сокращение».
В вычислительной среде MapReduce приложение разделено на два этапа вычислений: Map и уменьшить, которые состоят из одной или нескольких задач Map и сокращения соответственно.
(1) Map Task
Каждая задача карты обрабатывает часть данных (InputSplit) из входного набора данных и записывает несколько сгенерированных фрагментов данных на локальный диск. Общий процесс расчета задачи «Карта» разделен на следующие пять этапов (последние три этапа — это перетасовка карт, упомянутая выше):
Рисунок 2-3-3: Механизм работы Map Task
(2) Reduce Task
Задача сокращения удаленно копирует соответствующие фрагменты данных из каждой задачи карты и после группировки, агрегации и сокращения записывает результаты в HDFS как окончательный результат. Общий процесс расчета задачи сокращения также разделен на пять этапов (первые три этапа — это тасование сокращения, упомянутое выше):
Рисунок 2-3-4: Рабочий механизм уменьшения задачи
03Технологическая экосистема Hadoop
Hadoop в широком смысле относится ко всей технологической экосистеме, включая, помимо прочего, следующие компоненты:
Рисунок 3-1-1: Технологическая экосистема Hadoop
Здесь мы выберем еще несколько важных компонентов, чтобы кратко представить их, а подробно представим их позже:
1. HBase: распределенная база данных
HBase — это база данных Hadoop. HBase — это распределенная, ориентированная на столбцы нереляционная база данных с открытым исходным кодом. Она отличается от обычных реляционных баз данных и подходит для хранения неструктурированных данных. HBase использует HDFS Hadoop в качестве системы хранения файлов и ZooKeeper в качестве инструмента координации, который очень подходит для чтения и записи больших данных в реальном времени.
Таблица HBase представляет собой разреженную многомерную таблицу. Данные в таблице представляют собой неинтерпретируемую строку без типа данных. Каждая строка имеет ключ строки. Таблица сгруппирована по множеству коллекций семейств столбцов. Это очень удобно. Просто добавьте семейство столбцов или столбец, не определяя заранее количество и тип столбцов. Все столбцы хранятся в виде строк.
2. Hive: инструмент хранилища данных
Hive — это мощный инструмент хранилища данных, основанный на Hadoop. Он может отображать файлы структурированных данных в таблицу базы данных и предоставлять простые функции SQL-запросов. Он может преобразовывать операторы SQL в задачи MapReduce для запуска. Его преимущество заключается в низкой стоимости обучения, простой статистике MapReduce можно быстро реализовать с помощью SQL-подобных операторов, и нет необходимости разрабатывать специальные приложения MapReduce. Он очень подходит для статистического анализа хранилищ данных.
3. Kafka: Распределенная система обмена сообщениями «публикация-подписка».
Kafka — это распределенная система обмена сообщениями с высокой пропускной способностью, которая может обрабатывать все данные потоковой передачи действий потребителей на веб-сайте. Для данных журналов и систем автономного анализа, таких как Hadoop, но требующих ограничений обработки в реальном времени, Kafka является подходящим решением. Цель Kafka — унифицировать онлайн- и офлайн-обработку сообщений с помощью механизма параллельной загрузки Hadoop и предоставлять сообщения в реальном времени через кластер.
4. ZooKeeper: служба распределенной координации.
ZooKeeper — высокодоступная платформа распределенных сервисов, которая в основном используется для решения проблем согласованности систем приложений в распределенных кластерах. В распределенных системах, таких как Hadoop, HBase и Kafka, ZooKeeper может облегчить задачи координации. используется в качестве основного компонента. Типичные сценарии применения включают: реализацию высокой доступности NameNode для HDFS; реализацию высокой доступности HMaster для HBase. Число узлов развертывания ZooKeeper обычно нечетное.
5. Spark: среда распределенных вычислений в памяти.
Spark — это микро-пакетная распределенная среда быстрых вычислений, которая может хранить выходные результаты в памяти. Она может выполнять пакетную и интерактивную обработку, поддерживает несколько языков (Java, Python, Scala, R и т. д.) и имеет богатый API. преимущества. Оно заключается в возможности одновременного выполнения вычислений в автономном режиме и в реальном времени.
1. Spark SQL
Модуль в Spark, который обрабатывает структурированные данные и может использовать SQL-подобные инструкции для программирования Spark. Spark SQL поддерживает множество типов структурированных источников данных и может пропустить сложный процесс чтения и легко читать объекты Row из различных источников данных. Эти источники данных включают таблицы Hive, файлы JSON и Parquet и т. д.
2. Spark Streaming
Создан для обработки потоков данных, аналогичный Storm (квази-реальном времени). Его принцип заключается в разделении полученного потока данных на множество небольших пакетов (батчей), а затем в пакетной обработке вывода, что называется микро-пакетной обработкой (micro-batch обрабатывать). не соответствует квазиреальному времени), а процесс его обработки и вычислений выполняется в памяти, что намного более эффективно, чем автономная пакетная обработка MapReduce, требующая использования дискового пространства HDFS:
Рисунок 3-5-1: Потоковая передача Spark
Источником данных Spark Streaming может быть Kafka, Flume и т. д. В процессе обработки потока библиотека MLib может использоваться для выполнения некоторых моделей машинного обучения и других работ:
Рисунок 3-5-2: Потоковая передача Spark
3. Spark MLib
Расширяемая библиотека машинного обучения в Spark, состоящая из ряда алгоритмов и утилит машинного обучения. Включая классификацию, регрессию, кластеризацию, совместную фильтрацию и т. д., а также некоторые базовые методы оптимизации.
4. Spark GraphX
Saprk — это среда обработки распределенных графов (графа атрибутов, социального графа, ориентированного графа, неориентированного графа и т. д.), в основном используемая для графоцентрированных вычислений и распределенных вычислений. Он основан на платформе Spark и предоставляет простые, удобные и богатые интерфейсы для графовых вычислений и анализа графов, что значительно облегчает потребность в распределенной обработке графов.
04Режим развертывания Hadoop
Для Hadoop существует четыре режима развертывания: локальный режим, псевдораспределенный режим, полностью распределенный режим и полностью распределенный режим высокой доступности.
1. Характеристики каждой модели развертывания Hadoop
1. Локальный (автономный) режим
Также известен как независимый режим и автономный режим. В этом режиме нет необходимости запускать какие-либо демоны, и все программы выполняются на одной JVM на машине. Очень удобно отлаживать программу MapReduce кластера Hadoop в локальном режиме, поэтому в целом этот режим подходит для локальной отладки во время быстрой установки и опыта работы с Hadoop, а также на этапе разработки.
2. Псевдораспределенный режим
В псевдораспределенном режиме каждый модуль Hadoop запускается в каждом процессе машины, и каждый модуль запускается отдельно. Однако процесс-демон программы Hadoop выполняется только на одном узле, который не является по-настоящему распределенным. В общем, псевдораспределенный режим обычно используется для отладки кода распределенных программ Hadoop и проверки правильности выполнения программы. Псевдораспределенный режим — это частный случай полностью распределенного режима.
3. Полностью распределенный режим
В полностью распределенном режиме процессы-демоны Hadoop выполняются в кластере серверов, состоящем из нескольких хост-узлов, и разные узлы играют разные роли. В общем, при разработке реальных рабочих приложений этот режим обычно используется для развертывания и построения систем Hadoop корпоративного уровня.
4. Высокодоступный полностью распределенный режим
Высокая доступность высокой доступности — это механизм, представленный только в Hadoop 2.x для решения проблемы единой точки отказа Hadoop. Существует два основных метода развертывания: метод NFS (сетевая файловая система) и метод QJM (менеджер журнала кворума). Более часто используемый метод — QJM, который обладает большей стабильностью. В реальной работе построение кластера Hadoop в производственной среде обычно требует развертывания высокой доступности.
2. Различия между режимами развертывания Hadoop
Различные режимы развертывания Hadoop в основном различаются NameNode и DataNode HDFS, а также ResourceManager, NodeManager, AppMaster и другими модулями YARN, работающими на нескольких процессах JVM и нескольких машинных узлах:
Режим развертывания | Количество процессов JVM, занимаемых каждым модулем | Количество машинных узлов, на которых работает каждый модуль |
---|---|---|
локальный режим | 1 | 1 |
Псевдораспределенный режим | Н | 1 |
Полностью распределенный режим | Н | Н |
HAПолностью распределенный режим | Н | Н |
Предыдущая статья:Создание и установка среды Hadoop
Следующая статья: Конфигурация развертывания Hadoop и отладка работы, так что следите за обновлениями!