Системный анализ SSM (HDFS Intelligent Storage Management)
Системный анализ SSM (HDFS Intelligent Storage Management)

Предыстория

Smart Storage Management (SSM) ПроектСистема управления хранилищем данных HDFS с открытым исходным кодом Intel предназначена для предоставления интеллектуальных решений по управлению данными HDFS.。SSMОн имеет следующие важные функции::

  • SSM Mover,Используется для иерархического управления горячими и холодными данными. На основе пользовательских правил SSM.,SSM различает горячие и холодные данные,Перенос горячих и холодных данных на соответствующие носители соответственно.,Правильно используйте различные устройства хранения данных.
  • Оптимизация небольших файлов SSM,Возможность объединения небольших файлов HDFS в один большой файл.,после слияния,По-прежнему поддерживает прозрачные операции чтения для небольших файлов.
  • SSM Data Sync,Возможность автоматической синхронизации данных в одном кластере HDFS с другим кластером.
  • SSM EC (Erasure Coding),Данные HDFS могут быть преобразованы в данные в соответствии с определенной политикой ЕС.,Может значительно уменьшить занимаемое место для хранения
  • SSM Compression,Может быть сжат в соответствии с указанным алгоритмом сжатия.,Сжатие файлов HDFS

общая архитектура

SSMобщая архитектура может быть разделена на три части:

  • SSM Metastore: управляет метаданными системы хранения и оптимизирует их, поддерживает стандартный SQL, предоставляет интерфейс запросов и позволяет пользователям и другим компонентам системы запрашивать информацию о метаданных.
  • Сервер SSM: выполняет анализ и выполнение на основе правил и политик, отправляет их агенту и получает результаты выполнения, сообщаемые агентом.
  • Агент SSM: получает и выполняет задачи по оптимизации хранилища, заданные сервером, и сообщает серверу о результатах выполнения и контрольных сигналах.

SSM Server имеет встроенные планировщики (Scheduler) для различных типов задач на основе потоков, в основном включая:

  • Mover Scheduler: иерархическая обработка горячих и холодных данных
  • Планировщик копирования: резервное копирование данных
  • Планировщик EC: метод хранения кода стирания HDFS EC
  • Планировщик SmallFiles: объединение небольших файлов

Общий процесс выполнения SSM можно разделить на четыре этапа: Сбор → Изучение → Выполнение → Измерение.

  1. Collect:Сбор данных,Например,Количество запросов на доступ, Данные о температуре、Разрешения на данные、Информация о системном хранилище、Предопределенные пользователем правила、Вычислительная эффективность и т. д.;
  2. Learn:Анализируйте собранные данные на основе эвристических алгоритмов,Создание задач оптимизации для выполнения
  3. Perform:осуществлятьHDFSИнтеллектуальное управление данными,Например,Кэширование горячих данных,Архивирование холодных данных,Используйте прозрачное сжатие,Код стирания ЕС,Небольшое объединение файлов и т.д.
  4. Measure:Оцените эффективность интеллектуального управления,Например,Использование хранилища,Эффективность доступа к данным,Оптимизация загрузки системы и т. д.

Схема взаимодействия каждой системы выглядит следующим образом:

  • Сервер SSM развертывается отдельно и предоставляет услуги внешних вызовов на основе REST API.
  • Клиент SSM и клиент HDFS можно смешивать и развертывать на одном узле, чтобы клиентский узел мог выполнять задачи управления файлами.
  • И Серверу, и Клиенту необходимо обеспечить сетевое подключение к кластеру HDFS.

Проектирование базы данных

Основная информация, хранящаяся в базе данных, включает в себя:

  • файлы: информация о файле, включая идентификатор, путь, размер, номер резервной копии блока, политика хранения, пользователь, группа пользователей, политика EC, информация о разрешениях.
  • кэшированные_файлы: поддержка файлов горячего кэша и сбор статистики попадания горячих данных.
  • Storage_policy: идентификатор и имя пользовательской политики хранения.
  • экполитика: политика ЕС
  • владельцы: хранить информацию о пользователях
  • группы: сохранение информации о группах приложений.
  • access_count_tables: на основе разных временных измерений подсчитайте частоту доступа к файлам.

основной класс

(1). SmartService

Класс услуг по внедрению бизнеса SSM в основном включает в себя:

  • ActionScheduleService: служба планирования задач.
  • StateUpdateService: служба обновления статуса задачи.
  • CmdletManager: менеджер выполнения cmd
  • RuleManager: Менеджер правил.
  • StatesManager: менеджер состояния задач, основанный на FSM (приоритетном конечном автомате) для управления статусом.

(2). SmartEngine

Отвечает за запуск всех внедренных SmartServices, в основном включая:

  • StatesManager
  • RuleManager
  • CmdletManager
    • AgentExecutorService
    • HazelcastExecutorService

(3). StatesManager

StatesManager проведет опрос для сбора показателей и событий из NameNode.

  • init инициализация
    • Инициализировать пул потоков:получение информации`accessEventFetcher`
    • Инициализировать службу изменения статуса:`initStatesUpdaterService`
  • start Начало темы
    • AccessEventFetcher.start: запуск запланированной задачи потока: `FetchTask`
    • StatesUpdaterService.start
Интерфейс сбора событий
Интерфейс сбора событий

(4). RuleManager

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

Плагин исполнителя правил
Плагин исполнителя правил

`RuleExecutor`: Исполнитель политики:

  • init: Инициализировать политику выполнения RuleInfo.
  • start: Отправьте задачи политики, которые необходимо выполнить.

(5). CmdletManager:основанный на системеCMDрежим сценария,Действительно достичь миссииосуществлять.стратегия, основанная наSmartActionосуществлять,SmartAction — это базовый класс Action.,Все действия необходимо запускать в командлетах или веб-консоли.

Базовый класс действия
Базовый класс действия

(6). SmartAgent

Выполнить команду, выданную сервером,При этом сообщаются соответствующие результаты выполнения.,на основе`ActorSystem` осуществленный.

Детали реализации

SSM представляет собой типичную архитектуру «главный-подчиненный». Сервер является главным узлом, а агент — подчиненным узлом. Связь между главным и клиентским узлами осуществляется на основе актера.

Smart Server

Сборщик коллекции

Запускаемый StatesManager, он поддерживает динамическую загрузку конфигурации во время выполнения.

(1). FileAccessEventSource

Получайте события доступа к файлам разными способами. Класс реализации по умолчанию: `SmartServerAccessEventSource`:

  • Сборщик FileAccessEventCollector
  • Получите информацию, сообщаемую SmartClient, и сохраните ее, чтобы облегчить последующее выполнение потребления.
Язык кода:java
копировать
  /**
   * Get a collector what will produce events from this file access event source.
   */
  FileAccessEventCollector getCollector();
  
    /**
   * Insert events generated from the Smart client so that the collector can consume.
   * The actual implementation of FileAccessEventSource doesn't have to support this.
   * @param event The event that generated from Smart client
   */
  void insertEventFromSmartClient(FileAccessEvent event);

(2). FileAccessEventCollector

Коллектор может создавать события доступа к файлам,инкапсулированный в очередь`LinkedBlockingQueue`середина,Производить и потреблять данные из очереди;

  • Получить список всех событий коллектора
Язык кода:java
копировать
  /**
   * Collect file access events occured since last calling of this method.
   * @return access events
   * @throws IOException
   */
  List<FileAccessEvent> collect() throws IOException;

(3). AccessEventFetcher

Получите все события FileAccess и поместите каждое время доступа в окно агрегирования.

(4). StatesUpdateService

Обработка обновления событий компонента HDFS основана на реализации HdfsStatesUpdateService, которая включает в себя:

Инициализация инициализации:

  • Загрузить информацию о конфигурации HDFS
  • Получить NameNodeUri (основной адрес NN RPC)
  • Получите вызывающий клиент `DFSClient`, предоставленный HDFS.
  • Определите путь операции: `/system/mover.id` существует, если он не существует, создайте новый;
  • инициализацияFetcherобъект;
    • CachedListFetcher: список кеша,Планирование с запланированными задачами`ScheduledExecutorService`Запускаем тему в форме`FetchTask`,Получить информацию о списке кэша HDFS
    • InotifyEventFetcher: событие изменения узла, получает информацию об изменении на основе client.getNamenode().getCurrentEditLogTxid(), получает информацию о файле на основе NamespaceFetcher
    • DataNodeInfoFetcher: информация об DN-узле, получение емкости хранилища DN, client.getDatanodeStorageReport и обновление информации о емкости DN в БД.
    • StorageInfoSampler: шаблон информации о хранилище.

Начать операцию:

  • Запустите объект Fetcher
  • Загрузить плагин правил`RulePlugin`
    • CheckSsdRulePlugin
    • CheckErasureCodingRulePlugin

(5). RulePlugin

Плагин правила управляет вызовом жизненного цикла правила и в основном предоставляет следующие методы:

  • Вызов выполнения при добавлении нового правила
  • Выполнение вызова после добавления ЗаканчиватьRule
Язык кода:java
копировать
void onAddingNewRule(RuleInfo ruleInfo, TranslateResult tr) throws IOException;

void onNewRuleAdded(RuleInfo ruleInfo, TranslateResult tr);

Стратегия правил

Зависит от StatesManager, CmdletManager, полагается на RuleExecutorPlugin при создании плагина выполнения правил:

(1). RuleExecutorPlugin

Плагин выполнения правил в основном предоставляет следующие методы:

  • Выполнение действий после добавления новых правил
  • Настройте действия перед выполнением правила
  • Пользовательские операции перед отправкой командлета
  • Пользовательские операции перед отправкой CmdletDescriptor
  • Пользовательские действия после завершения выполнения правила
Язык кода:java
копировать
/**
   * Called just before an RuleExecutor been generated and submitted to
   * thread pool for execution. Only called once per instance.
   *
   * @param ruleInfo
   * @param tResult
   */
  void onNewRuleExecutor(final RuleInfo ruleInfo, TranslateResult tResult);

  /**
   * Called just before rule executor begin to execute rule.
   *
   * @param ruleInfo
   * @param tResult
   * @return continue this execution if true.
   */
  boolean preExecution(final RuleInfo ruleInfo, TranslateResult tResult);

  /**
   * Called after rule condition checked.
   *
   * @param objects the result of checking rule condition.
   * @return object list that will be used for Cmdlet submission.
   */
  List<String> preSubmitCmdlet(final RuleInfo ruleInfo, List<String> objects);

  /**
   * Called right before the CmdletDescriptor been submitted to CmdletManager.
   *
   * @param descriptor
   * @return the descriptor that will be used to submit to CmdletManager
   */
  CmdletDescriptor preSubmitCmdletDescriptor(final RuleInfo ruleInfo, TranslateResult tResult,
      CmdletDescriptor descriptor);

  /**
   * Called when an RuleExecutor exits. Called only once per instance.
   *
   * @param ruleInfo
   */
  void onRuleExecutorExit(final RuleInfo ruleInfo);

Реализованные плагины правил включают в себя:

  • FileCopyDrPlugin: `CmdletDescriptor` описывает информацию о выполнении команды и выполняет операцию резервного копирования. Соответствующее действие — `SyncAction`;
  • FileCopy2S3Plugin: резервное копирование данных на S3, соответствующее действие — «Copy2S3Action»;
  • SmallFilePlugin: объединение и проверка небольших файлов.
  • ErasureCodingPlugin: поддерживается Hadoop3.x, соответствующее действие — «ErasureCodingAction».

(2). SmartRuleStringParser

Преобразование строковых правил в объекты правил, выполнение преобразования правил на основе antlr, анализ с помощью Lexer, синтаксический анализ с помощью Parser, преобразование SmartRuleBaseVisitor в объекты и, наконец, TranslateResult.

Язык кода:java
копировать
ParseTree tree = parser.ssmrule();

(3). RuleInfoRepo

Вы можете получить RuleInfo, ключевой метод launchExecutor, получить RuleExecutor;

(4). RuleManager

Управление жизненным циклом правил, ключевые методы включают в себя:

  • submitRule: отправьте правило и вызовите задачу на основе RuleExecutor.
  • deleteRule: удалить правило
  • activeRule: правило активации
  • DisableRule: прекратить использование правила.
  • getRuleInfo: Получить указанную информацию о правиле.
  • listRulesMoveInfo: список информации о перемещении правил.
  • listRulesSyncInfo: список информации о синхронизации правил.
  • listRulesInfo: список правил
  • updateRuleInfo: обновить правила

(5). RuleExecutor

Сервер реализует потоки, выданные на выполнение,основной класс,Основной метод submitCmdlets,Наконец, `CmdletManager.submitCmdlet(cmd)` Заканчивать

Язык кода:java
копировать
RuleManager.start 
    -> RuleExecutor.run() 
        -> CmdletManager.submitCmdlet

Планирование действий

(1). CmdletManager

Управление выполнением CMD, в основном включая

  • submitCmdlet: поддерживает выполнение задач выполнения с помощью CmdletDescriptor, получает список ActionInfo, соответствующий задаче выполнения, и сохраняет действие, которое должно быть выполнено, в метаданных;
  • syncCmdAction: информация cmd выполняется синхронно и хранится в памяти;

(2). CmdletDescriptor

CmdletDescriptor генерирует соответствующий CmdletInfo и соответствующее выполнение ActionInfo, ядро ​​ScheduleTask и метод выполнения ScheduleCmdletActions.

Язык кода:java
копировать
CmdletDescriptor
    ->CmdletInfo
    ->List<ActionInfo> actionInfos

(3). ActionScheduler

В основном предоставляет методы управления планированием, связанные с жизненным циклом действия:

  • Настраиваемое выполнение при отправке действия
  • Планирование действий при индивидуальном исполнении
  • Заказное исполнение после Планирования действий
  • Пользовательское выполнение действия перед выполнением распространения
  • Пользовательское выполнение после завершения действия
Язык кода:java
копировать
  /**
   * Called when new action submitted to CmdletManager.
   *
   * @param cmdletInfo info about the cmdlet which the action belongs to
   * @param actionInfo
   * @param actionIndex index of the action in cmdlet,
   * @return acceptable if true, or discard
   * @throws IOException
   */
  boolean onSubmit(CmdletInfo cmdletInfo, ActionInfo actionInfo, int actionIndex)
      throws IOException;

  /**
   * Trying to schedule an action for Dispatch.
   *
   * @param cmdletInfo
   * @param actionInfo
   * @param cmdlet
   * @param action
   * @param actionIndex
   * @return
   */
  ScheduleResult onSchedule(CmdletInfo cmdletInfo, ActionInfo actionInfo,
      LaunchCmdlet cmdlet, LaunchAction action, int actionIndex);

  /**
   * Called after and an Cmdlet get scheduled.
   *
   * @param actionInfo
   * @param result
   */
  void postSchedule(CmdletInfo cmdletInfo, ActionInfo actionInfo, int actionIndex,
      ScheduleResult result);

  /**
   *  Called just before dispatch for execution.
   *
   * @param action
   */
  void onPreDispatch(LaunchCmdlet cmdlet, LaunchAction action, int actionIndex);

  /**
   *  Called when action finished execution.
   *
   * @param actionInfo
   */
  void onActionFinished(CmdletInfo cmdletInfo, ActionInfo actionInfo, int actionIndex);

Smart Agent

Агент выполняет команду, выданную Сервером, Cmdlet: класс потока, вызывает для выполнения SmartAction.run.

Подвести итог

Система управления хранилищем HDFS может оказывать меньшее влияние на внутреннюю платформу данных компании. По сравнению со сложными затратами на создание и обслуживание системы вы можете выбрать более прямое ручное управление и операции по обслуживанию для управления системой хранения. Для коммерческих платформ данных полноценная система управления хранилищем имеет высокую добавленную стоимость. Платформа больших данных может включать в себя полный набор возможностей управления хранилищем, что позволяет клиентам использовать ее «из коробки», сокращая инвестиции клиентов в эксплуатацию и обслуживание.

Система SSM — редкая система управления хранилищем HDFS с открытым исходным кодом.,В основном выполняйте упрощенное планирование задач эксплуатации и обслуживания в потоковом режиме.,В настоящее время проект не обслуживается. Хотя,Общая функция реализации SSM с открытым исходным кодом не идеальна.,И конструкция относительно сложная.,Однако вы можете обратиться к этой дизайнерской идее, чтобы упростить систему управления хранилищем, которая больше подходит для сценариев использования.

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

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

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