Статья для понимания внутренностей HBase

HBase

Это второй день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления

текст

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

1. Позиционирование региона

HBase поддерживает основные операции, такие как размещение, получение, удаление и сканирование, все из которых основаны наregion 定位.

Учитывая ряд или диапазон строк, как получить адрес RegionServer, где находится ключ строки?

Основные этапы позиционирования региона следующие:

  1. Клиент взаимодействует с 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 временно записывает все полученные запросы на запись в память, а затем последовательно сбрасывает их на диск, а затем преобразует случайные записи в последовательные записи для повышения производительности.Конкретный процесс выглядит следующим образом. :

  1. После того, как RegionServer получает запрос на запись, он добавляет записанные данные в файл журнала на HDFS, который называется WriteAheadLog ( WAL ). Основная функция WAL — восстановить потерянные данные при внезапном выходе из строя RegionServer.
  2. RegionServer записывает данные в находящуюся в памяти структуру данных MemStore, а затем уведомляет клиента об успешной записи данных.
  3. Когда память, занимаемая MemStore, достигает определенного порога, RegionServer будет последовательно обновлять данные в HDFS и сохранять их в виде файла в формате HFile (формат файла с многоуровневым индексом).

процесс чтения

Поскольку процесс записи может создавать данные в памяти или на диске, при чтении данных вам необходимо найти данные из нескольких мест хранения данных, включая кэш чтения BlockCache, кэш записи MemStore и файлы HFile на диске (их может быть несколько). и объединить прочитанные данные и вернуть их пользователю. Конкретный процесс выглядит следующим образом:

  1. Сканер ищет кэш чтения BlockCache , который внутренне кэширует недавно прочитанные данные.
  2. Сканер ищет кэш записи MemCache, который внутренне кэширует недавно записанные данные.
  3. Если целевые данные не найдены в BlockCache и MemCache, HBase прочитает данные в HFile, чтобы получить необходимые данные.

4. MemStore и HFile

MemStore

MemStore отвечает за кэширование недавно записанных данных в память, это упорядоченный формат хранения памяти Key/Value, каждое семейство столбцов имеет MemStore.

memostore.pngКогда 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. Как кеш уровня памяти, кеш недавно добавил данные. Очевидна ситуация, когда вновь вставленные данные всегда используются чаще, чем старые.
  2. Строки/ячейки могут быть оптимизированы в памяти перед сохранением записи. Например, когда версия данных установлена ​​на 1, для некоторых данных некоторого семейства столбцов Memstore кэширует несколько обновлений в ячейку.При записи в HFile необходимо сохранить только последнюю версию, а остальные можно отбрасывается напрямую.

Одна вещь, которая требует особого внимания: каждый сброс Memstore будет создавать новый HFile для каждого семейства столбцов. С точки зрения чтения это будет относительно просто: HBase сначала проверяет, есть ли запрошенные данные в Memstore, если нет, ищет в HFile, и, наконец, возвращает пользователю объединенный результат.

Обратите внимание на HBase MemStore:

Пользователям или администраторам HBase необходимо обратить внимание на Memstore и ознакомиться с тем, как он используется, по нескольким причинам:

  1. Memstore имеет множество конфигураций, которые можно настроить для достижения хорошей производительности и избежания некоторых проблем. HBase не настраивает эти конфигурации в соответствии с собственными шаблонами использования пользователя, вам нужно настроить их самостоятельно.
  2. Частые сбросы Memstore серьезно повлияют на производительность чтения кластера HBase и могут привести к дополнительной нагрузке.
  3. Способ сброса 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

Глубокое понимание HBase Memstore