Синергия Apache Kudu с HDFS и Impala для быстрой аналитики Big Data в Hadoop

Big Data, Большие данные, обработка данных, архитектура, Hadoop, HBase, Impala, Data Lake, SQL, NoSQL, Hive

В этой статье продолжим разговор про Apache Kudu и рассмотрим, как эта NoSQL-СУБД используется с Hadoop и Cloudera Impala, чем она полезна в организации озера данных (Data Lake) и почему Куду не заменяет, а успешно дополняет HDFS и HBase для эффективной работы с большими данными (Big Data).

Apache Kudu в Data Lake для быстрой аналитики Big Data

Классическая архитектура Data Lake, ориентированная на пакетную обработку, когда данные обновляются несколько раз в день, не совсем отвечает требованиям современного бизнеса. Многие системы аналитики больших данных с функциями предупреждающих оповещений, обнаружения аномалий и информирования в реальном времени основаны на потоковом режиме работы с Big Data. Более продвинутый подход к построению таких систем на базе лямбда-архитектуры предполагает использование Apache HBase для хранения «быстрых» данных и HDFS в качестве хранилища для исторических «медленных» данных. Напомним, HBase отлично подходит для случайного поиска и быстрых операций вставки, обновления и удаления. А инструменты класса SQL-on-Hadoop, такие как Apache Hive или Cloudera Impala, позволяют работать с данными в HBase и HDFS через SQL-запросы. Тем не менее, на практике часто возникает задача одновременной обработки быстрых и медленных данных в Apache Hadoop. Именно здесь на арену выходит Apache Kudu [1].

Например, для рабочих нагрузок, связанных с изменчивостью и аналитикой в ​​реальном времени, можно использовать Apache Kudu, а для гибкой масштабируемости при низкой стоимости хранения Big DataHDFS. Если данных не слишком много, и они постоянно меняются, например, таблицы измерений для BI-систем, их можно хранить в Kudu. Впрочем, там эе можно размещать и большие таблицы, когда они укладываются в пределы масштабирования Apache Kudu. А если данных слишком много, они ориентированы на пакетную обработку и вряд ли изменятся, целесообразно выбрать HDFS с использованием формата Parquet [2].

 

Интеграция с Impala и Hive

Благодаря тесной интеграции Kudu с Impala, последнюю можно применять для поиска, вставки, обновления и удаления данных с tablet-серверов Kudu через типовой SQL-синтаксис. Также можно подключиться к данным Kudu через драйверы JDBC или ODBC, используя Impala в качестве брокера. Например, создавать новую таблицу Kudu с помощью Impala можно, объявив ее внешней или внутренней, которые отличаются следующим [3]:

  • внутренняя таблица, которая управляется Impala – это наиболее распространенный способ. Его особенностью является полное удаление данных и таблицы Kudu при их удалении из Impala.
  • внешняя таблица, созданная с помощью команды CREATE EXTERNAL TABLE. Impala не управляет внешней таблицей, и ее удаление не приводит к удалению таблицы из исходного местоположения, т.е. хранилища Kudu. Удаляется лишь отображение между Impala и Kudu. Этот режим используется в синтаксисе Kudu для отображения существующей таблицы в Impala.

При этом стоит помнить, что Импала инфраструктурно зависит от Apache Hive – другого популярного SQL-on-Hadoop инструмента, используя его хранилище метаданных (Hive Metastore, HMS). Оно позволяет Impala знать о доступности и структуре баз данных, автоматически сообщая изменения метаданных всем узлам Impala с помощью специализированной службы каталогов. Начиная с версии Kudu 1.10.0 и Impala 3.3.0 доступна автоматическая синхронизация каталога Куду-HMS. Поскольку между таблицами Куду и внешними таблицами может не быть однозначного отображения, автоматически синхронизируются только внутренние таблицы. Поэтому возможны следующие варианты:

  • если интеграция с Hive Metastore не включена, Impala будет создавать записи метаданных в HMS от имени Kudu. При этом таблицы, создаваемые через Kudu API или другие интеграции, такие как Apache Spark и пр., НЕ будут автоматически видны в Impala. Чтобы работать с ними, следует сначала создать внешнюю таблицу через Impala и настроить ее отображение с Kudu. Например, таким образом:

CREATE EXTERNAL TABLE my_mapping_table

STORED AS KUDU

TBLPROPERTIES (

  ‘kudu.table_name’ = ‘my_kudu_table’

);

  • при включенной интеграции с Hive Metastore, Impala следует настроить на использование того же HMS. При этом записи внутренней таблицы будут созданы автоматически в HMS, когда таблицы создаются в Kudu без Impala. Для доступа к ним через Impala следует запустить команду INVALIDATE METADATA, которая позволит Impala собирать самые последние метаданные.

4 преимущества совместного использования Kudu с HDFS через Impala на практическом примере

Пояснив основы взаимодействия Куду с HDFS и Impala, покажем, как совместное использование этих Big Data систем позволяет интегрировать достоинства каждой из них [2]:

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

В рамках этого шаблона можно с помощью Impala создавать таблицы HDFS в формате Kudu и Parquet, которые будут разделены на единицу времени в зависимости от того от частоты использования данных. На практике обычно используются ежедневные, ежемесячные или ежегодные разделы. Создается унифицированное представление, а SQL-выражение WHERE определяет границу между Куду и HDFS, чтобы перемещать данные между ними без использования представлений для дубликатов записей. После перемещения данных можно применить атомарный оператор ALTER VIEW для перемещения границы вперед [2].

Hadoop, озеро данных, SQL-on-Hadoop, Apache Kudu и HDFS, Impala
Совместное использование Apache Kudu c HDFS через Cloudera Impala

Этот шаблон лучше всего работает с последовательными данными, организованными в разделы, обеспечивая скользящее окно времени и эффективное удаление разделов [2]. В следующей статье мы продолжим разговор про Куду и рассмотрим, как эта NoSQL-СУБД используется с Apache Kafka и Spark для построения современных систем аналитики больших данных.

Еще больше подробностей про работу с большими данными с помощью Kudu и других компонентов Apache Hadoop в проектах цифровизации своего бизнеса вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://boristyukin.com/benchmarking-apache-kudu-vs-apache-impala/
  2. https://blog.cloudera.com/transparent-hierarchical-storage-management-with-apache-kudu-and-impala/
  3. https://kudu.apache.org/docs/kudu_impala_integration.html