Интеграция с Apache Gravitino
Стремительное развитие технологий озёр данных сделало построение единой, безопасной и эффективной архитектуры lakehouse одной из ключевых задач цифровой трансформации предприятий. Apache Gravitino, платформа унифицированного управления метаданными нового поколения, предлагает комплексное решение для управления данными в мультиоблачных средах с несколькими вычислительными движками. Она поддерживает централизованное управление различными источниками данных и вычислительными движками, а также обеспечивает безопасность и контролируемость доступа к данным с помощью механизмов выдачи учётных данных.
В этой статье подробно рассматривается интеграция Apache Doris с Apache Gravitino для построения современной архитектуры lakehouse на основе Iceberg REST Catalog. Унифицированное управление метаданными и динамическая выдача учётных данных в Gravitino позволяют эффективно и безопасно обращаться к данным Iceberg в S3.
Из этого документа вы узнаете:
-
Подготовка среды AWS: как создать бакеты S3 и роли IAM в AWS, настроить безопасную систему управления учётными данными для Gravitino и организовать динамическую выдачу временных учётных данных.
-
Развёртывание и настройка Gravitino: как быстро развернуть службы Gravitino, настроить Iceberg REST Catalog и включить функцию vended-credentials.
-
Подключение Doris к Gravitino: подробное объяснение того, как Doris получает доступ к данным Iceberg через REST API Gravitino.
Практическое руководство
1. Подготовка среды AWS
Прежде чем начать, необходимо подготовить в AWS всю необходимую инфраструктуру, включая бакеты S3 и тщательно спроектированную систему ролей IAM. Это основа безопасной и надёжной архитектуры lakehouse.
1.1 Создание бакета S3
Сначала создайте отдельный бакет S3 для хранения данных Iceberg:
# Create S3 bucket
aws s3 mb s3://gravitino-iceberg-demo --region us-west-2
# Verify bucket creation success
aws s3 ls | grep gravitino-iceberg-demo
1.2 Проектирование архитектуры ролей IAM
Для безопасного управления учётными данными необходимо создать роль IAM, которую Gravitino будет использовать через механизм STS AssumeRole. Такая схема соответствует рекомендациям по безопасности: принципу минимальных привилегий и разделению обязанностей.
Создание роли для доступа к данным
-
Создание файла политики доверия
Создайте файл
gravitino-trust-policy.json:{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::YOUR_ACCOUNT_ID:root"
]
},
"Action": "sts:AssumeRole"
}
]
} -
Создание роли IAM
Чтобы упростить пример, мы будем использовать готовые политики, управляемые AWS. В производственной среде следует настраивать права доступа более детально.
# Create IAM role
aws iam create-role \
--role-name gravitino-iceberg-access \
--assume-role-policy-document file://gravitino-trust-policy.json \
--description "Gravitino Iceberg data access role"
# Attach S3 full access permissions (for testing, use fine-grained permissions in production)
aws iam attach-role-policy \
--role-name gravitino-iceberg-access \
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess -
Проверка конфигурации IAM
Убедитесь, что роль настроена правильно:
# Test role assumption functionality
aws sts assume-role \
--role-arn arn:aws:iam::YOUR_ACCOUNT_ID:role/gravitino-iceberg-access \
--role-session-name gravitino-testПример успешного ответа:
{
"Credentials": {
"AccessKeyId": "ASIA***************",
"SecretAccessKey": "***************************",
"SessionToken": "IQoJb3JpZ2luX2VjEOj...",
"Expiration": "2025-07-23T08:33:30+00:00"
}
}
2. Развёртывание и настройка Gravitino
2.1 Скачивание и установка Gravitino
Для быстрой подготовки среды воспользуемся готовой сборкой Gravitino:
# Create working directory
mkdir gravitino-deployment && cd gravitino-deployment
# Download Gravitino main program
wget https://github.com/apache/gravitino/releases/download/v0.9.1/gravitino-0.9.1-bin.tar.gz
# Download Iceberg REST server component
wget https://github.com/apache/gravitino/releases/download/v0.9.1/gravitino-iceberg-rest-server-0.9.1-bin.tar.gz
# Extract and install
tar -xzf gravitino-0.9.1-bin.tar.gz
cd gravitino-0.9.1-bin
tar -xzf ../gravitino-iceberg-rest-server-0.9.1-bin.tar.gz --strip-components=1
2.2 Установка необходимых зависимостей
Для поддержки AWS S3 и управления учётными данными необходимо установить дополнительные JAR-пакеты:
# Create necessary directory structure
mkdir -p catalogs/lakehouse-iceberg/libs
mkdir -p iceberg-rest-server/libs
mkdir -p logs
mkdir -p /tmp/gravitino
# Download Iceberg AWS bundle
wget https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-aws-bundle/1.6.1/iceberg-aws-bundle-1.6.1.jar \
-P catalogs/lakehouse-iceberg/libs/
# Download Gravitino AWS support package (core for vended-credentials functionality)
wget https://repo1.maven.org/maven2/org/apache/gravitino/gravitino-aws/0.9.1/gravitino-aws-0.9.1.jar \
-P iceberg-rest-server/libs/
# Distribute JAR packages to various directories
cp catalogs/lakehouse-iceberg/libs/iceberg-aws-bundle-1.6.1.jar iceberg-rest-server/libs/
cp catalogs/lakehouse-iceberg/libs/iceberg-aws-bundle-1.6.1.jar libs/
cp iceberg-rest-server/libs/gravitino-aws-0.9.1.jar libs/
2.3 Настройка службы Gravitino
-
Настройка основной службы
Создайте или отредактируйте файл
conf/gravitino.conf:# Gravitino server basic configuration
gravitino.server.webserver.host = 0.0.0.0
gravitino.server.webserver.httpPort = 8090
# Metadata store configuration (PostgreSQL/MySQL recommended for production)
gravitino.entity.store = relational
gravitino.entity.store.relational = JDBCBackend
gravitino.entity.store.relational.jdbcUrl = jdbc:h2:file:/tmp/gravitino/gravitino.db;DB_CLOSE_DELAY=-1;MODE=MYSQL
gravitino.entity.store.relational.jdbcDriver = org.h2.Driver
gravitino.entity.store.relational.jdbcUser = gravitino
gravitino.entity.store.relational.jdbcPassword = gravitino
# Enable Iceberg REST service
gravitino.auxService.names = iceberg-rest
# Iceberg REST service detailed configuration
gravitino.iceberg-rest.classpath = iceberg-rest-server/libs, iceberg-rest-server/conf
gravitino.iceberg-rest.host = 0.0.0.0
gravitino.iceberg-rest.httpPort = 9001
# Iceberg catalog backend configuration
gravitino.iceberg-rest.catalog-backend = jdbc
gravitino.iceberg-rest.uri = jdbc:h2:file:/tmp/gravitino/catalog_iceberg.db;DB_CLOSE_DELAY=-1;MODE=MYSQL
gravitino.iceberg-rest.jdbc-driver = org.h2.Driver
gravitino.iceberg-rest.jdbc-user = iceberg
gravitino.iceberg-rest.jdbc-password = iceberg123
gravitino.iceberg-rest.jdbc-initialize = true
gravitino.iceberg-rest.warehouse = s3://gravitino-iceberg-demo/warehouse
gravitino.iceberg-rest.io-impl = org.apache.iceberg.aws.s3.S3FileIO
gravitino.iceberg-rest.s3-region = us-west-2
# Enable Vended-Credentials functionality
# Note: Gravitino uses these AK/SK to call STS AssumeRole and obtain temporary credentials for distribution to clients
gravitino.iceberg-rest.credential-providers = s3-token
gravitino.iceberg-rest.s3-access-key-id = YOUR_AWS_ACCESS_KEY_ID
gravitino.iceberg-rest.s3-secret-access-key = YOUR_AWS_SECRET_ACCESS_KEY
gravitino.iceberg-rest.s3-role-arn = arn:aws:iam::YOUR_ACCOUNT_ID:role/gravitino-iceberg-access
gravitino.iceberg-rest.s3-region = us-west-2
gravitino.iceberg-rest.s3-token-expire-in-secs = 3600 -
Запуск службы
# Start Gravitino service
./bin/gravitino.sh start
# Check service status
./bin/gravitino.sh status
# View logs
tail -f logs/gravitino-server.log -
Проверка состояния службы
# Verify main service
curl -v http://localhost:8090/api/version
# Verify Iceberg REST service
curl -v http://localhost:9001/iceberg/v1/config
2.4 Создание структуры метаданных Gravitino
Создайте необходимые структуры метаданных через REST API:
# Create MetaLake
curl -X POST -H "Accept: application/vnd.gravitino.v1+json" \
-H "Content-Type: application/json" \
-d '{
"name": "lakehouse",
"comment": "Gravitino lakehouse for Doris integration",
"properties": {}
}' http://localhost:8090/api/metalakes
# Create Iceberg Catalog
curl -X POST -H "Accept: application/vnd.gravitino.v1+json" \
-H "Content-Type: application/json" \
-d '{
"name": "iceberg_catalog",
"type": "RELATIONAL",
"provider": "lakehouse-iceberg",
"comment": "Iceberg catalog with S3 storage and vended credentials",
"properties": {
"catalog-backend": "jdbc",
"uri": "jdbc:h2:file:/tmp/gravitino/catalog_iceberg.db;DB_CLOSE_DELAY=-1;MODE=MYSQL",
"jdbc-user": "iceberg",
"jdbc-password": "iceberg123",
"jdbc-driver": "org.h2.Driver",
"jdbc-initialize": "true",
"warehouse": "s3://gravitino-iceberg-demo/warehouse",
"io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
"s3-region": "us-west-2"
}
}' http://localhost:8090/api/metalakes/lakehouse/catalogs
3. Подключение Doris к Gravitino
3.1 Использование выдаваемых учётных данных
Gravitino будет динамически создавать временные учётные данные и передавать их Doris:
-- Create dynamic credential mode Catalog
CREATE CATALOG gravitino_vending PROPERTIES (
'type' = 'iceberg',
'warehouse' = 'warehouse',
'iceberg.catalog.type' = 'rest',
'iceberg.rest.uri' = 'http://127.0.0.1:9001/iceberg/',
'iceberg.rest.vended-credentials-enabled' = 'true'
);
3.2 Проверка подключения и операций с данными
-- Verify connection
SHOW DATABASES FROM gravitino_vending;
-- Switch to vended credentials catalog
SWITCH gravitino_vending;
-- Create database and table
CREATE DATABASE demo;
USE gravitino_vending.demo;
CREATE TABLE gravitino_table (
id INT,
name STRING
)
PROPERTIES (
'write-format' = 'parquet'
);
-- Insert test data
INSERT INTO gravitino_table VALUES (1, 'Doris'), (2, 'Gravitino');
-- Query verification
SELECT * FROM gravitino_table;
Итоги
Следуя этому руководству, вы сможете построить современную архитектуру lakehouse на основе Gravitino и Doris. Такая архитектура обеспечивает высокую производительность и доступность, а передовые механизмы безопасности позволяют защитить доступ к данным и соблюдать нормативные требования. По мере роста объёмов данных и изменения бизнес-требований её можно гибко масштабировать для решения различных задач корпоративного уровня.