当前位置:首页 > 物理机 > 正文

两台物理机如何快速搭建Hadoop集群?

使用两台物理机部署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

核心服务分配原则

  1. Master节点(服务器A)运行:

    • NameNode:管理HDFS元数据
    • ResourceManager:分配计算资源
    • SecondaryNameNode:元数据备份
  2. Worker节点(服务器B)运行:

    两台物理机如何快速搭建Hadoop集群?  第1张

    • 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

集群验证测试

  1. HDFS文件操作测试

    hdfs dfs -mkdir /test
    echo "Hello Hadoop" > test.txt
    hdfs dfs -put test.txt /test
    hdfs dfs -cat /test/test.txt  # 应输出Hello Hadoop
  2. 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参数

安全加固建议

  1. 启用Kerberos认证
    kadmin -q "addprinc nn/master@HADOOP.COM"
  2. 配置HDFS权限
    <property>
      <name>dfs.permissions.enabled</name>
      <value>true</value>
    </property>
  3. 启用审计日志
    <property>
      <name>dfs.namenode.audit.log.async</name>
      <value>true</value>
    </property>

后续扩展方向

  1. 添加ZooKeeper实现HA:消除NameNode单点故障
  2. 集成Spark/Flink:构建统一计算平台
  3. 接入Prometheus监控:实时采集以下指标:
    • HDFS存储利用率
    • YARN容器使用率
    • 节点网络IO
  4. 部署Alluxio:构建内存加速层

实际案例:某制造企业通过双节点集群处理每日10GB传感器数据,延时从小时级降至分钟级


引用说明

  1. Apache Hadoop官方文档 3.3.4版
  2. Linux基金会SSH配置指南
  3. 生产环境Hadoop调优实践 – Cloudera技术白皮书
  4. 服务器硬件选型基准测试 – TPC.org标准

通过遵循本指南,您已成功构建了一个高性价比的物理机Hadoop集群,建议每季度执行hdfs dfsadmin -report检查集群健康状态,并根据业务增长及时规划扩容方案。

0