Cài đặt Trino Server và Worker trên Ubuntu 24.04
Chuẩn bị môi trường và tải bản phát hành
Tải bản Trino stable mới nhất (phiên bản 448 hoặc mới hơn) từ trang chủ chính thức để đảm bảo tính tương thích với Iceberg và Java 21 trên Ubuntu 24.04.
Trước khi tải, hãy đảm bảo đã cài đặt Java 21 (OpenJDK) như đã thực hiện trong Phần 1. Chúng ta sẽ đặt Trino vào thư mục `/opt/trino` để quản lý tập trung.
Tải bản phát hành Trino Server (bao gồm cả Coordinator và Worker logic trong cùng một tarball, nhưng cấu hình tách biệt).
sudo mkdir -p /opt/trino
cd /opt/trino
wget https://repo1.maven.org/maven2/io/trino/trino-dist/448/trino-dist-448.tar.gz
sudo tar -xzf trino-dist-448.tar.gz --strip-components=1
sudo rm trino-dist-448.tar.gz
Kết quả mong đợi: Thư mục `/opt/trino` được tạo với cấu trúc con `etc`, `lib`, `plugin`, `bin`. Các file config mẫu nằm trong `/opt/trino/etc`.
Tạo user và phân quyền thư mục
Tạo user hệ thống `trino` để chạy dịch vụ, đảm bảo bảo mật và không chạy với quyền root. Phân quyền thư mục `/opt/trino` cho user này.
sudo useradd -r -s /bin/false trino
sudo chown -R trino:trino /opt/trino
sudo chmod -R 755 /opt/trino
Kết quả mong đợi: User `trino` được tạo, sở hữu toàn bộ thư mục cài đặt. Các lệnh `ls -la /opt/trino` sẽ hiển thị chủ sở hữu là `trino`.
Cấu hình Trino Coordinator (Master Node)
Trino Coordinator là thành phần nhận request từ client, quản lý session và phân phối query cho các Worker. Chúng ta sẽ cấu hình file `config.properties` để chỉ định nó là Coordinator.
Đường dẫn file: `/opt/trino/etc/config.properties`
cat > /opt/trino/etc/config.properties
Kết quả mong đợi: File config được tạo, Trino sẽ khởi động ở chế độ Coordinator, lắng nghe cổng 8080.
Cấu hình Trino Worker (Compute Node)
Trên môi trường production, Worker thường chạy trên các máy riêng biệt. Ở đây, để đơn giản hóa setup trên một máy, ta tạo cấu hình Worker trong cùng thư mục nhưng với các tham số khác. Trong thực tế, bạn sẽ copy thư mục `etc` sang máy Worker và chỉnh sửa file này.
Đường dẫn file: `/opt/trino/etc/worker-config.properties` (tạo file mới cho worker)
cat > /opt/trino/etc/worker-config.properties
Kết quả mong đợi: File worker config được tạo, Worker sẽ biết kết nối về Coordinator ở cổng 8080.
Cấu hình JVM cho Ubuntu 24.04
Ubuntu 24.04 mặc định dùng Java 21. Cần điều chỉnh heap size trong `jvm.config` để phù hợp với RAM của máy. Không để mặc định vì có thể gây OOM (Out Of Memory) khi xử lý query lớn.
Đường dẫn file: `/opt/trino/etc/jvm.config`
cat > /opt/trino/etc/jvm.config
Kết quả mong đợi: JVM được cấu hình giới hạn RAM 4GB, sử dụng G1GC, và tự động dump heap khi lỗi.
Triển khai và Verify Trino Server
Khởi động Trino Coordinator dưới quyền user `trino`. Sử dụng `systemd` để quản lý dịch vụ giúp dễ dàng khởi động lại khi reboot.
Tạo file systemd unit cho Coordinator:
cat > /etc/systemd/system/trino-coordinator.service
Khởi động và enable dịch vụ:
sudo systemctl daemon-reload
sudo systemctl enable trino-coordinator
sudo systemctl start trino-coordinator
Verify trạng thái và log:
sudo systemctl status trino-coordinator
sudo tail -f /var/trino/data/trino.log
Kết quả mong đợi: Dịch vụ ở trạng thái `active (running)`. Log hiện dòng "Coordinator started" và "Listening on port 8080".
Test kết nối từ browser hoặc curl:
curl -s http://localhost:8080
Kết quả mong đợi: Trả về JSON chứa thông tin node và cluster, xác nhận Coordinator đang chạy.
Cấu hình Trino Connector cho Apache Iceberg
Thêm thư viện Iceberg Connector
Trino cần plugin `iceberg-connector` để đọc dữ liệu từ Iceberg. Phiên bản connector phải tương thích với phiên bản Trino Server đang cài đặt (448).
Tải connector về thư mục plugin của Trino:
cd /opt/trino/plugin
wget https://repo1.maven.org/maven2/io/trino/trino-iceberg/448/trino-iceberg-448.jar
Kết quả mong đợi: File `trino-iceberg-448.jar` xuất hiện trong thư mục `/opt/trino/plugin`.
Cấu hình Catalog cho Iceberg
Tạo file catalog để định nghĩa nơi lưu trữ metadata của Iceberg. Ở đây ta dùng "Hadoop" backend hoặc "Rest" catalog. Để đơn giản cho demo local, ta dùng cấu hình HDFS/S3 local hoặc Filesystem. Tuy nhiên, để chuẩn Lakehouse, ta sẽ cấu hình connector để trỏ vào directory chứa Iceberg tables đã tạo ở Phần 2.
Đường dẫn file: `/opt/trino/etc/catalog/iceberg.properties` (tạo thư mục catalog nếu chưa có)
sudo mkdir -p /opt/trino/etc/catalog
cat > /opt/trino/etc/catalog/iceberg.properties
Lưu ý: Nếu bạn đã tạo Iceberg catalog trong Phần 2 sử dụng Spark với base path `/data/iceberg`, Trino cần trỏ đúng vào đó. Tham số `iceberg.hadoop.fs.defaultFS` chỉ định filesystem root.
Kết quả mong đợi: File catalog được tạo, Trino sẽ load connector này khi khởi động lại.
Khởi động lại Trino để load connector
Trino chỉ load plugin khi khởi động. Cần restart service để connector Iceberg được nhận diện.
sudo systemctl restart trino-coordinator
sudo systemctl status trino-coordinator
Verify connector đã được load:
sudo grep -i "iceberg" /var/trino/data/trino.log | head -n 5
Kết quả mong đợi: Log hiển thị "Loaded catalog 'iceberg'" và không có lỗi liên quan đến connector.
Thiết lập Trino Coordinator để quản lý session và query
Cấu hình Memory và Resource Groups
Để quản lý session tốt, cần cấu hình `memory.config` để tránh một query chiếm hết tài nguyên. Thiết lập giới hạn memory toàn cục và per-query.
Đường dẫn file: `/opt/trino/etc/memory.config`
cat > /opt/trino/etc/memory.config
Kết quả mong đợi: File config được tạo, giúp Trino từ chối các query đòi hỏi memory vượt quá khả năng vật lý của node.
Cấu hình Log và Monitoring
Để debug query và quản lý session, cần cấu hình log level và định dạng log phù hợp.
Đường dẫn file: `/opt/trino/etc/log.properties`
cat > /opt/trino/etc/log.properties
Kết quả mong đợi: Log chỉ ghi lại các thông tin quan trọng, giảm nhiễu và tăng hiệu năng ghi log.
Verify Session Management
Khởi động lại để áp dụng các config memory và log mới.
sudo systemctl restart trino-coordinator
Chờ 10 giây, sau đó kiểm tra lại trạng thái:
curl -s http://localhost:8080 | jq .
Kết quả mong đợi: JSON trả về xác nhận node đang active và sẵn sàng nhận session.
Thực hiện truy vấn cơ bản (SELECT, JOIN) qua Trino CLI
Cài đặt Trino CLI
Sử dụng CLI để tương tác trực tiếp với Trino Server. CLI là công cụ mạnh mẽ để test query nhanh chóng.
cd /opt
wget https://repo1.maven.org/maven2/io/trino/trino-cli/448/trino-cli-448.jar
sudo chmod +x trino-cli-448.jar
Kết quả mong đợi: File `trino-cli-448.jar` có quyền thực thi.
Kết nối Trino CLI với Server
Khởi động CLI và kết nối tới Coordinator. Cần chỉ định catalog `iceberg` đã cấu hình ở phần trên.
java -jar /opt/trino-cli-448.jar --server localhost:8080 --catalog iceberg --schema default
Kết quả mong đợi: Prompt chuyển thành `trino:default>`, xác nhận kết nối thành công.
Truy vấn SELECT cơ bản
Thực hiện lệnh `SHOW TABLES` để xem các bảng Iceberg đã tạo trong Phần 2 (giả sử bạn đã có bảng `sales` hoặc `orders`). Nếu chưa có bảng, cần tạo bảng mẫu từ Spark trước hoặc tạo trực tiếp bằng Trino (tùy thuộc vào metadata đã tồn tại).
Giả sử đã có bảng `sales` trong catalog `iceberg` schema `default`:
SHOW TABLES;
SELECT * FROM sales LIMIT 10;
Kết quả mong đợi: Danh sách bảng hiện ra, sau đó hiển thị 10 dòng đầu của dữ liệu sales từ Iceberg.
Truy vấn JOIN giữa các bảng
Thử nghiệm khả năng join của Trino trên dữ liệu Iceberg. Giả sử có thêm bảng `customers`.
SELECT s.order_id, c.customer_name, s.total_amount
FROM sales s
JOIN customers c ON s.customer_id = c.customer_id
WHERE s.order_date >= '2023-01-01'
LIMIT 20;
Kết quả mong đợi: Trino thực hiện phân tán query, join dữ liệu từ 2 bảng Iceberg và trả về kết quả tổng hợp.
Kết thúc session
Thoát khỏi CLI để giải phóng session.
EXIT;
Kết quả mong đợi: CLI đóng và quay lại shell prompt của Ubuntu.
Điều hướng series:
Mục lục: Series: Xây dựng Data Lakehouse với Apache Iceberg, Trino và Ubuntu 24.04
« Phần 2: Thiết lập Apache Spark và Apache Iceberg trên Ubuntu
Phần 4: Xây dựng quy trình ETL và quản lý schema với Iceberg »