Hadoop 3节点集群搭建实战指南

一、集群角色规划与架构设计
1.1 节点角色分配
graph TD
subgraph 主节点
NN[NameNode] --> RM[ResourceManager]
end
subgraph 从节点1
DN1[DataNode] --> NM1[NodeManager]
end
subgraph 从节点2
DN2[DataNode] --> NM2[NodeManager]
end
NN --> DN1
NN --> DN2
RM --> NM1
RM --> NM2
1.2 硬件配置推荐
| 节点类型 | CPU | 内存 | 磁盘 | 网络 |
|---|
| 主节点 | 8核 | 32GB | 1TB SSD × 2 | 10Gbps |
| 从节点 | 16核 | 64GB | 8TB HDD × 8 | 10Gbps |
二、核心配置文件详解
2.1 hdfs-site.xml 关键配置
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
2.2 yarn-site.xml 关键配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>57344</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>14</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
三、集群启动与数据均衡
3.1 集群初始化流程
flowchart TD
A[格式化NameNode] --> B[启动HDFS]
B --> C[启动YARN]
C --> D[验证服务]
D --> E[运行Balancer]
3.2 详细操作步骤
hdfs namenode -format
start-dfs.sh
start-yarn.sh
hdfs dfsadmin -report
yarn node -list
hdfs balancer -D dfs.balancer.max-size-to-move=52428800
3.3 数据均衡监控
import subprocess
import time
def monitor_balancer():
while True:
result = subprocess.run(
"hdfs dfsadmin -metasave balance_monitor",
shell=True, capture_output=True
)
with open("/tmp/balance_monitor") as f:
data = f.read()
if "Balancing is taking longer than expected" in data:
print("⚠️ 均衡速度过慢,建议检查网络或磁盘IO")
elif "Balancing is complete" in data:
print("✅ 数据均衡完成")
break
time.sleep(300)
monitor_balancer()
四、节点通信故障排查指南
4.1 故障排查流程图
graph TD
A[节点无法通信] --> B{能否ping通?}
B -->|否| C[检查物理网络]
B -->|是| D{SSH是否正常?}
D -->|否| E[检查ssh配置]
D -->|是| F{端口是否开放?}
F -->|否| G[配置防火墙]
F -->|是| H[检查服务日志]
4.2 常用诊断命令
ping slave1
traceroute slave1
nc -zv slave1 9000
nc -zv slave1 8031
tail -f /hadoop/logs/hadoop-*-datanode-*.log
4.3 典型问题解决方案
| 故障现象 | 可能原因 | 解决方案 |
|---|
| DataNode未注册 | 网络隔离/端口阻塞 | 检查防火墙,开放50010端口 |
| NodeManager状态异常 | 内存不足 | 调整yarn.nodemanager配置 |
| Balancer停滞 | 磁盘IO瓶颈 | 限制带宽,更换磁盘类型 |
| Web UI无法访问 | 浏览器代理设置 | 关闭代理或配置白名单 |
五、安全加固建议
5.1 基础安全配置
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
5.2 网络隔离策略
iptables -A INPUT -p tcp --dport 9000 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -j DROP
六、性能监控方案
6.1 监控指标采集
import psutil
import requests
def collect_metrics():
cpu = psutil.cpu_percent()
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
hdfs_status = requests.get("http://master:9870/jmx").json()
capacity_used = hdfs_status['beans'][0]['CapacityUsed']
return {
"cpu": cpu,
"memory": mem,
"disk": disk,
"hdfs_used": capacity_used
}
6.2 关键指标阈值
| 指标 | 警告阈值 | 危险阈值 | 监控频率 |
|---|
| CPU使用率 | 70% | 90% | 1分钟 |
| 内存使用率 | 75% | 90% | 1分钟 |
| HDFS使用率 | 80% | 95% | 5分钟 |
| 网络带宽 | 70% | 85% | 1分钟 |
生产环境建议:定期进行集群滚动重启维护,建议配置HDFS HA实现高可用。完整部署脚本可参考GitHub仓库
附录:Hadoop端口速查表
| 服务 | 端口 | 协议 | 用途 |
|---|
| NameNode | 9000 | TCP | HDFS文件操作 |
| NameNode Web | 9870 | HTTP | 元数据管理界面 |
| DataNode | 9864 | HTTP | 数据块传输状态 |
| ResourceManager | 8088 | HTTP | 资源调度界面 |
| NodeManager | 8042 | HTTP | 节点资源汇报 |