Я уже третий день участвую в августовском челлендже, подробности события Посмотреть:Испытание августовского обновления
Пожалуйста, поймите эту статью в сочетании с этим моим блогом:Статья для понимания внутренностей HBase
операция записи
HBase используетДревовидная архитектура LSM, который, естественно, подходит для сценариев приложений с большим количеством операций записи и меньшим объемом чтения.
В реальной производственной среде именно благодаря отличным возможностям записи кластера HBase он может поддерживать многие предприятия при резком увеличении объема данных.
Следует отметить, что сервер HBase не предоставляет интерфейсы обновления и удаления. Операции обновления и удаления данных в HBase также считаются операциями записи на стороне сервера. Разница в том, что операция обновления запишет последнюю версию данных. , удалите его.Операция записывает данные KV, помеченные как удаленные.
такПроцесс обновления и удаления в HBase точно такой же, как и процесс записи.
Конечно, весь процесс записи данных HBase постоянно оптимизируется с итерацией версии, но в целом процесс не сильно изменился.
3 этапа
С точки зрения общей архитектуры процесс написания можно разделить на три этапа.
- Этап обработки клиента: клиент предварительно обрабатывает запрос пользователя на запись, находит RegionServer, на котором находятся данные записи, в соответствии с метаданными кластера, и отправляет запрос на соответствующий RegionServer.
- Фаза записи региона: после того, как сервер RegionServer получит запрос на запись, он анализирует данные, сначала записывает их в WAL, а затем записывает в MemStore соответствующего семейства столбцов Region.
- Этап сброса MemStore: когда емкость MemStore в регионе превышает определенный порог, система асинхронно выполняет операцию сброса, чтобы записать данные из памяти в файл для формирования HFile.
6 шагов
- Сначала найдите местоположение региона таблицы hbase:meta в ZooKeeper, а затем прочитайте данные в таблице hbase:meta, в которой хранится информация о регионе пользовательской таблицы.
- Найдите информацию о регионе, соответствующую записанным данным, в соответствии с пространством имен, именем таблицы и информацией о строке.
- Найдите RegionServer, соответствующий этому региону, и отправьте запрос
- Запись данных в HLog ( WriteAheadLog ) и MemStore соответственно
- После того, как MemStore достигает порогового значения, данные сбрасываются на диск и создается файл StoreFile.
- Удалить исторические данные в HLog.
операция чтения
По сравнению с процессом записи процесс чтения данных в HBase более сложен.
В основном по двум причинам:
Во-первых, потому что запрос диапазона HBase может включать несколько регионов, несколько кешей или даже несколько файлов хранилища данных; Во-вторых, потому что реализация операций обновления и операций удаления в HBase очень проста.Операция обновления не обновляет исходные данные, а использует атрибут временной метки для реализации нескольких версий; операция удаления на самом деле не удаляет исходные данные, а только вставляет фрагмент данных, помеченный тегом «удалено», и фактическое удаление данных происходит, когда система выполняет Major Compact асинхронно.
Очевидно, что эта идея реализации значительно упрощает процесс обновления и удаления данных, но для чтения данных это означает слои оков:Процесс чтения нужно фильтровать по версии, и данные, помеченные на удаление, тоже фильтровать.
4 этапа
Процесс чтения можно разделить на следующие 4 этапа от начала до конца:
- Клиент-Сервер считывает логику взаимодействия
- Платформа сканирования на стороне сервера
- Отфильтровать HFiles, которые не соответствуют условиям запроса
- Чтение ключа для поиска из HFile
Логика взаимодействия клиент-сервер в основном представленаКак клиент HBase взаимодействует с сервером в течение всего процесса запроса на сканирование, понимание этого важно для чтения данных с помощью Hbase Scan API.
Понять систему инфраструктуры сканирования на стороне сервера и представить ее с точки зрения макросов.Как HbaseRegionServer обрабатывает запрос на сканирование шаг за шагом.
6 шагов
- Сначала найдите местоположение региона метатаблицы из ZooKeeper, а затем прочитайте данные в таблице hbase:meta, в которой хранится информация о регионе пользовательской таблицы.
- В соответствии с запрашиваемым пространством имен, именем таблицы и ключом строки найдите информацию о регионе, соответствующую записанным данным.
- Найдите RegionServer, соответствующий этому региону, и отправьте запрос
- Найдите соответствующий регион
- Сначала найдите данные из MemStore, если нет, прочитайте из BlockCache.
Память RegionServer на HBase разделена на две части: одна часть используется как MemStore, которая в основном используется для записи;
Другая часть, как BlockCache, в основном используется для чтения данных;
- Если он не найден в BlockCache, перейдите в StoreFile(HFile), чтобы прочитать
После чтения данных из StoreFile вместо того, чтобы возвращать данные результата непосредственно клиенту, данные сначала записываются в BlockCache, чтобы ускорить последующие запросы, а затем результаты возвращаются клиенту.