Apache Kudu

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:48, 2 октября 2020.
Apache Kudu
Apache Kudu Logo.png
Разработчики: Apache Kudu Committers and PMC Members
Постоянный выпуск: 1.11.1
Написана на: C++ (язык программирования)
Операционная система: Linux, macOS
Тип ПО: DBMS (Database Management System)
Лицензия: Apache License
Веб-сайт kudu.apache.org

Apache Kudu — бесплатное и OSS (Open-Source Software) ориентированное на столбцы хранилище экосистемы Apache Hadoop. Он совместим с большинством сред обработки данных в среде Hadoop. Он обеспечивает полноту уровня хранения Hadoop для быстрой аналитики быстрых данных. [Источник 1] Проект с открытым исходным кодом для сборки Apache Kudu начался как внутренний проект в Cloudera. [Источник 2] Первая версия Apache Kudu 1.0 была выпущена 19 сентября 2016 года.

Описание

Основное назначение Apache Kudu состоит в заполнении аналитического разрыва между 2-мя движками хранения данных Apache Hadoop: HDFS и HBase. HDFS эффективно и надежно хранит большие данные различных форматов с высокой степенью сжатия. Однако данные в HDFS невозможно изменить, а также быстро проанализировать в реальном времени. И, наоборот, колоночная NoSQL-СУБД Apache HBase, которая работает поверх HDFS, позволяет быстро искать данные в режиме real-time, но долго сканирует записанные объемы информации. Apache Kudu ориентирован на устранение этого разрыва в экосистеме Hadoop, позволяя оперативно сканировать, читать, искать, записывать, изменять и удалять быстро меняющиеся данные.

Apache 1.png
Рисунок 1 - Как Apache Kudu заполняет «аналитический разрыв» между HDFS и HBase

Kudu разделяет общие технические свойства экосистемных приложений Hadoop: он работает на стандартном оборудовании, горизонтально масштабируется и поддерживает работу с высокой степенью доступности. Дизайн Kudu выделяет его. Некоторые из преимуществ Kudu включают в себя:

  • Быстрая обработка рабочих нагрузок OLAP.
  • Интеграция с MapReduce, Spark и другими компонентами экосистемы Hadoop.
  • Тесная интеграция с Apache Impala, что делает его хорошей изменчивой альтернативой использованию HDFS с Apache Parquet.
  • Сильная, но гибкая модель согласованности, позволяющая выбирать требования согласованности для каждого запроса, в том числе возможность строго последовательной согласованности.
  • Высокая производительность для одновременного выполнения последовательных и случайных рабочих нагрузок.
  • Прост в администрировании и управлении.
  • Высокая доступность. Планшетные серверы и мастера используют согласованный алгоритм Raft, который обеспечивает доступность для чтения и записи, если доступно более половины общего числа реплик. Например, если доступны 2 из 3 реплик или 3 из 5 реплик, планшет доступен.
  • Операции чтения могут обслуживаться только читающими планшетами, даже в случае отказа ведущего планшета.
  • Модель структурированных данных.

Объединив все эти свойства, Kudu нацелена на поддержку семейств приложений, которые сложно или невозможно реализовать в технологиях хранения Hadoop текущего поколения. Вот несколько примеров приложений, для которых Kudu - отличное решение:

  • Отчеты о приложениях, в которых поступающие данные должны быть немедленно доступны для конечных пользователей
  • Приложения временного ряда, которые должны одновременно поддерживать:
  1. запросы к большим объемам исторических данных
  2. подробные запросы об отдельной сущности, которые должны возвращаться очень быстро
  • Приложения, использующие прогнозные модели для принятия решений в режиме реального времени с периодическим обновлением прогнозной модели на основе всех исторических данных

Особенности интеграции Kudu-Impala

CREATE / ALTER / DROP TABLE

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

INSERT

Данные могут быть вставлены в таблицы Kudu в Impala, используя тот же синтаксис, что и любая другая таблица Impala, такие же, как таблицы, использующие HDFS или HBase для сохранения.

UPDATE / DELETE

Impala поддерживает команды SQL UPDATE и DELETE для изменения существующих данных в таблице Kudu построчно или в виде пакета. Синтаксис команд SQL выбран так, чтобы быть максимально совместимым с существующими стандартами. В дополнение к простым командам DELETE или UPDATE, вы можете указать сложные объединения с предложением FROM в подзапросе.

Гибкое разбиение

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

Параллельное сканирование

Для достижения максимально возможной производительности на современном оборудовании клиент Kudu, используемый Impala, распараллеливает сканирование на нескольких планшетах.

Высокоэффективные запросы

Там, где это возможно, Impala передает оценку предикатов в Kudu, чтобы предикаты оценивались как можно ближе к данным. Производительность запросов сопоставима с Parquet во многих рабочих нагрузках.

Архитектура

На следующей диаграмме показан кластер Kudu с тремя мастерами и несколькими планшетными серверами, каждый из которых обслуживает несколько планшетов. Это иллюстрирует, как консенсус Raft используется, чтобы учесть как лидеров, так и последователей как для мастеров, так и для планшетов. Кроме того, планшетный сервер может быть лидером для некоторых планшетов и последователем для других. Лидеры показаны желтым цветом, а подписчики - синим.

Kudu-architecture-2.png
Рисунок 2 – Архитектура (2006 г.)

Сверхбыстрое хранение столбцов Как и большинство современных хранилищ аналитических данных, Kudu организует свои данные по столбцам, а не по строкам. Хранение столбцов позволяет эффективно кодировать и сжимать. Например, строковое поле с несколькими уникальными значениями может использовать только несколько битов на строку хранения. Благодаря таким методам, как кодирование по длине прогона, дифференциальное кодирование и векторизованная битовая упаковка, Kudu быстро считывает данные и экономит место при их хранении.

Хранение в столбцах также значительно сокращает объем ввода-вывода данных, необходимый для обслуживания аналитических запросов. Используя такие методы, как ленивая материализация данных и предикатное нажатие, Kudu может выполнять задачу найти иголку в стоге сена по миллиардам строк и терабайт данных в считанные секунды.


Модель данных

Кластер Kudu хранит таблицы, которые выглядят так же, как таблицы, к которым вы привыкли, из реляционных (SQL) баз данных. Таблица может быть такой же простой, как двоичный ключ и значение, или такой сложной, как несколько сотен различных строго типизированных атрибутов.

Как и в SQL, каждая таблица имеет ПЕРВИЧНЫЙ КЛЮЧ, состоящий из одного или нескольких столбцов. Это может быть отдельный столбец, например уникальный идентификатор пользователя, или составной ключ, например кортеж (хост, метрика, отметка времени) для базы данных машинных временных рядов. Строки можно эффективно читать, обновлять или удалять по их первичному ключу.

Простая модель данных Kudu позволяет легко переносить устаревшие приложения или создавать новые: не нужно беспокоиться о том, как кодировать ваши данные в двоичные капли или разбираться в огромной базе данных, полной трудно интерпретируемых JSON. Таблицы имеют самоописание, поэтому вы можете использовать стандартные инструменты, такие как механизмы SQL или Spark, для анализа данных.


Произвольный доступ с малой задержкой

В отличие от других хранилищ для анализа больших данных, Kudu - это не просто формат файла. Это система хранения в реальном времени, которая поддерживает доступ к отдельным строкам с малой задержкой в ​​миллисекундах. Для доступа в стиле «NoSQL» вы можете выбирать между API Java, C ++ или Python. И, конечно же, эти API с произвольным доступом можно использовать в сочетании с пакетным доступом для машинного обучения или аналитики.

API Kudu просты в использовании. Модель данных полностью типизирована, поэтому вам не нужно беспокоиться о двоичных кодировках или экзотической сериализации. Вы можете просто хранить примитивные типы, например, когда вы используете JDBC или ODBC.

Kudu не предназначен для использования в качестве OLTP-системы, но если у вас есть некоторый набор данных, который умещается в памяти, он предлагает конкурентоспособную производительность произвольного доступа. Мы измерили задержку 99-го процентиля, равную 6 мс или меньше, с использованием YCSB с равномерной рабочей нагрузкой произвольного доступа для более миллиарда строк. Возможность запускать онлайн-рабочие нагрузки с малой задержкой в ​​том же хранилище, что и серверная аналитика данных, может значительно упростить архитектуру приложения.


Интеграция с экосистемой Apache Hadoop

Kudu был разработан для интеграции с экосистемой Hadoop, и интегрировать его с другими структурами обработки данных очень просто. Вы можете передавать данные из источников данных в реальном времени с помощью клиента Java, а затем обрабатывать их сразу по прибытии с помощью Spark, Impala или MapReduce. Вы даже можете прозрачно объединить таблицы Kudu с данными, хранящимися в другом хранилище Hadoop, таком как HDFS или HBase.

Kudu - хороший гражданин кластера Hadoop: он может легко обмениваться дисками данных с HDFS DataNodes и может работать с объемом оперативной памяти всего 1 ГБ для легких рабочих нагрузок.

Применение

Благодаря возможности оперативно обрабатывать быстро меняющиеся данные, Kudu отлично подходит для различных приложений.

  1. Потоковый ввод данных в реальном времени, например, при генерации отчетов, когда поступающая информация должна быть немедленно доступна для конечных пользователей
  2. Формирование OLAP-кубов в проектах аналитики больших данных
  3. Анализ временных рядов с различными моделями доступа к данным, например, для исследования производительности метрик с течением времени или прогнозирования будущего поведения на основе исторических данных. Kudu позволяет обрабатывать разные вставки и изменения данных индивидуально и в совокупности, с немедленным представлением пользователям. А колоночный принцип хранения данных позволяет считывать информацию из отдельных столбцов, а не всю строку, что еще более повышает скорость работы
  4. Системы принятия решений в реальном времени с периодическим обновлением прогнозной модели на основе всех исторических данных
  5. Интеграция приложений и поддержка устаревших систем, когда, например, часть данных хранится в реляционных СУБД, а часть – в HDFS. Благодаря тесной интеграции с компонентами Apache Hadoop и Cloudera Impala, Куду позволяет получить доступ и запросить все эти источники и форматы, не изменяя системы-источники

Из наиболее интересных примеров практического использования Apache Kudu стоит отметить кейс китайской компании Xiaomi [Источник 3], которая построила на базе этой NoSQL-СУБД собственную BI-платформу для аналитики больших данных и генерации отчетности в реальном времени, сократив цикл аналитической обработки Big Data в тысячи раз.

Процесс установки

Источники

  1. Apache Kudu URL:https://kudu.apache.org/ (дата обращения: 26.06.2020)
  2. Почему Kudu был разработан внутри Cloudera до его выпуска URL:https://kudu.apache.org/faq.html#project-status (дата обращения: 26.06.2020)
  3. Xiaomi URL:https://www.mi.com/global/ (дата обращения 23.09.2020)