Cài đặt và Chuẩn bị Môi trường Hadoop 3.x trên Ubuntu 24.04
Chúng ta sẽ tải và triển khai Hadoop 3.3.6 (phiên bản ổn định tương thích tốt với HBase) dưới dạng phân tán. Mục tiêu là tạo một cụm HDFS 3 node (hoặc pseudo-distributed để test) với cấu trúc thư mục chuẩn.
Tạo thư mục cài đặt và tải về package Hadoop từ nguồn chính thức của Apache. Sử dụng user 'hadoop' đã được tạo sẵn trong phần 1 để tránh xung đột quyền root.
sudo mkdir -p /opt/hadoop
sudo chown hadoop:hadoop /opt/hadoop
su - hadoop
cd /opt
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -xzf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop
rm hadoop-3.3.6.tar.gz
Kết quả mong đợi: Thư mục /opt/hadoop xuất hiện với quyền sở hữu thuộc về user hadoop. Các file cấu hình mặc định nằm trong /opt/hadoop/etc/hadoop.
Cấu hình biến môi trường cho Hadoop
Để các lệnh Hadoop (hadoop, hdfs) chạy được từ mọi nơi, cần thêm đường dẫn vào ~/.bashrc. Đồng thời, cần thiết lập biến JAVA_HOME để Hadoop biết vị trí của JDK đã cài ở phần 1.
echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
echo 'export HDFS_NAMENODE_USER=hadoop' >> ~/.bashrc
echo 'export HDFS_DATANODE_USER=hadoop' >> ~/.bashrc
echo 'export HDFS_SECONDARYNAMENODE_USER=hadoop' >> ~/.bashrc
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc
Kết quả mong đợi: Chạy lệnh `hadoop version` trả về thông tin phiên bản Hadoop 3.3.6 mà không báo lỗi "command not found".
Cấu hình Core và HDFS cho Chế độ Phân tán
Chỉnh sửa file core-site.xml để chỉ định nơi lưu metadata và cổng giao tiếp của NameNode. Đây là file cấu hình trung tâm của toàn bộ hệ sinh thái Hadoop.
Đường dẫn file: /opt/hadoop/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://localhost:9000
hadoop.tmp.dir
/opt/hadoop/tmp
Kết quả mong đợi: Hadoop sẽ sử dụng địa chỉ localhost:9000 làm NameNode mặc định và lưu các file tạm vào thư mục /opt/hadoop/tmp.
Cấu hình hdfs-site.xml cho Redundancy và Replication
Chỉnh sửa file hdfs-site.xml để xác định số bản sao (replication factor) của dữ liệu và kích thước khối (block size). Đối với HBase, block size lớn hơn giúp giảm overhead khi đọc ghi khối lượng lớn dữ liệu.
Đường dẫn file: /opt/hadoop/etc/hadoop/hdfs-site.xml
dfs.replication
1
dfs.blocksize
268435456
dfs.namenode.datanode.registration.ip-hostname-check
false
dfs.permissions
false
Kết quả mong đợi:
- dfs.replication=1: Phù hợp cho môi trường test hoặc khi chỉ có 1 node (tránh lỗi không đủ replica).
- dfs.blocksize=268435456: 256MB, tối ưu cho HBase.
- dfs.permissions=false: Tắt kiểm tra quyền để HBase dễ dàng ghi dữ liệu mà không cần cấu hình ACL phức tạp ngay lập tức.
Cấu hình mapred-site.xml và yarn-site.xml (Bắt buộc)
Ngay cả khi chỉ chạy HDFS, Hadoop 3.x yêu cầu cấu hình mapred-site.xml và yarn-site.xml để khởi động các dịch vụ nền tảng. Nếu thiếu, NameNode có thể không khởi động đúng cách.
Đường dẫn file: /opt/hadoop/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.application.classpath
$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/common/*
Đường dẫn file: /opt/hadoop/etc/hadoop/yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
Kết quả mong đợi: Các file cấu hình được lưu, sẵn sàng cho bước format NameNode.
Format NameNode và Khởi động Dịch vụ HDFS
Trước khi khởi động, cần format NameNode để tạo phân vùng metadata (fsimage). Lưu ý: Chỉ format khi mới cài đặt hoặc khi muốn reset toàn bộ dữ liệu HDFS. Nếu cụm đang chạy, không được format lại.
hdfs namenode -format -force
Kết quả mong đợi: Xuất hiện dòng log "Successfully formatted NameNode" và tạo ra thư mục /opt/hadoop/tmp/dfs/namenode với các file fsimage.
Khởi động cụm HDFS
Sử dụng script start-dfs.sh để khởi động đồng loạt các tiến trình NameNode, DataNode và SecondaryNameNode. Cần đảm bảo user hiện tại là 'hadoop'.
start-dfs.sh
Kết quả mong đợi: Script in ra các dòng "Starting namenodes on [localhost]" và "Starting datanodes". Không có lỗi lỗi Fatal Error.
Kiểm tra tiến trình HDFS
Đảm bảo các tiến trình quan trọng đã chạy bằng lệnh jps. Cần thấy 4 tiến trình: NameNode, DataNode, SecondaryNameNode và NodeManager (nếu YARN chạy).
jps
Kết quả mong đợi:
- NameNode: Quản lý metadata.
- DataNode: Lưu trữ dữ liệu thực tế.
- SecondaryNameNode: Hỗ trợ checkpoint fsimage.
- NodeManager: Quản lý tài nguyên cho YARN (bắt buộc có trong Hadoop 3.x mặc dù ta chỉ dùng HDFS).
Quản lý và Kiểm tra Trạng thái HDFS
Sử dụng giao diện Web UI của NameNode để trực quan hóa trạng thái cụm. Đây là cách nhanh nhất để kiểm tra xem DataNode đã đăng ký thành công hay chưa.
curl http://localhost:9870
Kết quả mong đợi: Truy cập thành công vào trang Dashboard HDFS. Tại tab "HDFS Health", số lượng DataNodes phải là 1 (trong môi trường single-node). Trạng thái phải là "All Datanodes are healthy".
Thử nghiệm đọc ghi HDFS
Tạo một thư mục test trên HDFS và ghi một file nhỏ vào đó để xác nhận khả năng lưu trữ. Sau đó, liệt kê và đọc lại nội dung file.
hdfs dfs -mkdir /user/hadoop/test
hdfs dfs -put ~/.bashrc /user/hadoop/test/
hdfs dfs -ls /user/hadoop/test/
hdfs dfs -cat /user/hadoop/test/bashrc | head -n 5
Kết quả mong đợi:
- Lệnh mkdir: Không có lỗi.
- Lệnh put: File được tải lên thành công.
- Lệnh ls: Hiển thị file bashrc với kích thước > 0.
- Lệnh cat: Hiển thị nội dung 5 dòng đầu của file bashrc.
Cấu hình Quyền truy cập cho User HBase
HBase sẽ chạy dưới một user cụ thể (thường là 'hbase' hoặc 'hadoop'). Cần cấp quyền sở hữu thư mục /user trên HDFS cho user này để HBase có thể tạo bảng và lưu dữ liệu mà không bị lỗi "Permission denied".
Giả sử HBase sẽ chạy dưới user 'hbase', ta cần tạo thư mục /user/hbase và cấp quyền đầy đủ.
hdfs dfs -mkdir /user/hbase
hdfs dfs -chmod -R 755 /user/hbase
hdfs dfs -chown -R hbase:hadoop /user/hbase
Kết quả mong đợi: Thư mục /user/hbase được tạo. Khi kiểm tra bằng `hdfs dfs -ls -d /user/hbase`, owner phải là 'hbase' và group là 'hadoop' (hoặc group tương ứng). Quyền truy cập là 755 (rwxr-xr-x).
Verify quyền truy cập bằng user HBase
Chuyển sang user 'hbase' và thử tạo một thư mục con để đảm bảo quyền đã được cấp đúng.
su - hbase
hdfs dfs -mkdir /user/hbase/test_hbase
hdfs dfs -ls /user/hbase/
Kết quả mong đợi: Lệnh mkdir chạy thành công không báo lỗi "Permission denied". Thư mục test_hbase xuất hiện trong danh sách.
Điều hướng series:
Mục lục: Series: Triển khai Database phân tán với Apache HBase trên Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt JDK cho HBase
Phần 3: Cài đặt và cấu hình Apache HBase Standalone và Pseudo-Distributed »