Giới thiệu
Apache Iceberg và DuckDB đã khẳng định vị thế của mình trong lĩnh vực kiến trúc dữ liệu. Với sự hỗ trợ của DuckDB 1.4 cho các ghi Iceberg, kết hợp với Apache Polaris và MinIO, bộ công nghệ này mang lại hiệu suất, khả năng mở rộng và tính linh hoạt vượt trội. Bài viết này sẽ hướng dẫn bạn cách thiết lập và sử dụng DuckDB với Iceberg, đồng thời chỉ ra những thực tiễn tốt nhất và mẹo để tối ưu hóa hiệu suất.
Các yêu cầu
Trước khi bắt đầu, bạn cần đảm bảo rằng hệ thống của bạn đáp ứng các yêu cầu sau:
- Java >= 21
- Podman hoặc Docker
- DuckDB >= 1.4
Thiết lập Polaris + MinIO
Bước 1: Clone kho lưu trữ Apache Polaris
Bạn bắt đầu bằng cách clone kho lưu trữ của Apache Polaris:
bash
git clone https://github.com/apache/polaris.git
Bước 2: Xây dựng hình ảnh Docker của Polaris
Chuyển đến thư mục polaris
và xây dựng hình ảnh Docker:
bash
cd polaris
./gradlew :polaris-server:assemble -Dquarkus.container-image.build=true
Bước 3: Khởi động Polaris + MinIO
Sử dụng lệnh sau để khởi động Polaris và MinIO:
bash
podman compose -f getting-started/minio/docker-compose.yml up
# bạn có thể thay thế podman bằng docker
Lệnh này sẽ tạo ra một bucket MinIO: bucket123
và một catalog Polaris: quickstart_catalog
.
Thông tin đăng nhập MinIO:
- Người dùng: minio_root
- Mật khẩu: m1n1opwd
Thông tin đăng nhập Polaris:
- Người dùng: root
- Mật khẩu: s3cr3t
Sử dụng DuckDB với Iceberg
Bước 1: Cài đặt DuckDB
Bạn có thể cài đặt DuckDB bằng lệnh sau:
bash
curl https://install.duckdb.org | sh
Bước 2: Khởi động client DuckDB
Sử dụng một trong các lệnh sau để khởi động client DuckDB:
bash
duckdb
hoặc
bash
duckdb -ui
Bước 3: Cài đặt và tải extension Iceberg
Thực hiện các lệnh sau để cài đặt và tải extension Iceberg:
bash
INSTALL ICEBERG;
LOAD ICEBERG;
Bước 4: Tạo bí mật để kết nối với Apache Polaris
Tạo một bí mật với các thông tin sau:
bash
CREATE SECRET polaris_secret (
TYPE iceberg,
CLIENT_ID 'root',
CLIENT_SECRET 's3cr3t',
ENDPOINT 'http://localhost:8181/api/catalog'
);
Bước 5: Gắn kết Catalog Polaris
Sử dụng lệnh sau để gắn kết catalog Polaris:
bash
ATTACH 'quickstart_catalog' AS polaris_catalog (
TYPE iceberg,
ENDPOINT 'http://localhost:8181/api/catalog'
);
Bước 6: Tạo một Schema mới (namespace trong Polaris)
Tạo một schema mới trong catalog:
bash
create schema polaris_catalog.duckdb;
Bước 7: Tạo một bảng Iceberg mới
Sử dụng lệnh sau để tạo bảng Iceberg:
bash
create table polaris_catalog.duckdb.taxi as
select * from read_parquet(
'https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2025-01.parquet'
);
Bước 8: Truy vấn bảng Iceberg
Để truy vấn dữ liệu từ bảng Iceberg, bạn có thể sử dụng lệnh sau:
bash
select * from polaris_catalog.duckdb.taxi limit 10;
Bước 9: Khám phá các tệp đã tạo trên MinIO
Mở trình duyệt và truy cập http://localhost:9001, nhấp vào bucket bucket123
để khám phá nội dung của thư mục duckdb/taxi
:
- Thư mục data chứa các tệp parquet của Iceberg.
- Thư mục metadata chứa các tệp metadata của Iceberg.
Thực tiễn tốt nhất
Khi làm việc với DuckDB và Iceberg, có một số thực tiễn tốt nhất bạn nên tuân theo:
- Sử dụng các phiên bản mới nhất của DuckDB và Iceberg để tận dụng các tính năng mới.
- Thực hiện thường xuyên việc kiểm tra hiệu suất để đảm bảo rằng các truy vấn của bạn được tối ưu hóa.
- Xem xét việc sử dụng partitioning trong Iceberg để cải thiện tốc độ truy vấn.
Những cạm bẫy phổ biến
Khi bắt đầu với DuckDB và Iceberg, một số cạm bẫy mà bạn có thể gặp phải bao gồm:
- Không cấu hình đúng các thông số kết nối với Polaris.
- Bỏ lỡ việc cài đặt các extension cần thiết cho Iceberg.
Mẹo hiệu suất
Để tối ưu hóa hiệu suất khi sử dụng DuckDB với Iceberg, hãy xem xét:
- Sử dụng batching cho các tác vụ ghi để giảm thiểu chi phí.
- Theo dõi và điều chỉnh các thông số cấu hình của DuckDB cho phù hợp với khối lượng công việc của bạn.
Kết luận
Kết hợp Apache Polaris, MinIO và DuckDB (với hỗ trợ Iceberg) tạo ra một giải pháp mạnh mẽ và mã nguồn mở cho kiến trúc nền tảng dữ liệu. Bộ công nghệ này giúp bạn tránh được việc bị khóa vào nhà cung cấp và đảm bảo hiệu suất cao, cung cấp khả năng mở rộng và hiệu quả cần thiết cho nhu cầu dữ liệu hiện đại.
Câu hỏi thường gặp (FAQ)
1. DuckDB có thể chạy trên nền tảng nào?
DuckDB có thể chạy trên nhiều nền tảng bao gồm Windows, macOS và Linux.
2. Tôi có thể sử dụng Iceberg với các hệ thống khác không?
Có, Iceberg có thể được sử dụng với nhiều hệ thống khác nhau, không chỉ giới hạn ở DuckDB.
3. Làm thế nào để gỡ lỗi khi gặp sự cố kết nối với Polaris?
Kiểm tra lại thông tin đăng nhập và địa chỉ endpoint mà bạn đã cấu hình.