Эта статья участвовала в деятельности Haowen Convocation Order,Нажмите, чтобы просмотреть:Заявки на бэк-энд и фронт-энд с двумя треками, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов! "
Сегодняшний контент посвящен практическому опыту проектирования, связанного с HBASE, и фиксирует то, чему я научился. В основном из-за онлайн-багов (при размере кластера 10-20 единиц количество читаемых и записываемых данных в секунду составляет порядка сотен тысяч записей) hbase пока не будет предоставлять услуги, т.е. эта статья разобрана.
- 1. [Введение в HBASE]
- 2. [Подробное объяснение операций чтения и записи HBASE, усиления чтения, слияния, восстановления после сбоев и т. д.]
- 3. [Использование HBASE в информации о тревоге]
- Четыре, [опыт оптимизации HBASE]
Что такое ХБАЗ?
HBase — это распределенная база данных с открытым исходным кодом, ориентированная на столбцы. Эта технология взята из статьи Google «Bigtable: распределенная система хранения структурированных данных», написанной Фэй Чанг. Подобно тому, как Bigtable использует распределенное хранилище данных, предоставляемое файловой системой Google, HBase предоставляет возможности, подобные Bigtable, поверх Hadoop.
HBase — это подпроект проекта Apache Hadoop. В отличие от обычных реляционных баз данных, HBase — это база данных, подходящая для хранения неструктурированных данных. Еще одно отличие — схема HBase на основе столбцов, а не строк.
(1) Модель данных
Это таблица, мы можем получить данные одного семейства столбцов или данных нескольких семейств столбцов в соответствии с ключом строки (roykey), каждое семейство столбцов имеет неограниченное количество столбцов, каждый столбец может хранить данные, и у каждого данных есть версия Да, его можно отличить по отметке времени. Итак, мы находимся в таблице, зная ключ строки, семейство столбцов, столбец, отметку времени версии, чтобы определить уникальное значение.
(2) Логическая архитектура
Для любой таблицы ее rowkey упорядочен глобально.Из-за учета физического хранилища мы размещаем ее на нескольких машинах и делим на несколько регионов в соответствии с размером или другими стратегиями. Каждый регион отвечает за представление части данных, и регион будет находиться на физической машине для обеспечения сбалансированного состояния.
(3) Архитектура системы
Во-первых, это тоже стандартная архитектура хранения. егоHmasterВ основном отвечает за простые услуги координации, такие какПеренос региона, балансировка и устранение ошибок, на самом деле он не участвует в запросе, настоящийЗапрос происходит на сервере региона. За хранение отвечает региональный сервер, как мы только что сказали, каждая таблица делится на несколько регионов. Затем сохраните в регионе сервер.
Наиболее важной частью здесь является блог. Чтобы обеспечить согласованность данных, сначала будет записан файл журнала, что является функцией системы базы данных.После создания журнала мы можем успешно записать его. Мы только что упомянули, что в HBase есть много семейств столбцов семейства столбцов. Каждое семейство столбцов соответствует хранилищу в регионе. Хранилище содержит соответственно storefile и menstore.
Чтобы оптимизировать HBase в будущем, мы сначала рассмотрим возможность установкифайл записать в менсторВнутри по мере заполнения данных в менсторе данные будутраспространяется на диск, а затем storefile и memstore в целом зависят от модели данных, называемойlmstree.
Затем данные записываются в методе append, будь то вставка, изменение или удаление. На самом деле, он постоянно добавляется. Например, все ваши методы операций обновления и удаления имеют видПишите по отметке, так чтоИзбегайте случайного ввода-вывода диска, что улучшает производительность записи, естественно, его нижний слой построен на hdfs.
HBase использует Zookeeper в качестве службы распределенного управления для поддержания состояния всех служб в кластере. Zookeeper следит за тем, какие серверы исправны и доступны, и уведомляет об отказе серверов. Zookeeper использует протокол консенсуса для обеспечения согласованности распределенного состояния. Обратите внимание, что для работы протокола консенсуса требуется три или пять машин.
Распределенный протокол zk еще предстоит освоить, ведь flink и hbase, сладкие пирожные в больших данных, используют zk для создания распределенных протоколов.
(4) Как читать?
- Найдите, получите из мета-таблицы, какой региональный сервер управляет, какой ключ строки принадлежит
- Соответствующий региональный сервер читает и записывает данные
- Метатаблица, в которой хранится список всех регионов в системе, имеет следующую структуру
- Ключ: таблица, начальный ключ региона, идентификатор региона.
- Значение: сервер региона
(5) Что такое региональный сервер и что там хранится?
Региональный сервер работает на HDFS DataNode и состоит из следующих компонентов:
- WAL: журнал опережающей записи (журнал упреждающей записи) — это файл в распределенной файловой системе, используемый для хранения новых данных, которые не были сохранены, он используется для восстановления после сбоя.
- BlockCache: эточтение кеша, который хранит наиболее часто используемые данные в памяти, которая представляет собой кэш LRU (наименее недавно использованный).
- Мемстор: этокэш записи, который хранит новые данные в памяти, которые еще не были сохранены на жестком диске. При записи на жесткий диск данные сортируются в первую очередь. Обратите внимание, что каждое семейство столбцов в каждом регионе будет иметь MemStore.
- Файловое хранилище HFile на жестком диске (HDFS)Данные HBase, в форме упорядоченного ключа.
(6) Как записать данные?
-
Первый — запись данных в WAL (WAL добавляется в конце файла, высокая производительность)
-
Добавление в MemStore — это кеш записи, и сервер может вернуть клиенту акк, чтобы указать на завершение записи данных
(7) Что такое кэш записи MemStore?
- Кэшировать данные HBase, которые аналогичны форме хранения в HFile.
- Обновления сортируются по семейству столбцов
(8) Как обновить диск после записи кеша?Он должен быть записан на диск, верно?
-
достаточно накопилось в MemStore
-
Весь заказанный набор данных будет записан в новый файл HFile на HDFS (последовательная запись)
-
Это также одна из причин, по которой HBase ограничивает количество семейств столбцов (семейств столбцов не может быть слишком много).
-
Поддерживайте максимальный порядковый номер, чтобы вы знали, какие данные сохраняются
(9) Что, черт возьми, такое HFILE?
HFile использует многоуровневый индекс для запроса данных без чтения всего файла Этот многоуровневый индекс похож на дерево B+:
- Упорядоченное хранение KeyValues.
- rowkey указывает на индекс, а индекс указывает на конкретный блок данных в единицах по 64 КБ.
- Каждый блок имеет свой листовой индекс.
- Последний ключ каждого блока хранится в индексе среднего уровня.
- Корневой узел индекса указывает на индекс среднего уровня.
trailerУказывает на исходный информационный блок данных, который записывается в данные, когда данные сохраняются как HFile.HFile конец файла. Трейлер также включает, например,Фильтры Блума и временные диапазоныи другая информация.
Фильтр Блума используется дляПропустить те файлы, которые не содержат указанный ключ строки,Информация о временном диапазоне фильтруется по времениПропущенные файлы во время таковых не запрашиваются.
Только что рассмотренный индекс загружается в память при открытии HFile, поэтому для запросов данных требуется только запрос жесткого диска.
Во-вторых, усиление чтения, усиление записи, устранение неисправностей
(10) Когда будет запущено слияние чтения?
Как упоминалось в предыдущей статье, когда мы читаем данные, первым шагом является поиск и получение ключа строки из мета-таблицы для управления тем, к какому серверу региона принадлежит сервер, а сервер региона имеет кеш чтения, кеш записи, HFILE.
Итак, когда мы читаем часть данных, она может быть в кеше чтения (LRU), она может быть просто записана и все еще в кеше записи, или вообще не быть, тогда HBase будет использовать индекс и фильтр Блума в кеше блоков для загрузки соответствующего HFile в память. , поэтому данные могут поступать из кеша чтения, кеша чтения-записи сканера и HFILE, который называется левым HBASEчитать слияние
Как упоминалось ранее, в кэше записи может быть несколько HFILE, поэтому запрос на чтение может считывать несколько файлов, что влияет на производительность, что также известно какувеличение чтения(читай усиление).
(11) Поскольку есть усиление чтения, есть ли способ читать несколько файлов меньше? --написать слияние
Проще говоря, HBase автоматически объединит несколько небольших HF-файлов и перепишет их в небольшое количество более крупных HF-файлов.
Он использует алгоритм сортировки слиянием для объединения небольших файлов в большие файлы, эффективно уменьшая количество H-файлов.
Этот процесс называется слиянием записи (незначительное уплотнение)
(12) Какие файлы HFILE предназначены для записи слияний?
1. Он объединяет и перезаписывает все HF-файлы в каждом семействе столбцов.
2. Во время этого процесса удаленные и просроченные ячейки будут физически удалены, что может повысить производительность чтения.
3. Но поскольку значительное сжатие приведет к перезаписи всех файлов HFiles,Требует большого количества операций ввода-вывода на жестком диске и сетевых накладных расходов.. это называетсяПисать(Написать Усиление).
4. HBASE по умолчанию ставится автоматически, т.к. есть усиление записи, рекомендуется делать ранним утром или на выходных
5. Серьезное уплотнение также может привести к переносу миграции данных, вызванной сбоем сервера или балансировкой нагрузки, обратно в место, удаленное от регионального сервера, чтобы можно было восстановить локальность данных.
(13) Это не означает, что региональный сервер управляет несколькими регионами.Сколькими регионами он управляет?Когда регионы будут расширены? --Разделение регионов
Рассмотрим понятие региона:
- HBase Table делится на один или несколько регионов по горизонтали. Каждый регион содержит непрерывные упорядоченные РЯДЫ с ключом начала и ключом конца в качестве границ.
- Размер каждого региона по умолчанию составляет 1 ГБ.
- Данные в регионе считываются и записываются сервером регионов и взаимодействуют с клиентом.
- Каждый региональный сервер может управлять примерно 1000 регионами (которые могут исходить из одной или нескольких таблиц).
Изначально каждая таблица по умолчаниютолько один регион.当一个 region 逐渐变得很大时,它会разделить на два субрегиона, каждый подрегион содержит половину данных исходного региона.Эти два подрегиона создаются на сервере исходного региона параллельно, и о разделении будет сообщено HMaster. В целях балансировки нагрузки HMaster может перенести новый регион на серверы других регионов.
(14) Из-за разделения усиление чтения может быть вызвано на нескольких региональных серверах для балансировки нагрузки, пока не произойдет слияние записи, повторная миграция или слияние в место рядом с узлом регионального сервера.
(15) Как выполняется резервное копирование данных HBASE?
Все операции чтения и записи происходят на основном DataNode в HDFS. HDFS автоматически создает резервные копии WAL (журнала упреждающей записи) и файловых блоков HFile. HBase полагается на HDFS для обеспечения целостности и безопасности данных. Когда данные записываются в HDFS, одна копия записывается на локальный узел, а две другие копии записываются на другие узлы.
И WAL, и HFiles сохраняются на диске и резервируются. Так как же HBase восстанавливает данные в MemStore, которые не были сохранены в HFile?
Как (16) время восстановления данных HBASE простоя?
-
При сбое сервера регионов доступ к регионам, которыми он управляет, невозможен до тех пор, пока не будет обнаружен сбой, а затем завершено восстановление после сбоя, и доступ к этим регионам может быть восстановлен. Zookeeper полагается на обнаружение пульса для обнаружения сбоев узлов, а затем HMaster будет получать уведомления об отказах региональных серверов.
-
Когда HMaster обнаружит сбой сервера региона, HMaster назначит регионы, управляемые этим сервером региона, другим серверам работоспособного региона. Чтобы восстановить данные в MemStore отказавшего регионального сервера, которые не были сохранены в HFile, HMasterРазбить WAL на несколько текстовфайлы, сохраните их всервер нового регионаначальство. Затем каждый региональный сервер воспроизводит данные в сегментах WAL, которые он получает, чтобы построить MemStore для нового выделенного им региона.
-
WAL содержит ряд операций модификации, каждая модификация представляет собойпоставить или удалитьработать. Эти модификации записываются последовательно в хронологическом порядке, а при сохранении записываются последовательно в конец файла WAL.
-
Что делать, если данные все еще находятся в MemStore и не сохранены в HFile? Будет воспроизведен файл WAL. Метод работы заключается в чтении файла WAL, сортировке и добавлении всех измененных записей в MemStore, и, наконец, MemStore будет сброшен в HFile.
Это конец основного объяснения HBASE, давайте начнем объяснять настоящую боевую тренировку!
3. Практический опыт
Как спроектировать рядовой ключ
Я смогу начать писать статьи только тогда, когда вернусь со сверхурочной работы.
В бизнес-сценарии сигнализации он обычно делится на два сценария.
- Тип временного события — обычно начинается и заканчивается.
- Тип продолжающегося события — обычно начинается с определенного периода времени и заканчивается.
Для этих двух случаев мы можем использовать rowkey как: уникальный идентификатор id + время + тип будильника.
Мы делаем md5 для идентификатора и хэша, чтобы обеспечить сбалансированное распределение данных.
Индикаторная платформа
Второй сценарий, называемый индексной платформой, мы используем kylin для создания слоя упаковки, в нем мы можем выбрать, какие данные хранятся в HBase, какие измерения можно выбрать, какие индикаторы делать запросы. Например, данные транзакции, вы можете выбрать время, город. Он сформирует картинку, а затем создаст отчет. Этим отчетом можно поделиться с другими людьми.
Почему стоит выбрать Kylin, потому что Kylin — этомолап двигатель, он является моделью работы, он соответствует нашим потребностям, и соответствующий ответ на страницу требует ответа доли секунды.
Во-вторых, у него есть определенные требования к параллельности, а исходные данные достигли масштаба в десятки миллиардов. Кроме того, он должен иметь определенную степень гибкости, желательно с sql-интерфейсом, в основном в автономном режиме. Учитывая все обстоятельства, мы используем Kylin.
Введение в Кайлин
Кайлин кратко рассказал о своей семье. Apache Kylin™ — это механизм распределенного анализа с открытым исходным кодом, который предоставляет интерфейс SQL-запросов и возможности многомерного анализа (OLAP) в Hadoop для поддержки сверхбольших данных. Первоначально он был разработан eBay. Inc. и внес свой вклад в сообщество открытого исходного кода. Он может запрашивать огромные таблицы Hive за доли секунды. Его принцип относительно прост: на основе модели параллельной работы я заранее знаю, что хочу запросить определенный показатель из этих измерений. Пройдите все ситуации по заранее заданным показателям и размерам. Используйте molap для расчета всех результатов и сохранения их в HBase. Затем сканируйте прямо в HBase по параметрам и показателям SQL-запроса. Почему можно выполнить запрос менее чем за секунду, зависит от расчета HBase.
килинская архитектура
В соответствии с только что упомянутой логикой хранилище данных находится слева. Все данные хранятся в хранилище данных. В середине находится вычислительный механизм, который выполняет ежедневное планирование, преобразует его в структуру KY HBase и сохраняет в HBase, предоставляет внешние интерфейсы SQL, предоставляет функции маршрутизации, анализирует операторы SQL и преобразует их в определенные команды HBase.
В Kylin есть понятие Cube and Cubed, на самом деле эта логика тоже очень проста, например, известно, что размерности запроса равны A, b, c и d. Когда запрашивается abcd, он может быть взят или не взят. Всего комбинаций 16, вся называется куб. Каждая из этих комбинаций называется кубоидом.
Как Kylin физически хранится в Hbase — вот пример использования оболочек
Сначала определите исходную таблицу, есть два измерения, год и город.
При определении метрики, такой как общая цена. Ниже приведены все комбинации. Я только что упомянул, что в Kylin много комбинаций прямоугольных параллелепипедов. Например, в первых трех строках есть комбинация параллелепипеда: 00000011. Их RowKey в HBase — это параллелепипед плюс значение каждого измерения.
Это сделает небольшой навык, выполняет некоторое кодирование для значения измерения, если исходное значение программы выпущено в Bowkey, он будет относительно длинным.
Rowkey все еще будет версия любой ценности, внутри будет продаваться. Если rowkey станет очень длинным, давление HBase будет очень большим, все это будет уменьшено за счет длины кодирования словаря, таким образом, можно сохранить вычисленные данные в kylin в HBase.
Использование битов для выполнения некоторых функций, многомерный статистический анализ, скорость относительно высокая, и это также распространенный метод анализа больших данных! ! !
Конечно, мы также сотрудничаем с apache Phoenix, чтобы реализовать функцию запроса на практике.
В-четвертых, опыт оптимизации
сначала даю картинку
1. Правильно ли настроен кэш сканирования?
Оптимизация Принцип: Прежде , чем объяснить эту проблему, в первую очередь необходимо объяснить , что SCAN кэш, как правило, один раз в SCAN возвращает много данных, поэтому клиент инициализирует SCAN запрос, и фактически не загружает все данные на местном, но Разделенные в нескольких запросов RPC, который предназначен быть разработаны, потому что большое количество запросов данных может привести к пропускной способности сети серьезно потреблять другие предприятия, а с другой стороны, можно привести к возникновению локального клиента, поскольку объем данных слишком большой. В такой конструкции системы, пользователь сначала загружают некоторые данные в локальном, а затем пройти обработку, а затем загрузить следующую часть данных в локальной обработку, так что все данные загружены. Данные загружаются в кэш-SCAN локально, размер данных по умолчанию 100. Как правило, по умолчанию параметры сканирования в кэше могут работать нормально. Тем не менее, в некотором большом сканировании (один раз SCAN может потребоваться десятки запросов тысяч десятков тысяч строк данных), каждый запрос 100 данных означают , что SCAN нуждается в нескольких сот или даже тысяч запросов RPC, это взаимодействие, несомненно , является очень большим. Таким образом, можно предположить, чтобы увеличить настройку SCAN кэша, например, 500 или 1000 может быть более подходящим. Автор сделал тест. В условиях сканирования сканирования 10Вт + количество полосы, сканирование увеличивается кэш от 100 до 1000, а общая задержка запроса сканирования может быть значительно снижена, и задержка в основном уменьшается примерно на 25% ,
Предложения по оптимизации: в больших сценах сканирования кэш SCAN увеличивается со 100 до 500 или 1000, чтобы уменьшить количество RPC.
2. Могут ли запросы get использовать пакетные запросы?
Принцип оптимизации: HBase предоставляет интерфейсы API для однократного и пакетного получения соответственно.Использование интерфейса пакетного получения может уменьшить количество соединений RPC между клиентом и RegionServer и повысить производительность чтения. Следует также отметить, что запросы на пакетное получение либо успешно возвращают все запрошенные данные, либо выдают исключение.
Предложение по оптимизации: используйте пакетное получение для запросов на чтение
3. Может ли запрос отображать указанное семейство столбцов или столбец?
Принцип оптимизации: HBase — типичная база данных семейства столбцов, что означает, что данные одного семейства столбцов хранятся вместе, а данные разных семейств столбцов хранятся отдельно в разных каталогах. Если таблица имеет несколько семейств столбцов, данные из разных семейств столбцов необходимо извлекать независимо, а данные из разных семейств столбцов необходимо извлекать независимо, и производительность будет намного хуже, чем при запросе указанного семейства столбцов, и во многих случаях это даже будет в два раза выше ~3-кратной потери производительности.
Предложение по оптимизации: вы можете указать семейство столбцов или столбец для точного поиска, насколько это возможно, чтобы указать поиск
4. Кэширование отключено для автономных пакетных запросов чтения?
Принцип оптимизации: Обычно при офлайн пакетном чтении данных выполняется однократное полное сканирование таблицы, с одной стороны объем данных большой, а с другой стороны запрос будет выполняться только один раз. В этом сценарии, если используются настройки сканирования по умолчанию, данные будут загружены из HDFS и помещены в кэш. Вполне возможно, что когда в кеш поступает большой объем данных, другие оперативные бизнес-данные будут вытеснены из него, а другие сервисы придется загружать из HDFS, что приведет к очевидным сбоям задержки чтения.
Предложение по оптимизации: отключить кеш в настройках автономного пакетного запроса на чтение, scan.setBlockCache(false)
5. RowKey должен быть хэширован (например, хеширование MD5), а таблица должна быть предварительно разбита на разделы.
6. Если конфигурация памяти JVM меньше 20G, выберите LRUBlockCache для стратегии BlockCache, в противном случае выберите режим offheap для стратегии BucketCache, ждите появления HBase 2.0!
7. Наблюдайте за количеством файлов хранилища на уровне RegionServer и уровне региона, чтобы убедиться, что файлов HFile слишком много.
Предложение по оптимизации:
Параметр hbase.hstore.compactionThreshold не может быть слишком большим, по умолчанию 3, параметр нужно определить по размеру Региона, обычно можно просто считать, что hbase.hstore.compaction.max.size = RegionSize/ hbase.hstore.compactionThreshold
8. Потребляет ли уплотнение слишком много системных ресурсов?
(1) Незначительная настройка сжатия: параметр hbase.hstore.compactionThreshold не может быть слишком маленьким или слишком большим, поэтому рекомендуется установить его от 5 до 6; (2 ) Настройка основного сжатия: обычно не рекомендуется включать автоматическое основное уплотнение для сервисов, чувствительных к задержке чтения в большом регионе (выше 100G), и запускать его вручную в периоды низкой нагрузки. Небольшие регионы или сервисы, не чувствительные к задержкам, могут включить основное уплотнение, но рекомендуется ограничить трафик; (3) Ожидайте более отличных стратегий уплотнения, подобных чередующемуся уплотнению, для обеспечения стабильных услуг как можно скорее.
9.Установлен ли Блумфильтр? Разумна ли установка?
Bloomfilter должен быть установлен для любого бизнеса, обычно для строки, если только не подтверждено, что тип случайного запроса для бизнеса - row+cf, который может быть установлен как rowcol.
BloomFilter включен для каждого ColumnFamily, мы можем использовать Java API
//我们可以通过ColumnDescriptor来指定开启的BloomFilter的类型
HColumnDescriptor.setBloomFilterType() //可选NONE、ROW、ROWCOL
Мы также можем указать BloomFilter при создании таблицы
hbase> create 'mytable',{NAME => 'colfam1', BLOOMFILTER => 'ROWCOL'}
10. Включите функцию локального чтения при коротком замыкании, щелкните здесь, чтобы просмотреть конкретную конфигурацию.Официальный сайт
Принцип оптимизации: в настоящее время HDFS необходимо пройти через DataNode для чтения данных.Клиент отправит запрос на чтение данных в DataNode.После того, как DataNode получит запрос, он прочитает файл с жесткого диска и отправит его клиенту через ТПК. Стратегия короткого замыкания позволяет клиентам обходить DataNode для прямого чтения локальных данных.
11. Включена ли функция хеджированного чтения?
Принцип оптимизации: данные HBase обычно хранятся в трех копиях в HDFS, и сначала будет предпринята попытка локального чтения с помощью функции локального чтения с коротким замыканием. Однако в некоторых особых случаях возможны кратковременные локальные сбои чтения, вызванные проблемами с диском или сетевыми проблемами.Для решения таких проблем разработчики сообщества предложили компенсационный механизм повторных попыток — Hedged Read. Основной принцип работы этого механизма таков: клиент инициирует локальное чтение, и, если оно не возвращается через определенный период времени, клиент отправляет запрос на те же данные другим узлам данных. Какой бы запрос ни вернулся первым, другой будет отброшен. Предложение по оптимизации: включите функцию хеджированного чтения, см. здесь для конкретной конфигурацииОфициальный сайт
12. Слишком низкая локальная скорость передачи данных?
Локальная скорость данных: данные HDFS обычно хранятся в трех копиях.Если текущий регионA находится на узле 1, три копии данных a (узел 1, узел 2, узел 3) при записи данных a и три копии данных b записываются в (Node1, Node4, Node5), Данные c записываются в три копии (Node1, Node3, Node5).Видно, что все данные, записываемые в локальный Node1, обязательно будут записаны, и данные могут быть прочитаны локально, поэтому локальная скорость передачи данных составляет 100%. Теперь предположим, что RegionA перенесен на Node2, только данные a находятся на этом узле, другие данные (b и c) могут быть считаны только между узлами удаленно, а локальная скорость составляет 33% (при условии, что размеры данных a, b и c одинаковые). Принцип оптимизации: если локальная скорость передачи данных слишком низкая, это, очевидно, будет генерировать большое количество межсетевых запросов ввода-вывода, что неизбежно приведет к высокой задержке запросов на чтение.Поэтому увеличение локальной скорости данных может эффективно оптимизировать производительность случайного чтения . Причина низкой локализации данных, как правило, связана с миграцией регионов (включение автоматического баланса, миграция из-за простоя RegionServer, ручная миграция и т. д.), поэтому, с одной стороны, скорость локализации данных можно поддерживать, избегая необоснованной миграции регионов. , с другой стороны, если скорость локальности данных очень низкая, вы также можете увеличить локальную скорость данных до 100%, выполнив команду major_compact. Предложение по оптимизации: избегайте необоснованной миграции регионов, например, отключения автоматического баланса, подтягивания и возврата к плавающему региону во время, когда RS не работает, и т. д.; выполняйте major_compact во время низких пиковых нагрузок, чтобы улучшить локальную скорость передачи данных.
13. Онлайн-ошибка, hbase больше не предоставляет услуги?
Масштаб кластера составляет от 10 до 20, а количество данных, считываемых и записываемых в секунду, составляет порядка сотен тысяч записей.
Когда клиент выполняет операции RPC с кластером HBase, будет выдано исключение NotServingRegionException, что приведет к сбою операций чтения и записи. Много операций записи заблокировано, файлы записываются, и система предупреждена!
Устранение неполадок
При просмотре журнала работы HBase Master в сочетании с моментом, когда клиент выдает исключение, обнаружено, что разделение региона в кластере HBase в то время и баланс региона между разными машинами
1) Так как ключ строки в таблице имеет поле времени, каждый день необходимо создавать новый регион.В то же время из-за большого объема записываемых данных дополнительно запускается операция разделения региона HBase.Этот процесс обычно занимает много времени (из онлайн-лога во время теста).С точки зрения среднего около 10 секунд, размер региона 4 ГБ), а операция Region Split срабатывает чаще;
2) В то же время из-за операции Region Split распределение регионов неравномерно, что, в свою очередь, инициирует HBase для автоматического выполнения операции Region Balance.Во время процесса Region Migration регион также будет отключен.Этот процесс занимает долгое время. В среднем 20 секунд).
решать:
1) На стороне записи вы можете добавить записи, которые не были успешно записаны в кэш клиента, и передать их фоновому потоку для повторной отправки через определенный период времени; вы также можете использовать setAutoFlush(flase, false) для убедитесь, что отправка не удалась.Запись не отбрасывается и остается в клиентском буфере записи, чтобы дождаться заполнения следующего буфера записи и попытаться отправить снова, пока отправка не будет успешной.
2) После завершения чтения, после того, как обнаружена аномалия, через некоторое время может потребоваться повторная попытка.
3) Измените поле временной метки на периодическую временную метку, такую как значение после временной метки % TS_MODE, где TS_MODE должно быть больше или равно периоду времени TTL таблицы, чтобы гарантировать, что данные не будут перезаписаны. После этого преобразования можно реализовать повторное использование области и избежать бесконечного увеличения области. Изменения в конце чтения-записи также невелики. Когда работает конец чтения-записи, ему нужно только взять модуль поля временной метки в качестве ключа строки для чтения и записи. Кроме того, конец чтения должен учитывать возможность обработки [startTsMode, endTsMode] и [endTsMode, startTsMode] во время сканирования. ] два случая
Справочная статья:
blog.CSDN.net/Ю Фан настоящий…
❤️❤️❤️❤️
Большое спасибо, что смогли увидеть эту статью.Если эта статья хорошо написана и вы думаете, что есть что-то, пожалуйста, ставьте лайк👍 Следуйте ❤️ Пожалуйста, поделитесь 👥 Это действительно полезно для меня, красавчик Оппа! ! !
Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!
В конце статьи мы недавно составили материал для интервью «Руководство по прохождению интервью по Java», в котором рассматриваются основные технологии Java, JVM, параллелизм Java, SSM, микросервисы, базы данных, структуры данных и многое другое. Как получить: GitHub github.com/Tingyu-Note…, следуйте официальной учетной записи для получения большего контента: Tingyu Notes, которые будут предоставляться один за другим.