Cấu hình phần cứng tối thiểu cho Data Lakehouse
Yêu cầu về CPU và RAM
Để chạy ổn định Apache Spark, Apache Iceberg và Trino, bạn cần đảm bảo server có tối thiểu 4 vCPU và 16GB RAM. Đây là con số tối thiểu cho môi trường phát triển (Dev/Staging).
Đối với môi trường Production, khuyến nghị tối thiểu 8 vCPU và 32GB RAM để xử lý các job ETL phức tạp và truy vấn đồng thời.
Việc phân bổ RAM quan trọng hơn CPU trong các tác vụ xử lý dữ liệu lớn (Big Data) vì Spark và Trino cần bộ nhớ để caching và shuffle data.
Yêu cầu về Storage
Dung lượng ổ cứng tối thiểu 50GB SSD cho hệ điều hành và các công cụ. Tuy nhiên, Data Lakehouse lưu trữ dữ liệu thô và các snapshot của Iceberg, nên bạn cần thêm ít nhất 100GB SSD NVMe cho dữ liệu.
Đảm bảo IOPS (Input/Output Operations Per Second) cao. Iceberg thực hiện nhiều thao tác đọc/ghi ngẫu nhiên, do đó HDD cơ học sẽ gây nghẽn cổ chai (bottleneck) nghiêm trọng.
Verify cấu hình
Chạy lệnh kiểm tra tài nguyên hiện có trên server của bạn:
lscpu | grep "Model name" && free -h && lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
Kết quả mong đợi: Xuất hiện tên CPU, tổng RAM (ít nhất 16G), và các phân vùng ổ cứng với kích thước đủ lớn (SSD/NVMe).
Tải và cài đặt Ubuntu 24.04 LTS
Khởi động và nâng cấp hệ thống
Giả sử bạn đã cài đặt Ubuntu 24.04 qua ISO hoặc Cloud Image. Bước đầu tiên là cập nhật gói phần mềm và nâng cấp hệ thống lên phiên bản mới nhất để đảm bảo tính tương thích.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Không có lỗi, tất cả gói phần mềm đã được cập nhật lên phiên bản mới nhất.
Tắt Swap (Tùy chọn nhưng khuyến nghị)
Apache Spark hoạt động tốt nhất khi không sử dụng Swap vì việc swap ra đĩa sẽ làm giảm hiệu năng xuống mức thảm hại. Chúng ta cần tắt Swap tạm thời hoặc vĩnh viễn.
Tắt Swap ngay lập tức:
sudo swapoff -a
Kết quả mong đợi: Lệnh `free -h` sẽ hiển thị 0B ở cột Swap.
Xóa dòng cấu hình Swap trong file `/etc/fstab` để ngăn nó bật lại sau khi restart:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Kết quả mong đợi: File `/etc/fstab` đã được chỉnh sửa, dòng chứa từ "swap" bị comment (#).
Verify cài đặt hệ điều hành
Kiểm tra phiên bản Ubuntu và kernel đang chạy:
cat /etc/os-release && uname -r
Kết quả mong đợi: Hiển thị "Ubuntu 24.04 LTS" và phiên bản kernel mới nhất.
Cấu hình Network, Firewall và SSH Key
Cấu hình SSH Key cho truy cập an toàn
Để bảo mật server, tắt đăng nhập bằng password và chỉ cho phép SSH Key. Tạo cặp key mới nếu chưa có:
ssh-keygen -t ed25519 -C "your_email@example.com"
Kết quả mong đợi: Tạo ra file `id_ed25519` (private) và `id_ed25519.pub` (public) trong thư mục `.ssh`.
Chuyển public key sang server (nếu đang chạy trên cloud console) hoặc copy thủ công vào file `authorized_keys`:
mkdir -p ~/.ssh && cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh
Kết quả mong đợi: File `authorized_keys` chứa public key của bạn với quyền đọc ghi đúng chuẩn.
Cấu hình SSH Server (sshd_config)
Chỉnh sửa file cấu hình SSH để tắt đăng nhập bằng password và yêu cầu Public Key:
sudo nano /etc/ssh/sshd_config
Sửa các dòng sau (hoặc thêm nếu chưa có):
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
ChallengeResponseAuthentication no
Kết quả mong đợi: File đã được lưu, server chỉ chấp nhận kết nối qua SSH Key.
Khởi động lại dịch vụ SSH để áp dụng thay đổi:
sudo systemctl restart sshd
Kết quả mong đợi: Dịch vụ sshd chạy lại thành công, không báo lỗi.
Cấu hình Firewall (UFW)
Ubuntu 24.04 sử dụng UFW (Uncomplicated Firewall) mặc định. Chúng ta cần mở cổng SSH (22), HTTP (80) và các cổng dịch vụ Data Lakehouse (ví dụ: Trino 8082, Spark Master 7077).
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 8082/tcp
sudo ufw allow 7077/tcp
sudo ufw enable
Kết quả mong đợi: Firewall bật lên, chỉ cho phép các cổng đã liệt kê, chặn mọi kết nối khác.
Verify bảo mật
Kiểm tra trạng thái firewall và thử kết nối SSH từ máy khác:
sudo ufw status verbose
Kết quả mong đợi: Hiển thị "Status: active" và danh sách các cổng cho phép (22, 80, 8082, 7077).
Cài đặt các công cụ hỗ trợ cần thiết
Cài đặt Java (OpenJDK 21)
Apache Spark và Trino yêu cầu JDK 11 hoặc cao hơn. Ubuntu 24.04 hỗ trợ tốt JDK 21 (LTS). Chúng ta sẽ cài đặt OpenJDK 21.
sudo apt install -y openjdk-21-jdk
Kết quả mong đợi: Cài đặt thành công, không báo lỗi thiếu gói phụ thuộc.
Verify phiên bản Java:
java -version && javac -version
Kết quả mong đợi: Hiển thị "openjdk version "21.x.x..." và "java version "21.x.x...".
Cài đặt Python 3.12
Ubuntu 24.04 mặc định đã có Python 3.12. Chúng ta cần cài đặt thêm các thư viện phát triển (dev) và pip để build các gói Python cho ETL.
sudo apt install -y python3 python3-pip python3-venv python3-dev
Kết quả mong đợi: Cài đặt thành công các gói liên quan đến Python.
Verify phiên bản Python và pip:
python3 --version && pip3 --version
Kết quả mong đợi: Hiển thị "Python 3.12.x" và phiên bản pip tương ứng.
Cài đặt Git
Cần Git để clone source code của các công cụ và quản lý script ETL.
sudo apt install -y git
Kết quả mong đợi: Cài đặt thành công.
Cấu hình Git user và email (bắt buộc để commit):
git config --global user.email "your_email@example.com"
git config --global user.name "Your Name"
Kết quả mong đợi: Không có output lỗi, cấu hình đã được lưu trong `~/.gitconfig`.
Cài đặt Docker Engine
Chúng ta sẽ dùng Docker để chạy các container cho Spark/Trino trong các phần sau. Cài đặt Docker Engine chính chủ thay vì dùng gói trong apt.
sudo apt install -y ca-certificates curl gnupg
Thêm GPG key của Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Thêm repository Docker:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật và cài đặt Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kết quả mong đợi: Docker Engine đã được cài đặt.
Chạy Docker mà không cần sudo (thêm user hiện tại vào nhóm docker):
sudo usermod -aG docker $USER
Kết quả mong đợi: User hiện tại đã được thêm vào nhóm docker. Cần logout và login lại để (hiệu lực).
Verify toàn bộ công cụ
Chạy lệnh kiểm tra nhanh tất cả các công cụ đã cài:
echo "Java: $(java -version 2>&1 | head -n1)"
echo "Python: $(python3 --version)"
echo "Git: $(git --version)"
echo "Docker: $(docker --version)"
Kết quả mong đợi: Hiển thị phiên bản của cả 4 công cụ mà không có lỗi "command not found".
Tổng kết môi trường và chuẩn bị cho Phần 2
Hiện tại bạn đã có một server Ubuntu 24.04 LTS sạch sẽ, bảo mật với SSH Key, Firewall cấu hình đúng, và đầy đủ các runtime cần thiết: JDK 21, Python 3.12, Git và Docker.
Để đảm bảo mọi thứ sẵn sàng cho Phần 2 (Thiết lập Apache Spark và Apache Iceberg), hãy tạo thư mục làm việc chính cho dự án:
mkdir -p ~/lakehouse-project && cd ~/lakehouse-project
Kết quả mong đợi: Bạn đang đứng trong thư mục `lakehouse-project`.
Tạo file `requirements.txt` để quản lý các gói Python cần thiết cho ETL (sẽ dùng trong phần sau):
cat > requirements.txt =2.0.0
pyarrow>=14.0.0
pyiceberg>=0.6.0
EOF
Kết quả mong đợi: File `requirements.txt` đã được tạo với nội dung 3 gói thư viện chính.
Checkdisk: Đảm bảo ổ cứng còn trống:
df -h /
Kết quả mong đợi: Còn ít nhất 40GB trống trên partition `/`.
Đ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 »