Подробное руководство по использованию стратегии предварительного разбиения для повышения производительности в HBase.
Подробное руководство по использованию стратегии предварительного разбиения для повышения производительности в HBase.

HBase — это платформа на базе системы распределенных баз данных HDFS.,Способен обрабатывать крупномасштабные структурированные и полуструктурированные данные. В отличие от традиционных реляционных баз данных,HBase чрезвычайно масштабируем и имеет высокую пропускную способность.,Способен обрабатывать очень большие данные с миллионами строк и тысячами столбцов. Во многих сценариях больших данных,такие как аналитика в реальном времени и хранение данных Интернета вещей.,HBaseэто очень эффективное решение。HBaseТаблица состоит из несколькихRegionкомпозиция,Регион — это осколок таблицы,Сохраняет определенный диапазон ключей строк. Во избежание горячих точек при записи данных (то есть большое количество операций записи сосредоточено в определенном Регионе),Стратегия предварительного разделенияспособен Создание таблица заранее выделяет несколько регионов,Тем самым равномерно распределяя операции записи по разным регионам.,Значительно улучшить производительность.

В дизайне таблицы HBase,По умолчанию,Таблица имеет только один регион при ее создании.,Поскольку данные продолжают записываться,Регион достигнет установленного ограничения размера,тогда пройдиАвто-разделение,Разделите данные на новые регионы. Эта стратегия по умолчанию может легко привести к «горячим точкам» при записи больших объемов данных на ранних этапах.,Все операции записи сосредоточены в одном регионе.,Это создает узкое место в производительности.

Чтобы решить эту проблему,Стратегия предварительного разделения(Pre-Splitting)как эффективное средство,существовать Создание В таблице несколько регионов разделяются заранее, чтобы избежать горячих точек и обеспечить равномерное распределение операций записи по разным регионам. В этой статье мы углубимся в то, как использовать Стратегию с HBase. предварительного Раздел повышает производительность написания и демонстрирует подробный процесс реализации посредством анализа примеров и кода.


Преимущества стратегии предварительного разбиения HBase

Стратегия предварительного разделения имеет следующие преимущества:

преимущество

описывать

Избегайте горячих точек записи данных

За счет предварительного разделения регионов запросы на запись распределяются по нескольким регионам, чтобы избежать узких мест в производительности.

Улучшение производительности записи

Распределение данных становится более равномерным, а запись выполняется на нескольких региональных серверах параллельно, что повышает общую пропускную способность.

преимущество

описывать

Оптимизация балансировки нагрузки

Предварительное разделение позволяет равномерно распределять регионы, уменьшая накладные расходы на автоматическое разделение и улучшая эффект балансировки нагрузки.

лучшая масштабируемость

В сценариях с высоким уровнем параллелизма стратегии предварительного разделения помогают обрабатывать крупномасштабные данные и обеспечивать масштабируемость системы.


Лучшие практики для стратегий предварительного разбиения HBase

  1. Определите разумное количество разделов

Нам необходимо определить разумное количество разделов в зависимости от ожидаемого объема данных и нагрузки. Число разделов не должно быть слишком малым, чтобы избежать перегрузок, и не должно быть слишком большим, чтобы избежать ненужной траты ресурсов. В целом его можно определить по следующим принципам:

Факторы влияния

описывать

Примерное количество ключей строк

Если ожидается большое количество операций записи, потребуется больше регионов, чтобы избежать горячих точек записи.

Размер кластера

В зависимости от количества серверов регионов убедитесь, что каждому серверу региона выделено разумное количество регионов.

Факторы влияния

описывать

Частота записи данных

Если данные записываются часто и нагрузка высока, количество предварительных разделов следует соответствующим образом увеличить, чтобы повысить производительность записи системы.

  1. Выберите подходящий дизайн клавиш строк

Дизайн ключей строк имеет решающее значение для эффективности предварительного разделения. Вообще говоря,Ключи строк HBase сортируются в словарном порядке.,Если дизайн строк клавиш неуместен (например, увеличение или фиксированный префикс),Приведет к записи определенных конкретных регионов в набор данных.,Это все равно вызовет горячие точки. поэтому,использоватьКлюч хэш-строкиилиключ от соляного рядаможно эффективно избежать этой ситуации。

  1. Создайте таблицу с предварительным секционированием

HBase предоставляет несколько способов предварительного разделения при создании таблицы. Наиболее распространенным способом является предварительное разделение на основе диапазонов ключей строк или пользовательских ключей разделов.

Пример: предварительное разделение на основе диапазона ключей строк
Язык кода:java
копировать
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;

public class HBasePreSplitTable {
    public static void main(String[] args) throws Exception {
        // Настройка соединения HBase
        Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Admin admin = connection.getAdmin()) {

            // Определите имена таблиц и семейства столбцов
            TableName tableName = TableName.valueOf("pre_split_table");
            HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
            HColumnDescriptor columnDescriptor = new HColumnDescriptor("info");
            tableDescriptor.addFamily(columnDescriptor);

            // Настройка предварительного разделения
            byte[][] splitKeys = {
                Bytes.toBytes("row1000"),
                Bytes.toBytes("row2000"),
                Bytes.toBytes("row3000"),
                Bytes.toBytes("row4000"),
                Bytes.toBytes("row5000")
            };

            // Создайте таблицу с предварительным секционированием
            admin.createTable(tableDescriptor, splitKeys);
            System.out.println("Table created with pre-split regions.");
        }
    }
}
  • splitKeys Определены 5 ключей разделов, разделяющих таблицу на 6 регионов (между каждыми двумя ключами разделов формируется регион).
  • admin.createTable(tableDescriptor, splitKeys) Метод используется для создания таблицы с предварительным секционированием.
  • Каждый регион будет отвечать за запись данных в соответствующем диапазоне ключей строк, чтобы обеспечить равномерное распределение операций записи.
  1. использоватьключ от соляного ряда

Чтобы избежать горячих точек, вызванных сортировкой ключей строк, вы можете ввести значения соли, чтобы нарушить порядок ключей строк и равномерно распределить данные.

Пример: дизайн ключа строки значения соли
Язык кода:java
копировать
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseSaltedRowKey {
    private static final int SALT_BUCKETS = 10;

    public static void main(String[] args) throws Exception {
        Configuration config = HBaseConfiguration.create();
        try (Connection connection = ConnectionFactory.createConnection(config);
             Table table = connection.getTable(TableName.valueOf("salted_table"))) {

            // Для записи данных используйте ключ от соляного ряда
            for (int i = 0; i < 1000; i++) {
                String rowKey = getSaltedRowKey("user" + i);
                Put put = new Put(Bytes.toBytes(rowKey));
                put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"),Bytes.toBytes("имя" + я));
                таблица.put(поместить);
            }

            System.out.println("Данные вставлены с помощью ключей строк с солью.");
        }
    }

    // генерироватьпереключатель от соляного ряда
    частная статическая строка getSaltedRowKey (String originalKey) {
        int salt = Math.abs(originalKey.hashCode()) % SALT_BUCKETS;
        вернуть соль + «_» + originalKey;
    }
}
  • SALT_BUCKETS Количество значений соли определяется и определяет степень дисперсии данных.
  • getSaltedRowKey Метод генерирует вспомогательное значение из хэш-значения ключа строки и присоединяет его перед исходным ключом строки, нарушая порядок ключей строки.
  • Такая конструкция гарантирует, что записанные данные могут быть равномерно распределены в разных регионах, избегая горячих точек.
  1. Мониторинг и настройка

Когда работает кластер HBase, очень важно следить за нагрузкой каждого Региона. Если вы обнаружите, что загрузка некоторых регионов слишком высока или слишком низка, вы можете оптимизировать ее, скорректировав стратегию разделения или вручную разделив/объединив регионы. HBase предоставляет различные инструменты мониторинга и API для просмотра статуса региона и данных о производительности.

Процесс развертывания

В крупномасштабных производственных средах создание таблиц и реализация стратегии предварительного секционирования с помощью HBase Shell или API являются очень распространенными операциями. Ниже описан процесс реализации предварительного разделения с помощью HBase Shell.

  1. Использование HBase ShellСоздайте таблицу с предварительным секционированием
Язык кода:shell
копировать
hbase(main):001:0> create 'pre_split_table', 'info', SPLITS => ['row1000', 'row2000', 'row3000', 'row4000', 'row5000']
  1. Использование HBase Результаты проверки оболочки перед разделением
Язык кода:shell
копировать
hbase(main):002:0> describe 'pre_split_table'

После выполнения приведенной выше команды вы можете увидеть разделение таблицы, а также ключ начальной и конечной строки каждого региона.

в практическом применении,Предположим, у нас есть платформа электронной коммерции.,Ключ строки данных пользователя — user.ID(нравитьсяuser123)。существовать По умолчанию,HBase расположит эти ключи строк в лексикографическом порядке.,Вызывает запись определенных регионов в наборы данных с ключами закрытия строк.,Вызвать острые проблемы.

Применяя Стратегию предварительного разделения,Мы можем заранее разделить данные идентификатора пользователя на несколько регионов в соответствии с интервалом.,нравитьсяuser1000приезжатьuser2000user2000приезжатьuser3000ждать,Тем самым равномерно распределяя нагрузку на запись по разным регионам.,Горячих вопросов удалось избежать,И улучшить общую производительность записи.

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

шаг

описывать

Определить количество разделов

Определите разумное количество разделов в зависимости от объема данных и частоты записи.

Дизайн клавиш строки

Используйте ключ хэш-строки или ключ солевой строки, чтобы избежать горячих точек.

Создание таблицы

Создайте таблицу с предварительным секционированием с помощью HBase API или HBase Shell.

Мониторинг и настройка

Регулярно проверяйте загрузку региона с помощью инструментов мониторинга и при необходимости корректируйте стратегию разделения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose