1. Xác định yêu cầu phần cứng tối thiểu cho DuckDB và Iceberg
Trước khi khởi tạo server, bạn cần xác định cấu hình phần cứng tối thiểu để đảm bảo DuckDB hoạt động hiệu quả trong bộ nhớ (in-memory) và Apache Iceberg ghi dữ liệu ra disk mà không gây nghẽn cổ chai.
DuckDB là một OLAP engine chạy trong tiến trình, do đó nó phụ thuộc rất lớn vào RAM để cache dữ liệu. Apache Iceberg lưu trữ metadata và data files trên filesystem (HDFS/S3/NFS), đòi hỏi I/O throughput tốt.
- CPU: Tối thiểu 4 cores (khuyên dùng 8 cores) để xử lý parallel query của DuckDB.
- RAM: Tối thiểu 16GB. DuckDB có thể sử dụng tới 80% RAM cho query cache. Nếu thiếu, hệ thống sẽ swap và hiệu năng giảm drastically.
- Storage: Tối thiểu 100GB NVMe SSD. HDD cơ học sẽ làm chậm đáng kể quá trình write snapshot của Iceberg và compaction.
- Mạng (Network): 1Gbps hoặc cao hơn nếu bạn deploy trên Cloud (AWS/Azure/GCP) để giảm latency khi đọc ghi object storage.
Kiểm tra cấu hình server hiện tại của bạn bằng các lệnh sau để đảm bảo đáp ứng yêu cầu:
lscpu | grep "Model name"
Kết quả mong đợi: Hiển thị tên dòng CPU, ví dụ: "Intel(R) Xeon(R) Platinum 8375C" hoặc "AMD EPYC 7R32".
free -h
Kết quả mong đợi: Dòng "total" của cột "Mem" phải lớn hơn hoặc bằng 16G.
lsblk -o NAME,SIZE,TYPE
Kết quả mong đợi: Hiển thị ổ đĩa có loại (TYPE) là "disk" và dung lượng (SIZE) >= 100G, ưu tiên ổ có tốc độ cao (NVMe thường có tên như nvme0n1).
2. Download và kiểm tra tính toàn vẹn của ISO Ubuntu 24.04 LTS
Chúng ta sẽ tải bản Server Edition của Ubuntu 24.04 LTS (Noble Numbat) từ nguồn chính thức để đảm bảo an toàn và không bị can thiệp phần mềm độc hại.
Việc kiểm tra checksum (SHA256) là bắt buộc trong quy trình DevOps để đảm bảo file ISO không bị lỗi khi tải về (corrupted) hoặc giả mạo.
Bước 1: Truy cập trang download chính thức của Ubuntu Server hoặc sử dụng curl để tải file ISO về máy trạm (local machine) nơi bạn sẽ tạo USB boot.
curl -LO https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso
Kết quả mong đợi: File iso được tải về, kích thước khoảng 1.4GB - 1.6GB.
Bước 2: Tải file checksum chính thức tương ứng để so sánh.
curl -LO https://releases.ubuntu.com/24.04/SHA256SUMS
Kết quả mong đợi: File SHA256SUMS được tải về.
Bước 3: Kiểm tra tính toàn vẹn bằng lệnh sha256sum. Bạn cần lọc dòng chứa tên file iso của bạn từ file SHA256SUMS để so sánh.
sha256sum -c SHA256SUMS 2>&1 | grep "ubuntu-24.04-live-server-amd64.iso"
Kết quả mong đợi: Xuất hiện dòng "ubuntu-24.04-live-server-amd64.iso: OK". Nếu thấy "FAILED", bạn phải tải lại file ISO.
3. Cài đặt Ubuntu 24.04 từ USB với các tùy chọn tối ưu cho Data Engineering
Sau khi đã có file ISO sạch, bạn cần ghi (burn) vào USB bootable và cài đặt lên server vật lý hoặc VM.
Dưới đây là các bước cấu hình quan trọng trong quá trình cài đặt Ubuntu Server để tối ưu cho Data Engineering:
- Boot từ USB: Chạy
sudo dd if=ubuntu-24.04-live-server-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync (thay sdX bằng device name của USB, ví dụ /dev/sdb) trên máy tính host để tạo USB boot.
- Language & Keyboard: Chọn English và US layout (tránh lỗi encoding khi parse log).
- Network Setup: Cấu hình Static IP ngay từ đầu nếu server này là node cố định trong cluster. Ghi rõ IP Address, Subnet Mask, Gateway, và DNS (8.8.8.8).
- Storage Configuration: Chọn "Use entire disk". Quan trọng: Chọn Encryption nếu data nhạy cảm, nhưng đối với môi trường dev/test để tối ưu I/O, hãy chọn Unencrypted và định dạng ext4 (đủ tốt cho Linux block storage).
- SSH Setup: Tích chọn "Install OpenSSH server". Nhập username và password mạnh. Sau đó, dán Public Key SSH của bạn vào phần "Import SSH keys" để không cần gõ password khi remote.
- Additional Packages: Trong màn hình "Add additional software", tick chọn:
- LAMP server: KHÔNG tick (chúng ta dùng DuckDB, không cần Apache/MySQL).
- OpenSSH server: Đã tick ở bước trước.
- Other software: KHÔNG tick.
Tuy nhiên, trong menu "Configure additional repositories" hoặc bước "Select additional software", hãy đảm bảo bạn KHÔNG cài thêm bất kỳ GUI environment nào (như GNOME) để giữ hệ thống nhẹ nhất.
Khi cài đặt xong, hệ thống sẽ yêu cầu reboot. Nhổ USB và đợi server khởi động lại.
Verify kết quả: Sau khi boot, bạn sẽ thấy prompt login. Nhập username và đăng nhập thành công. Nếu thấy màn hình GUI, bạn đã cài sai phiên bản hoặc cấu hình sai.
4. Cập nhật hệ thống và cài đặt các gói công cụ cơ bản
Ngay sau khi đăng nhập, bước đầu tiên là nâng cấp hệ điều hành lên bản mới nhất để vá lỗi bảo mật và cập nhật kernel.
Sau đó, chúng ta cài đặt các công cụ nền tảng (git, curl, wget, build-essential) cần thiết để download source code của DuckDB, Iceberg và các thư viện Python trong các phần sau của series.
Bước 1: Cập nhật danh sách package và nâng cấp toàn bộ hệ thống.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Xuất hiện danh sách các package sẽ được nâng cấp. Bạn cần gõ "Y" và Enter để xác nhận. Quá trình này có thể mất vài phút.
Bước 2: Cài đặt các gói công cụ thiết yếu (Essential Tools).
sudo apt install -y git curl wget build-essential python3 python3-pip python3-venv unzip vim net-tools
Giải thích:
- git: Để clone repository của DuckDB/Iceberg.
- curl/wget: Để tải binary hoặc file dữ liệu.
- build-essential: Bộ công cụ compile (gcc, make) cần thiết nếu bạn build DuckDB từ source.
- python3-pip python3-venv: Quản lý môi trường Python cho Iceberg và ETL pipeline.
- vim: Editor text command line.
- net-tools: Để kiểm tra mạng (ifconfig, netstat).
Kết quả mong đợi: Không có lỗi (Error), dòng cuối cùng hiển thị "Setting up ..." cho từng package.
Bước 3: Kiểm tra phiên bản các công cụ đã cài để đảm bảo hoạt động.
git --version && curl --version | head -n1 && python3 --version
Kết quả mong đợi:
- git version 2.x.x
- curl 8.x.x
- Python 3.12.x (Ubuntu 24.04 mặc định đi kèm Python 3.12)
Bước 4: Cấu hình giới hạn file descriptor (ulimit) để xử lý hàng ngàn file nhỏ trong Data Lake.
Data Lakehouse thường chứa hàng triệu file nhỏ (Parquet, Avro). Mặc định Linux giới hạn số file mở đồng thời là 1024, điều này sẽ gây lỗi "Too many open files" khi DuckDB scan data.
Chỉnh sửa file /etc/security/limits.conf:
sudo bash -c "echo '* soft nofile 65535' >> /etc/security/limits.conf"
sudo bash -c "echo '* hard nofile 65535' >> /etc/security/limits.conf"
Kết quả mong đợi: File được ghi thêm 2 dòng cấu hình. Bạn cần logout và login lại (hoặc reboot) để áp dụng.
Bước 5: Verify giới hạn file mới sau khi login lại.
ulimit -n
Kết quả mong đợi: Trả về số 65535. Nếu vẫn là 1024, bạn chưa reboot hoặc chưa đăng nhập lại.
Bước 6: Tạo thư mục làm việc chuẩn cho Data Engineering.
mkdir -p ~/projects/duckdb-iceberg-lakehouse
cd ~/projects/duckdb-iceberg-lakehouse
Kết quả mong đợi: Prompt terminal đổi sang đường dẫn thư mục mới.
Điều hướng series:
Mục lục: Series: Xây dựng Data Lakehouse Serverless với DuckDB, Apache Iceberg và Ubuntu 24.04
Phần 2: Triển khai DuckDB và thiết lập cơ sở dữ liệu quan hệ trong-memory »