Архитектура РЕГОНСЕРВЕРА
-
StoreFile
- Физические файлы, которые сохраняют данные, StoreFiles хранятся в HDFS как HFiles, и каждое хранилище имеет один или несколько StoreFiles (HFiles).Данные в StoreFiles упорядочены и лексикографически упорядочены.
-
MenStore
- Запись в память, поэтому записанные данные сначала будут храниться в MenStore.После сортировки они будут записаны в HDFS после запуска механизма сброса.Каждый сброс будет генерировать новый HFile.
-
WAL
- До сброса MenStore данные находятся в памяти и могут быть утеряны.WAL решает эту проблему.Данные будут записываться сначала в файл лог-файла с опережающей записью, а затем в MenStore.При возникновении сбоя , файл журнала передается, данные могут быть восстановлены.
-
BlockCache
- Чтение кеша.После завершения каждого запроса данные будут помещены в BlockCache для облегчения следующего запроса.
2. Напишите процесс
- Клиент обращается к zookeeper и получает RegionServer, где находится таблица hbase:meta.
- Получите доступ к соответствующему RegionServer, получите таблицу hbase:meta и запросите, в каком регионе и в каком RegionServer находятся целевые данные, в соответствии с namespace:table/rowkey запроса на чтение. Информация о регионе таблицы и информация о расположении метатаблицы кэшируются в метакеше клиента, чтобы облегчить следующий доступ.
- Связь с целевым RegionServer, добавление данных.
- Добавить данные в WAL.
- Данные записываются в MenStore и сортируются в памяти.
- Подождите до нужного времени, скажите MenStore, чтобы он перепрошился на HFile
3. Процесс чтения
- Клиент обращается к zookeeper и получает RegionServer, где находится таблица hbase:meta.
- Получите доступ к соответствующему RegionServer, получите таблицу hbase:meta и запросите, в каком регионе и в каком RegionServer находятся целевые данные, в соответствии с namespace:table/rowkey запроса на чтение. Информация о регионе таблицы и информация о расположении метатаблицы кэшируются в метакеше клиента, чтобы облегчить следующий доступ.
- Связь с целевым RegionServer, запрос данных.
- Найдите данные в BlockCache, MenCache, StoreFile и объедините найденные данные.
- Кэшировать запрошенный новый блок данных (блок, единица хранения данных HFile, размер по умолчанию — 64 КБ) в кэш блоков.
- Верните объединенный окончательный результат клиенту.
4. MemStore Flush
- Когда размер хранилища памяти достигает hbase.hregion.memstore.flush.size (значение по умолчанию — 128 МБ), все хранилища памяти в этом регионе будут очищены.
- Когда размер хранилища памяти достигает hbase.hregion.memstore.flush.size (значение по умолчанию 128M) hbase.hregion.memstore.block.multiplier (значение по умолчанию 4), это предотвратит запись данных в хранилище памяти.
- Когда общий размер хранилища памяти на сервере региона достигает java_heapsize hbase.regionserver.global.memstore.size (по умолчанию 0,4) hbase.regionserver.global.memstore.size.lower.limit (по умолчанию 0,95), регион будет (от большого к меньшему) сбрасывается по очереди, пока общий размер всех мемсторов в регионе сервера не уменьшится ниже указанного выше значения. Когда общий размер хранилища памяти на сервере региона достигает размера java_heapsize hbase.regionserver.global.memstore.size (значение по умолчанию — 0,4), это предотвратит продолжение записи данных во все хранилища памяти.
- Когда наступит время для автоматического сброса, также будет запущен сброс хранилища памяти. Интервал автоматической очистки настраивается свойством hbase.regionserver.Optionalcacheflushinterval (по умолчанию 1 час).
- Когда количество файлов WAL превышает hbase.regionserver.max.logs, регионы будут очищаться в хронологическом порядке до тех пор, пока количество файлов WAL не уменьшится до уровня ниже hbase.regionserver.max.logs (это имя свойства было отменено, и теперь нет необходимости устанавливать его вручную, максимальное значение 32)
5.StoreFile Compaction
- Поскольку memstore создает новый файл HFile каждый раз при его обновлении, а разные версии (отметка времени) и разные типы (вставка/удаление) одного и того же поля могут быть распределены в разных файлах HFile, при запросе необходимо просмотреть все файлы HFile. Чтобы уменьшить количество HFiles и очистить просроченные и удаленные данные, выполняется StoreFile Compression.
- Существует два типа уплотнения: незначительное уплотнение и значительное уплотнение. Незначительное уплотнение объединит несколько смежных небольших файлов HFile в один большой файл HFile и очистит некоторые просроченные и удаленные данные. Major Compaction объединит все HFiles в Store в один большой HFile и очистит все просроченные и удаленные данные.
6.Region Split
По умолчанию каждая таблица изначально имеет только один регион, и поскольку данные записываются непрерывно, регион будет автоматически разделен. При разделении оба субрегиона располагаются на текущем сервере регионов, но из-за соображений балансировки нагрузки HMaster может передать регион другим серверам регионов.
Время разделения регионов:
- Когда общий размер всех StoreFiles в Store в регионе превышает hbase.hregion.max.filesize, регион будет разделен (до версии 0.94).
- Когда общий размер всех StoreFiles в Store в регионе превышает Min(initialSizeR ^ 3, hbase.hregion.max.filesize "), регион будет разделен. Значение по умолчанию инициальному составляет 2hbase.hregion.memstore.flush.size, R — количество Регионов, принадлежащих этой Таблице на текущем Сервере Регионов (после версии 0.94).
Конкретная стратегия сегментации:
Первое разделение: 1^3 * 256 = 256 МБ
Второе разделение: 2^3 * 256 = 2048 МБ
Третье разделение: 3^3 * 256 = 6912 МБ
Четвертое разделение: 4 ^ 3 * 256 = 16384 МБ > 10 ГБ, поэтому возьмите меньшее значение 10 ГБ.
Размер каждого последующего сплита составляет 10 ГБ.
- HBASE 2.0 представляет новую расщепленную стратегию: если нынешний р-н-регион на столе имеет только один регион, согласно 2 * HBASE.hregion.memstore.flush.size Split, в противном случае в соответствии с HBASE.hregion.max.filesize Division.