Это второй день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
текст
HBase построен на HDFS. Он использует HDFS для надежного хранения файлов данных. Он включает в себя позиционирование регионов, управление процессами чтения и записи и управление файлами. В этой статье анализируются внутренние принципы HBase со следующих аспектов.
1. Позиционирование региона
HBase поддерживает основные операции, такие как размещение, получение, удаление и сканирование, все из которых основаны наregion 定位
.
Учитывая ряд или диапазон строк, как получить адрес RegionServer, где находится ключ строки?
Основные этапы позиционирования региона следующие:
- Клиент взаимодействует с ZooKeeper, ища
hbase:meta
Региональный сервер, на котором расположены системные таблицы,hbase:meta
Таблица поддерживает отношение сопоставления между интервалом rowkey и местом хранения региона в каждой пользовательской таблице следующим образом:
rowkey: имя таблицы, начальный ключ, идентификатор региона
value : объект RegionServer (сохраненная информация о местоположении RegionServer и т. д.)
2. Клиент иhbase:meta
Взаимодействуйте с RegionServer, где находится системная таблица, чтобы получить RegionServer, где находится rowley.
3. Клиент взаимодействует с RegionServer, на котором находится rowkey, и выполняет операции, связанные с rowkey.
Следует отметить, что клиенту нужно определить местонахождение таблицы hbase:meta только тогда, когда клиент выполняет операции чтения и записи в первый раз, а затем
Кэшируйте его локально, если кеш недействителен из-за перемещения региона, клиент повторно прочитает расположение таблицы hbase:meta и обновит кеш.
2. Ключевые компоненты внутри RegionServer
ключевые компоненты | объяснение имени | Основная функция |
---|---|---|
BlockCache | чтение кеша | Он отвечает за кэширование часто считываемых данных и использует стратегию замены LRU. |
MemStore | кэш записи | Отвечает за временное кэширование данных, не записанных на диск, и сортировку данных перед записью на диск. Каждое семейство столбцов в каждом регионе имеет MemStore. |
HFile | Формат хранения данных, поддерживающий многоуровневое индексирование | Используется для сохранения фактических данных в таблице HBase, все HFiles хранятся в HDFS. |
WAL | WriteAheadLog , файл журнала, сохраненный на HDFS | Он используется для сохранения данных HBase, которые не сохраняются в HDFS, чтобы данные можно было восстановить после выхода из строя RegionServer. |
3. Операции чтения и записи RegionServer
Две самые важные операции в HBase — это запись и чтение.
процесс записи
Чтобы повысить эффективность записи HBase и избежать низкой производительности случайной записи, RegionServer временно записывает все полученные запросы на запись в память, а затем последовательно сбрасывает их на диск, а затем преобразует случайные записи в последовательные записи для повышения производительности.Конкретный процесс выглядит следующим образом. :
- После того, как RegionServer получает запрос на запись, он добавляет записанные данные в файл журнала на HDFS, который называется WriteAheadLog ( WAL ). Основная функция WAL — восстановить потерянные данные при внезапном выходе из строя RegionServer.
- RegionServer записывает данные в находящуюся в памяти структуру данных MemStore, а затем уведомляет клиента об успешной записи данных.
- Когда память, занимаемая MemStore, достигает определенного порога, RegionServer будет последовательно обновлять данные в HDFS и сохранять их в виде файла в формате HFile (формат файла с многоуровневым индексом).
процесс чтения
Поскольку процесс записи может создавать данные в памяти или на диске, при чтении данных вам необходимо найти данные из нескольких мест хранения данных, включая кэш чтения BlockCache, кэш записи MemStore и файлы HFile на диске (их может быть несколько). и объединить прочитанные данные и вернуть их пользователю. Конкретный процесс выглядит следующим образом:
- Сканер ищет кэш чтения BlockCache , который внутренне кэширует недавно прочитанные данные.
- Сканер ищет кэш записи MemCache, который внутренне кэширует недавно записанные данные.
- Если целевые данные не найдены в BlockCache и MemCache, HBase прочитает данные в HFile, чтобы получить необходимые данные.
4. MemStore и HFile
MemStore
MemStore отвечает за кэширование недавно записанных данных в память, это упорядоченный формат хранения памяти Key/Value, каждое семейство столбцов имеет MemStore.
Когда RegionServer получает запрос на запись (запрос на запись), RegionServer пересылает запрос в соответствующий регион.
Каждый регион хранит набор строк.
Сохраните данные этих столбцов в соответствующем семействе столбцов (семействе столбцов) в соответствии с его семейством столбцов.
Данные в другом семействе столбцов хранятся в собственном HStore, который состоит из MemStore и ряда HFiles.
MemStore находится в основной памяти RegionServer, а HFiles записываются в HDFS.
Когда RegionServer обрабатывает запрос на запись, данные сначала записываются в MemStore, а затем, когда достигается определенный порог, данные из MemStore будут сброшены в HFile.
Основные причины использования MemStore:
Данные, хранящиеся в HDFS, должны быть отсортированы по ключу строки.
Сама HDFS предназначена для последовательного чтения/записи и не допускает модификации.
В этом случае HBase не может эффективно записывать данные, потому что данные, которые будут записаны в HBase, не будут отсортированы, что означает, что они не оптимизированы для извлечения в будущем.
Чтобы решить эту проблему, HBase кэширует недавно полученные данные в памяти (в MemStore), сортирует их перед сохранением в HDFS и записывает в HDFS в быстрой последовательности.
Следует отметить, что настоящий HFile — это не просто отсортированный список данных столбцов.
Кроме решения"无序
«Помимо проблемы, у Memstore есть и другие преимущества, такие как:
- Как кеш уровня памяти, кеш недавно добавил данные. Очевидна ситуация, когда вновь вставленные данные всегда используются чаще, чем старые.
- Строки/ячейки могут быть оптимизированы в памяти перед сохранением записи. Например, когда версия данных установлена на 1, для некоторых данных некоторого семейства столбцов Memstore кэширует несколько обновлений в ячейку.При записи в HFile необходимо сохранить только последнюю версию, а остальные можно отбрасывается напрямую.
Одна вещь, которая требует особого внимания: каждый сброс Memstore будет создавать новый HFile для каждого семейства столбцов. С точки зрения чтения это будет относительно просто: HBase сначала проверяет, есть ли запрошенные данные в Memstore, если нет, ищет в HFile, и, наконец, возвращает пользователю объединенный результат.
Обратите внимание на HBase MemStore:
Пользователям или администраторам HBase необходимо обратить внимание на Memstore и ознакомиться с тем, как он используется, по нескольким причинам:
- Memstore имеет множество конфигураций, которые можно настроить для достижения хорошей производительности и избежания некоторых проблем. HBase не настраивает эти конфигурации в соответствии с собственными шаблонами использования пользователя, вам нужно настроить их самостоятельно.
- Частые сбросы Memstore серьезно повлияют на производительность чтения кластера HBase и могут привести к дополнительной нагрузке.
- Способ сброса Memstore может повлиять на структуру схемы HBase.
HFile
Когда объем данных в MemStore достигает определенного порога, они будут обновлены до файлов HDFS и сохранены в формате HFile.
HFile — это реализация с открытым исходным кодом GoogleSSTable (Sorted String Table, формат хранения, используемый в Google BigTable), который представляет собой упорядоченный формат хранения на диске типа «ключ-значение» с многоуровневыми индексами для облегчения поиска данных. похоже на дерево B+.
Формат HFile показан на рисунке.
Блочный сегмент | инструкция | Это необязательно |
---|---|---|
Сегмент блока данных | Используется для сохранения данных в таблице, эта часть может быть сжата. | нет |
Сегмент метаблока | Используется для сохранения пользовательских сегментов kv, которые можно сжимать. | да |
Сегмент FileInfo | Метаинформация, используемая для сохранения HFile, инстинктивно сжимается, и пользователи также могут добавлять в эту часть свою собственную метаинформацию. | нет |
Сегмент DataBlockIndex | Используется для сохранения индекса Meta Blcok. Индекс блока данных устраняется механизмом LRU. | да |
Сегмент трейлера | Фиксированная длина, сохраняет смещение каждого сегмента.При чтении HFile трейлер будет прочитан первым, а трейлер сохранит начальную позицию каждого сегмента (магический номер сегмента используется для проверки безопасности), а затем DataBlock The Index будет прочитан в память, поэтому при извлечении ключа не нужно сканировать весь HFile, а достаточно найти блок, где находится ключ из памяти, прочитать весь блок в память через диск io, а затем Найти нужный ключ. | нет |
Блок данных и метаблок HFile обычно хранятся в сжатом виде.После сжатия сетевой ввод-вывод и дисковый ввод-вывод могут быть значительно сокращены. Сжатие целевого файла HFile поддерживает два метода: gzip и lzo.
использованная литература
«Подробное объяснение технологической системы больших данных: принцип, архитектура и практика» Донг Сичэн
Введение в структуру хранилища hbase и различные концепции hbase