Перейти к основному содержимому

[Экспериментальный] Kudu catalog

Selena поддерживает Kudu catalogs начиная с версии 1.5.0.

Kudu catalog — это тип external catalog, который позволяет запрашивать данные из Apache Kudu без предварительной загрузки.

Также вы можете напрямую преобразовывать и загружать данные из Kudu, используя INSERT INTO на основе Kudu catalogs.

Чтобы обеспечить успешное выполнение SQL-запросов в вашем Kudu кластере, ваш Selena кластер должен интегрироваться со следующими важными компонентами:

  • Metastore, такой как ваша файловая система kudu или Hive metastore

Примечания по использованию

Вы можете использовать Kudu catalogs только для запроса данных. Вы не можете использовать Kudu catalogs для удаления или вставки данных в ваш Kudu кластер.

Подготовка к интеграции

Перед созданием Kudu catalog убедитесь, что ваш Selena кластер может интегрироваться с системой хранения и metastore вашего Kudu кластера.

ПРИМЕЧАНИЕ

Если при отправке запроса возвращается ошибка о неизвестном хосте, вы должны добавить соответствие между именами хостов и IP-адресами узлов вашего KUDU кластера в путь /etc/hosts.

Аутентификация Kerberos

Если для вашего KUDU кластера или Hive metastore включена аутентификация Kerberos, настройте ваш Selena кластер следующим образом:

  • Выполните команду kinit -kt keytab_path principal на каждом FE и каждом BE для получения Ticket Granting Ticket (TGT) от Key Distribution Center (KDC). Для выполнения этой команды у вас должны быть разрешения на доступ к вашему KUDU кластеру и Hive metastore. Обратите внимание, что доступ к KDC с помощью этой команды ограничен по времени. Поэтому вам нужно использовать cron для периодического выполнения этой команды.
  • Добавьте JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf" в файл $FE_HOME/conf/fe.conf каждого FE и в файл $BE_HOME/conf/be.conf каждого BE. В этом примере /etc/krb5.conf — это путь сохранения файла krb5.conf. Вы можете изменить путь в соответствии с вашими потребностями.

Создание Kudu catalog

Синтаксис

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "kudu",
CatalogParams
)

Параметры

catalog_name

Имя Kudu catalog. Соглашения об именовании следующие:

  • Имя может содержать буквы, цифры (0-9) и символы подчеркивания (_). Оно должно начинаться с буквы.
  • Имя чувствительно к регистру и не может превышать 1023 символа в длину.

comment

Описание Kudu catalog. Этот параметр необязательный.

type

Тип вашего источника данных. Установите значение kudu.

CatalogParams

Набор параметров о том, как Selena получает доступ к метаданным вашего Kudu кластера.

В следующей таблице описаны параметры, которые вам нужно настроить в CatalogParams.

ПараметрОбязательныйОписание
kudu.catalog.typeДаТип metastore, который вы используете для вашего Kudu кластера. Установите этот параметр в kudu или hive.
kudu.masterНетУказывает адрес Kudu Master, который по умолчанию равен localhost:7051.
hive.metastore.urisНетURI вашего Hive metastore. Формат: thrift://<metastore_IP_address>:<metastore_port>. Если для вашего Hive metastore включена высокая доступность (HA), вы можете указать несколько URI metastore и разделить их запятыми (,), например, "thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>".
kudu.schema-emulation.enabledНетопция для включения или отключения эмуляции schema. По умолчанию она отключена (false), что означает, что все таблицы принадлежат schema по умолчанию.
kudu.schema-emulation.prefixНетПрефикс для эмуляции schema должен устанавливаться только когда kudu.schema-emulation.enabled = true. Префикс по умолчанию — пустая строка: .

ПРИМЕЧАНИЕ

Если вы используете Hive metastore, вы должны добавить соответствие между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts перед запросом данных Kudu. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.

Примеры

  • Следующие примеры создают Kudu catalog с именем kudu_catalog, тип metastore которого kudu.catalog.type установлен в kudu для запроса данных из вашего Kudu кластера.

    CREATE EXTERNAL CATALOG kudu_catalog
    PROPERTIES
    (
    "type" = "kudu",
    "kudu.master" = "localhost:7051",
    "kudu.catalog.type" = "kudu",
    "kudu.schema-emulation.enabled" = "true",
    "kudu.schema-emulation.prefix" = "impala::"
    );
  • Следующие примеры создают Kudu catalog с именем kudu_catalog, тип metastore которого kudu.catalog.type установлен в hive для запроса данных из вашего Kudu кластера.

    CREATE EXTERNAL CATALOG kudu_catalog
    PROPERTIES
    (
    "type" = "kudu",
    "kudu.master" = "localhost:7051",
    "kudu.catalog.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "kudu.schema-emulation.enabled" = "true",
    "kudu.schema-emulation.prefix" = "impala::"
    );

Просмотр Kudu catalogs

Вы можете использовать SHOW CATALOGS для запроса всех catalogs в текущем Selena кластере:

SHOW CATALOGS;

Вы также можете использовать SHOW CREATE CATALOG для запроса оператора создания external catalog. Следующий пример запрашивает оператор создания Kudu catalog с именем kudu_catalog:

SHOW CREATE CATALOG kudu_catalog;

Удаление Kudu catalog

Вы можете использовать DROP CATALOG для удаления external catalog.

Следующий пример удаляет Kudu catalog с именем kudu_catalog:

DROP Catalog kudu_catalog;

Просмотр схемы таблицы Kudu

Вы можете использовать один из следующих синтаксисов для просмотра схемы таблицы Kudu:

  • Просмотр схемы

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
  • Просмотр схемы и расположения из оператора CREATE

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;

Запрос таблицы Kudu

  1. Используйте SHOW DATABASES для просмотра баз данных в вашем Kudu кластере:

    SHOW DATABASES FROM <catalog_name>;
  2. Используйте SET CATALOG для переключения на целевой catalog в текущей сессии:

    SET CATALOG <catalog_name>;

    Затем используйте USE для указания активной базы данных в текущей сессии:

    USE <db_name>;

    Или вы можете использовать USE для прямого указания активной базы данных в целевом catalog:

    USE <catalog_name>.<db_name>;
  3. Используйте SELECT для запроса целевой таблицы в указанной базе данных:

    SELECT count(*) FROM <table_name> LIMIT 10;

Загрузка данных из Kudu

Предположим, у вас есть OLAP таблица с именем olap_tbl, вы можете преобразовывать и загружать данные следующим образом:

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM kudu_table;