一、Hadoop生态圈概述
1.1 Hadoop核心组件
Hadoop生态系统包含以下核心组件:
├── Hadoop Common - 公共工具库
├── HDFS (Hadoop Distributed File System) - 分布式文件系统
├── YARN (Yet Another Resource Negotiator) - 资源管理系统
└── MapReduce - 分布式计算框架
1.2 环境准备
系统要求:
- 3台CentOS 7/8服务器(1个NameNode + 2个DataNode)
- JDK 8或11
- 至少4GB内存/节点
- 网络互通,配置SSH免密登录
二、完全分布式集群搭建
2.1 环境配置
# 1. 配置主机名和hosts文件(所有节点执行)
# /etc/hosts 添加:
192.168.1.101 hadoop-master
192.168.1.102 hadoop-slave1
192.168.1.103 hadoop-slave2
# 2. 安装JDK(所有节点)
tar -xzf jdk-8u371-linux-x64.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_371' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
# 3. 创建Hadoop用户(所有节点)
groupadd hadoop
useradd -g hadoop hadoop
echo "hadoop123" | passwd --stdin hadoop
2.2 SSH免密登录配置
# 在master节点执行
su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id hadoop@hadoop-master
ssh-copy-id hadoop@hadoop-slave1
ssh-copy-id hadoop@hadoop-slave2
# 测试免密登录
ssh hadoop-slave1 "hostname" # 应该返回 hadoop-slave1
2.3 Hadoop安装与配置
# 1. 下载并解压Hadoop(所有节点)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzf hadoop-3.3.4.tar.gz -C /usr/local/
cd /usr/local && ln -s hadoop-3.3.4 hadoop
chown -R hadoop:hadoop hadoop-3.3.4
# 2. 配置环境变量
echo 'export HADOOP_HOME=/usr/local/hadoop' >> /home/hadoop/.bashrc
echo 'export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH' >> /home/hadoop/.bashrc
source /home/hadoop/.bashrc
2.4 核心配置文件
core-site.xml(所有节点)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml(所有节点)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- NameNode配置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namenode</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop-master:9870</value>
</property>
<!-- DataNode配置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 安全模式 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
workers(master节点)
hadoop-slave1
hadoop-slave2
hadoop-master # 也可以将master作为DataNode
hadoop-env.sh(所有节点)
export JAVA_HOME=/usr/local/jdk1.8.0_371
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_LOG_DIR=/data/hadoop/logs
三、HDFS核心概念与架构
3.1 HDFS架构图
Client ───────→ NameNode (元数据管理)
│ │
↓ ↓
DataNode1 DataNode2 DataNode3
(Block1,2) (Block2,3) (Block1,3)
3.2 HDFS核心概念
- Block:默认128MB的数据块
- NameNode:管理文件系统命名空间和元数据
- DataNode:存储实际数据块
- Secondary NameNode:检查点机制,非热备
四、HDFS Shell操作大全
4.1 集群启动与停止
# 格式化NameNode(首次安装执行)
hdfs namenode -format
# 启动HDFS集群
start-dfs.sh
# 停止HDFS集群
stop-dfs.sh
# 检查进程
jps
# 应该看到:
# master: NameNode, SecondaryNameNode
# slaves: DataNode
4.2 文件系统操作
# 1. 创建目录
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hadoop
hdfs dfs -mkdir -p /data/input # 递归创建
# 2. 上传文件
hdfs dfs -put /local/file.txt /user/hadoop/
hdfs dfs -copyFromLocal /local/data /user/hadoop/input
# 3. 查看文件
hdfs dfs -ls /user/hadoop
hdfs dfs -ls -R /user # 递归查看
hdfs dfs -cat /user/hadoop/file.txt
hdfs dfs -tail /user/hadoop/file.txt
# 4. 下载文件
hdfs dfs -get /user/hadoop/file.txt /local/path/
hdfs dfs -copyToLocal /user/hadoop/data /local/path/
# 5. 文件操作
hdfs dfs -cp /src /dest # 复制
hdfs dfs -mv /src /dest # 移动
hdfs dfs -rm /user/hadoop/file.txt # 删除文件
hdfs dfs -rm -r /user/hadoop/old_dir # 递归删除
hdfs dfs -rm -r -skipTrash /user/hadoop/dir # 直接删除,不进回收站
# 6. 查看文件内容
hdfs dfs -cat /user/hadoop/file.txt | head -10 # 查看前10行
hdfs dfs -text /user/hadoop/file.gz # 查看压缩文件
4.3 文件权限与配额
# 权限管理
hdfs dfs -chmod 755 /user/hadoop/file.txt
hdfs dfs -chown hadoop:hadoop /user/hadoop/
hdfs dfs -chgrp hadoop /user/hadoop/
# 设置配额
hdfs dfsadmin -setSpaceQuota 1G /user/hadoop # 空间配额
hdfs dfsadmin -setQuota 1000 /user/hadoop # 文件数量配额
# 查看配额
hdfs dfs -count -q /user/hadoop
4.4 集群管理命令
# 1. 集群状态检查
hdfs dfsadmin -report # 查看集群数据节点状态
hdfs dfsadmin -printTopology # 查看机架感知拓扑
# 2. 安全模式操作
hdfs dfsadmin -safemode get # 查看安全模式状态
hdfs dfsadmin -safemode enter # 进入安全模式
hdfs dfsadmin -safemode leave # 离开安全模式
# 3. 数据平衡
hdfs balancer -threshold 10 # 启动数据平衡,阈值10%
# 4. 块操作
hdfs fsck / -files -blocks -locations # 检查文件块信息
hdfs dfs -setrep -w 3 /user/hadoop/file.txt # 修改副本数
五、实战练习
5.1 数据准备与上传
# 创建本地测试数据
for i in {1..1000}; do
echo "Line $i: This is test data for Hadoop learning $(date)" >> /tmp/sample_data.txt
done
# 上传到HDFS
hdfs dfs -put /tmp/sample_data.txt /user/hadoop/input/
# 创建大文件测试(100MB)
dd if=/dev/zero of=/tmp/large_file.dat bs=1M count=100
hdfs dfs -put /tmp/large_file.dat /user/hadoop/
5.2 HDFS操作验证
# 验证文件上传
echo "=== 文件列表 ==="
hdfs dfs -ls /user/hadoop/
echo "=== 文件大小 ==="
hdfs dfs -du -h /user/hadoop/
echo "=== 块信息 ==="
hdfs fsck /user/hadoop/large_file.dat -files -blocks -locations
echo "=== 集群状态 ==="
hdfs dfsadmin -report | head -20
六、常见问题排查
6.1 启动问题
# 1. 检查日志
tail -f /data/hadoop/logs/hadoop-hadoop-namenode-*.log
tail -f /data/hadoop/logs/hadoop-hadoop-datanode-*.log
# 2. 端口占用检查
netstat -tlnp | grep 9000
netstat -tlnp | grep 9870
# 3. 权限问题
chown -R hadoop:hadoop /data/hadoop/
chmod -R 755 /data/hadoop/
6.2 连接问题
# 1. 网络连通性
ping hadoop-slave1
ssh hadoop-slave1 "hostname"
# 2. 防火墙
systemctl stop firewalld # 临时关闭
systemctl disable firewalld # 永久关闭
# 3. SELinux
setenforce 0 # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久关闭
6.3 性能优化配置
hdfs-site.xml 优化参数:
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128MB块大小 -->
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value> <!-- NameNode并发处理线程数 -->
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>30</value> <!-- DataNode并发处理线程数 -->
</property>
七、Web界面访问
7.1 HDFS Web UI
- 地址: http://hadoop-master:9870
- 功能: 浏览文件系统、查看节点状态、监控集群
7.2 关键监控指标
- Capacity: 集群总容量
- Used: 已用空间
- Present: 存活DataNode数量
- Under Replicated Blocks: 副本不足的块数
- Blocks with corrupt replicas: 损坏的块数
学习总结
通过本篇文章,您已经掌握了:
- ✅ Hadoop完全分布式集群搭建
- ✅ HDFS核心架构理解
- ✅ HDFS Shell操作大全
- ✅ 集群监控与问题排查
- ✅ 基础性能优化配置
环境验证命令:
# 最终验证集群状态
hdfs dfsadmin -report
hdfs dfs -ls /
jps