Hadoop 3.2 mang lại nhiều cải tiến về hiệu suất và tính năng so với các phiên bản tiền nhiệm. Trong bài viết này, chúng ta sẽ tập trung vào việc thiết lập các thành phần cốt lõi của HDFS bao gồm NameNode, DataNode và SecondaryNameNode để xây dựng một cụm lưu trữ dữ liệu lớn (Big Data storage).
1. Chuẩn bị môi trường và giải nén gói cài đặt
Trước khi bắt đầu, hãy đảm bảo các máy chủ đã được cấu hình đồng bộ về thời gian, tắt tường lửa, thiết lập SSH không mật khẩu giữa các node và cài đặt JDK 1.8. Giả sử chúng ta có cụm 6 node, trong đó 1 node đóng vai trò NameNode, 1 node làm SecondaryNameNode và tất cả 6 node đều chạy DataNode.
# Giải nén tập tin cài đặt Hadoop 3.2.1
tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local
# Tạo liên kết mềm để quản lý phiên bản thuận tiện hơn
ln -s /usr/local/hadoop-3.2.1 /usr/local/hadoop
cd /usr/local/hadoop
2. Cấu hình hệ thống cốt lõi (core-site.xml)
Chỉnh sửa tệp etc/hadoop/core-site.xml để xác định điểm truy cập chính của hệ thống tệp và cấu hình bộ đệm hoạt động.
<configuration>
<!-- Định nghĩa địa chỉ truy cập mặc định cho NameNode -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfs-master:9001</value>
</property>
<!-- Tối ưu hóa kích thước bộ đệm cho các tác vụ I/O (128KB) -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
3. Cấu hình dịch vụ HDFS (hdfs-site.xml)
Tại tệp etc/hadoop/hdfs-site.xml, chúng ta cần xác định nơi lưu trữ dữ liệu vật lý, số lượng bản sao và các thông số vận hành khác.
<configuration>
<!-- Đường dẫn lưu trữ metadata của NameNode -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///hadoop/storage/dfs/name</value>
</property>
<!-- Danh sách các host được phép kết nối -->
<property>
<name>dfs.hosts</name>
<value>/usr/local/hadoop/etc/hadoop/node_list</value>
</property>
<!-- Kích thước khối dữ liệu (Block size: 256MB) -->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!-- Số lượng bản sao dữ liệu -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- Địa chỉ giao diện Web của NameNode -->
<property>
<name>dfs.namenode.http-address
4. Thiết lập môi trường thực thi (hadoop-env.sh)
Khai báo đường dẫn Java và các biến môi trường cần thiết để Hadoop có thể vận hành ổn định trong tệp etc/hadoop/hadoop-env.sh.
# Khai báo Java Home
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
# Khai báo Hadoop Home và thư mục logs
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
# Cấu hình người dùng thực thi các dịch vụ (ví dụ dùng root để đơn giản hóa)
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
5. Khởi tạo và vận hành cụm
Sau khi đồng bộ cấu hình sang tất cả các node trong cụm, chúng ta thực hiện định dạng NameNode (chỉ thực hiện một lần duy nhất khi cài đặt mới).
# Định dạng hệ thống tệp NameNode
bin/hdfs namenode -format
Tiếp theo, cập nhật danh sách các DataNode vào tệp etc/hadoop/workers. Mỗi dòng tương ứng với một tên máy chủ hoặc địa chỉ IP của DataNode. Cuối cùng, sử dụng kịch bản có sẵn để khởi động toàn bộ cụm:
# Khởi động toàn bộ dịch vụ HDFS
sbin/start-dfs.sh
Kiểm tra trạng thái các tiến trình bằng lệnh jps. Nếu thành công, bạn có thể truy cập giao diện quản trị Web qua địa chỉ http://[IP_NAMENODE]:9870 để theo dõi dung lượng lưu trữ, số lượng DataNode đang hoạt động và tình trạng sức khỏe của toàn bộ hệ thống.