Để triển khai nhanh môi trường HDFS cục bộ nhằm kiểm thử và học tập, bài viết này hướng dẫn cài đặt Hadoop 3.2.1 trên hệ điều hành macOS — không yêu cầu cấu hình cụm phân tán hay máy ảo.
1. Tải và giải nén gói cài đặt
Tải bản binary của Hadoop 3.2.1 từ trang chủ: https://hadoop.apache.org/releases.html. Sau khi tải xong, giải nén vào thư mục làm việc (ví dụ: ~/hadoop-env):
mkdir -p ~/hadoop-env
tar -xzf hadoop-3.2.1.tar.gz -C ~/hadoop-env
Kiểm tra hỗ trợ native libraries:
cd ~/hadoop-env/hadoop-3.2.1
./bin/hadoop checknative
Kết quả thường cho thấy thiếu hỗ trợ các codec như snappy hoặc bzip2 — điều này không ảnh hưởng đến chức năng cơ bản, nhưng nếu cần tối ưu nén/giải nén, nên xây dựng lại Hadoop từ mã nguồn.
2. Cấu hình các file XML bắt buộc
2.1 Cập nhật core-site.xml
Vị trí: ~/hadoop-env/hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>8192</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>604800</value> <!-- 7 ngày -->
</property>
</configuration>
2.2 Cập nhật hdfs-site.xml
Vị trí: ~/hadoop-env/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:9870</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost:9868</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/Users/$(whoami)/hadoop-env/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/Users/$(whoami)/hadoop-env/data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128 MB -->
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value> <!-- Vô hiệu hóa kiểm soát quyền để tránh lỗi trên macOS -->
</property>
</configuration>
2.3 Điều chỉnh hadoop-env.sh
Mở file ~/hadoop-env/hadoop-3.2.1/etc/hadoop/hadoop-env.sh, tìm dòng chứa JAVA_HOME và cập nhật đường dẫn JDK (tối thiểu Java 8):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
2.4 Cấu hình yarn-site.xml
Vị trí: ~/hadoop-env/hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
</configuration>
2.5 Thiết lập mapred-site.xml
Sao chép mẫu và chỉnh sửa:
cp ~/hadoop-env/hadoop-3.2.1/etc/hadoop/mapred-site.xml.template \
~/hadoop-env/hadoop-3.2.1/etc/hadoop/mapred-site.xml
Nội dung:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
</configuration>
3. Thiết lập biến môi trường
Thêm vào ~/.zshrc (macOS Catalina trở lên dùng zsh mặc định):
export HADOOP_HOME="$HOME/hadoop-env/hadoop-3.2.1"
export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"
export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop"
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
Áp dụng ngay:
source ~/.zshrc
4. Khởi tạo và khởi động cụm
Định dạng NameNode lần đầu tiên:
$HADOOP_HOME/bin/hdfs namenode -format
Khởi động dịch vụ:
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
$HADOOP_HOME/bin/mapred --daemon start historyserver
Xác minh tiến trình đang chạy:
jps
Kết quả mong đợi gồm: NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager, JobHistoryServer.
5. Truy cập giao diện quản trị
- HDFS NameNode UI: http://localhost:9870
- YARN ResourceManager UI: http://localhost:8088
- MapReduce JobHistory UI: http://localhost:19888
6. Xử lý sự cố thường gặp
6.1 Lỗi liên quan đến quyền người dùng
Nếu gặp lỗi "Operation not permitted" hoặc "Permission denied", thiết lập rõ user cho từng thành phần trong ~/.zshrc:
export HDFS_NAMENODE_USER=$(whoami)
export HDFS_DATANODE_USER=$(whoami)
export HDFS_SECONDARYNAMENODE_USER=$(whoami)
export YARN_RESOURCEMANAGER_USER=$(whoami)
export YARN_NODEMANAGER_USER=$(whoami)
6.2 SSH không sử dụng cổng mặc định
Nếu bạn cấu hình SSH trên cổng khác (ví dụ 2222), thêm vào hadoop-env.sh:
export HADOOP_SSH_OPTS="-p 2222"
Đảm bảo đã thiết lập SSH key-based authentication để tránh nhập mật khẩu mỗi lần khởi động.
6.3 Không truy cập được từ bên ngoài
Trên macOS, tất cả dịch vụ đều bind về localhost — không cần mở cổng firewall hay thay đổi IP thành 0.0.0.0. Nếu bạn đang triển khai trên máy chủ Linux và muốn truy cập từ xa, hãy thay localhost bằng 0.0.0.0 trong các giá trị http-address tương ứng, đồng thời đảm bảo tường lửa cho phép các cổng 9870, 8088, 19888.