Spring Boot элегантно реализует функции hbase
Spring Boot элегантно реализует функции hbase

Чтобы реализовать функции HBase в проекте Spring Boot, сначала необходимо понять принципы и функции, а затем интегрировать его в проект Spring Boot посредством практических операций. Вот подробные шаги от теории к практике:

1. Какие проблемы решает HBase?

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

1.1 Крупномасштабное хранилище данных
  • Горизонтальное расширение:HBase Можно добавить, добавив RegionServer 来Горизонтальное расширение, поддерживает хранение больших объемов данных.
  • эффективное хранение:Благодаря столбчатому хранению и сжатию данных,HBase Крупномасштабные данные могут храниться эффективно.
1.2 Быстрый произвольный доступ для чтения и записи
  • Чтение и запись с низкой задержкой:HBase Поддерживает произвольный доступ для чтения и записи на уровне миллисекунд, что подходит для сценариев приложений с высокими требованиями ко времени отклика.
  • написание в режиме реального времени:Записанные данные сохраняются в первую очередьсуществоватьв памятииз MemStore, впоследствии написанный асинхронно HFile, что делает запись очень эффективной.
1.3 Надежность данных
  • Надежность данных:проходить WAL Запись и запись осуществляют журнал, чтобы гарантировать, что данные не будут потеряны в процессе записи.
  • Высокая доступность:проходить Zookeeper Координация для достижения кластеризации из Высокая доступность и распределенная согласованность.
1.4 Управление версиями данных
  • Версия данных:HBase Поддерживает хранение нескольких версий данных для каждой ячейки, идентифицируя версии по временным меткам. Это делает управление историческими версиями данных очень простым.
1.5 Гибкая столбчатая модель данных
  • Столбцово-ориентированная модель хранения:HBase Модель столбчатого хранения делает структуру модели данных очень гибкой, а столбцы можно добавлять динамически в соответствии с потребностями.

2. Сценарии применения

HBase подходит для следующих сценариев применения:

  • Хранение журналов и событий:HBase Может хранить и извлекать крупномасштабные данные журналов и событий, подходящие для систем анализа и мониторинга в реальном времени.
  • Анализ данных в реальном времени:HBase Поддерживает быстрое случайное чтение и запись, подходит для тех, кому нужен анализ. данных в реальном времениизприложение。
  • Платформа больших данных:作为 Hadoop Часть экосистемы HBase Может комбинироваться с другими инструментами больших данных, такими как Hadoop、Spark、Hive и т. д.) бесшовная интеграция.
  • Хранение пользовательских данных:HBase Его можно использовать для хранения огромных пользовательских данных и подходит для таких приложений, как социальные сети и платформы электронной коммерции.

3. Теория и практика HBase

3.1 Введение в HBase

HBase — это распределенная, столбцово-ориентированная база данных с открытым исходным кодом, реализованная на основе документа Google Bigtable. Он обеспечивает высокую надежность, высокую производительность, столбчатое хранилище, распределенную масштабируемость и возможности выполнения запросов в реальном времени, а также подходит для обработки больших наборов данных.

3.2 Шаги по интеграции HBase
Введение зависимостей

существовать pom.xml Добавить HBase Клиентские зависимости:

xmlКопировать код

Язык кода:javascript
копировать
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- HBase Client -->
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.4.8</version>
    </dependency>
</dependencies>

Настроить HBase

существовать application.properties или application.yml 中Настроить HBase Информация о подключении:

свойства Скопировать код

Язык кода:javascript
копировать
hbase.zookeeper.quorum=localhost
hbase.zookeeper.property.clientPort=2181

Создать класс конфигурации HBase

Java-код копирования

Язык кода:javascript
копировать
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Configuration
public class HBaseConfig {

    @Value("${hbase.zookeeper.quorum}")
    private String quorum;

    @Value("${hbase.zookeeper.property.clientPort}")
    private String port;

    @Bean
    public Connection hbaseConnection() throws IOException {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", quorum);
        config.set("hbase.zookeeper.property.clientPort", port);
        return ConnectionFactory.createConnection(config);
    }
}

Инкапсуляция операций HBase

Java-код копирования

Язык кода:javascript
копировать
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class HBaseService {

    @Autowired
    private Connection connection;

    public void putData(String tableName, String rowKey, String family, String qualifier, String value) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(family.getBytes(), qualifier.getBytes(), value.getBytes());
        table.put(put);
        table.close();
    }

    public String getData(String tableName, String rowKey, String family, String qualifier) throws IOException {
        Table table = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowKey.getBytes());
        get.addColumn(family.getBytes(), qualifier.getBytes());
        Result result = table.get(get);
        byte[] value = result.getValue(family.getBytes(), qualifier.getBytes());
        table.close();
        return value != null ? new String(value) : null;
    }
}

Создайте контроллер HBase

Java-код копирования

Язык кода:javascript
копировать
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class HBaseController {

    @Autowired
    private HBaseService hbaseService;

    @GetMapping("/put")
    public String putData(@RequestParam String tableName, @RequestParam String rowKey, @RequestParam String family, @RequestParam String qualifier, @RequestParam String value) throws IOException {
        hbaseService.putData(tableName, rowKey, family, qualifier, value);
        return "Data inserted successfully";
    }

    @GetMapping("/get")
    public String getData(@RequestParam String tableName, @RequestParam String rowKey, @RequestParam String family, @RequestParam String qualifier) throws IOException {
        return hbaseService.getData(tableName, rowKey, family, qualifier);
    }
}

4. Резюме

проходить以上步骤,Мы можем существовать Spring Boot Интегрируйте и элегантно работайте в проектах HBase . Вот краткое изложение основных шагов:

  1. Введение зависимостей:существовать pom.xml Добавитьнуждатьсяизполагаться。
  2. Информация о подключении конфигурации:существовать application.properties или application.yml Средняя получить информацию о соединении.
  3. создавать Конфигурациядобрый:инициализация HBase связь.
  4. Инкапсуляциядействовать:создавать服务добрый Инкапсуляция Обычно используетсядействовать,Например, вставка、Запрос、Удалить данные.
  5. создаватьконтроллер:提供 RESTful API Интерфейс для вызова фронтенда и других сервисов.

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024.,Приходите и разделите приз со мной!

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.