上一篇
两台物理机如何快速搭建Hadoop集群?
- 物理机
- 2025-06-07
- 2412
使用两台物理机部署Hadoop集群,实现分布式存储(HDFS)和资源调度(YARN),构建基础的大数据处理环境。
两台物理机搭建Hadoop集群完全指南
为什么选择物理机部署Hadoop?
在云服务盛行的时代,物理机部署Hadoop集群仍具有不可替代的优势:
- 性能最大化:直接访问物理硬件资源,避免虚拟化层损耗
- 成本效益:长期运行场景下硬件投入回报率更高
- 数据安全:完全掌控数据物理存储位置
- 网络优化:万兆网卡直连可达到10Gbps+传输速率
实测数据显示:相同配置下物理机比虚拟机集群性能提升约15-30%
环境准备清单
硬件配置(最低要求)
组件 | 服务器A | 服务器B |
---|---|---|
CPU | 4核+ | 4核+ |
内存 | 16GB+ | 16GB+ |
存储 | 1TB HDD×2 | 1TB HDD×2 |
网络 | 千兆网卡×2 | 千兆网卡×2 |
软件要求
- 操作系统:Ubuntu 20.04 LTS/CentOS 7+ - Java环境:JDK 8 (1.8.0_311) - Hadoop版本:3.3.4 (最新稳定版) - SSH服务:所有节点互通免密登录
集群架构设计
graph LR A[Master节点] -->|管理元数据| B[Worker节点] A -->|资源调度| B subgraph 物理机1 A[NameNode<br>ResourceManager<br>SecondaryNameNode] end subgraph 物理机2 B[DataNode<br>NodeManager<br>DataNode] end
核心服务分配原则:
-
Master节点(服务器A)运行:
- NameNode:管理HDFS元数据
- ResourceManager:分配计算资源
- SecondaryNameNode:元数据备份
-
Worker节点(服务器B)运行:
- DataNode:存储实际数据块
- NodeManager:执行计算任务
详细搭建步骤
步骤1:系统基础配置
# 所有节点执行 sudo hostnamectl set-hostname master # 服务器A sudo hostnamectl set-hostname worker # 服务器B # 配置hosts文件(/etc/hosts) 192.168.1.100 master 192.168.1.101 worker # 关闭防火墙 sudo systemctl stop firewalld sudo systemctl disable firewalld # 时间同步 sudo timedatectl set-timezone Asia/Shanghai sudo yum install -y ntp && sudo systemctl start ntpd
步骤2:SSH免密登录配置
# 在master节点执行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id master # 本机 ssh-copy-id worker # 目标节点 # 验证免密登录 ssh worker 'hostname' # 应返回worker
步骤3:Java环境安装
tar -xzvf jdk-8u311-linux-x64.tar.gz -C /opt echo 'export JAVA_HOME=/opt/jdk1.8.0_311' >> ~/.bashrc echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc source ~/.bashrc
步骤4:Hadoop集群配置
core-site.xml:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> </property> </configuration>
hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>2</value> <!-- 副本数与节点数一致 --> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop/data/namenode</value> </property> </configuration>
yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
步骤5:启动集群
# 格式化HDFS(仅在首次执行) hdfs namenode -format # 启动HDFS start-dfs.sh # 启动YARN start-yarn.sh # 验证服务 jps # master节点应显示:NameNode/ResourceManager # worker节点应显示:DataNode/NodeManager
集群验证测试
-
HDFS文件操作测试
hdfs dfs -mkdir /test echo "Hello Hadoop" > test.txt hdfs dfs -put test.txt /test hdfs dfs -cat /test/test.txt # 应输出Hello Hadoop
-
YARN任务执行测试
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 10 100
成功运行将输出:”Estimated value of Pi is 3.14…”
关键优化参数
在hadoop-env.sh
中添加:
# 内存配置(根据实际硬件调整) export HDFS_NAMENODE_OPTS="-Xmx4g" export YARN_RESOURCEMANAGER_OPTS="-Xmx2g" export HADOOP_HEAPSIZE_MAX=2048m # 数据磁盘选择 dfs.datanode.data.dir = /data1,/data2 # 多磁盘提升IO
故障排查指南
故障现象 | 解决方案 |
---|---|
DataNode未启动 | 检查dfs.datanode.data.dir 权限 |
节点间通信失败 | 验证防火墙和SELinux状态 |
磁盘空间不足 | 添加dfs.datanode.du.reserved 配置 |
Task运行超时 | 调整mapreduce.task.timeout 参数 |
安全加固建议
- 启用Kerberos认证:
kadmin -q "addprinc nn/master@HADOOP.COM"
- 配置HDFS权限:
<property> <name>dfs.permissions.enabled</name> <value>true</value> </property>
- 启用审计日志:
<property> <name>dfs.namenode.audit.log.async</name> <value>true</value> </property>
后续扩展方向
- 添加ZooKeeper实现HA:消除NameNode单点故障
- 集成Spark/Flink:构建统一计算平台
- 接入Prometheus监控:实时采集以下指标:
- HDFS存储利用率
- YARN容器使用率
- 节点网络IO
- 部署Alluxio:构建内存加速层
实际案例:某制造企业通过双节点集群处理每日10GB传感器数据,延时从小时级降至分钟级
引用说明:
- Apache Hadoop官方文档 3.3.4版
- Linux基金会SSH配置指南
- 生产环境Hadoop调优实践 – Cloudera技术白皮书
- 服务器硬件选型基准测试 – TPC.org标准
通过遵循本指南,您已成功构建了一个高性价比的物理机Hadoop集群,建议每季度执行hdfs dfsadmin -report
检查集群健康状态,并根据业务增长及时规划扩容方案。