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

133 阅读3分钟

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

Hadoop Cluster

一、集群角色规划与架构设计

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核32GB1TB SSD × 210Gbps
从节点16核64GB8TB HDD × 810Gbps

二、核心配置文件详解

2.1 hdfs-site.xml 关键配置

<!-- 定义NameNode元数据存储目录 -->
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///hadoop/name</value>
</property>

<!-- 定义DataNode数据存储目录 -->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///hadoop/data</value>
</property>

<!-- 设置副本数 -->
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>

<!-- 启用WebHDFS -->
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

2.2 yarn-site.xml 关键配置

<!-- 指定ResourceManager地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
</property>

<!-- NodeManager可用内存 -->
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>57344</value> <!-- 56GB -->
</property>

<!-- NodeManager可用CPU -->
<property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>14</value> <!-- 16核留2给系统 -->
</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
hdfs namenode -format

# 启动HDFS集群
start-dfs.sh

# 启动YARN集群
start-yarn.sh

# 验证节点状态
hdfs dfsadmin -report
yarn node -list

# 运行数据均衡(带宽限制50MB/s)
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  # HDFS
nc -zv slave1 8031  # YARN

# 查看实时日志
tail -f /hadoop/logs/hadoop-*-datanode-*.log

4.3 典型问题解决方案

故障现象可能原因解决方案
DataNode未注册网络隔离/端口阻塞检查防火墙,开放50010端口
NodeManager状态异常内存不足调整yarn.nodemanager配置
Balancer停滞磁盘IO瓶颈限制带宽,更换磁盘类型
Web UI无法访问浏览器代理设置关闭代理或配置白名单

五、安全加固建议

5.1 基础安全配置

<!-- hdfs-site.xml -->
<property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
</property>

<!-- yarn-site.xml -->
<property>
    <name>yarn.acl.enable</name>
    <value>true</value>
</property>

5.2 网络隔离策略

# 使用iptables限制访问
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指标
    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端口速查表

服务端口协议用途
NameNode9000TCPHDFS文件操作
NameNode Web9870HTTP元数据管理界面
DataNode9864HTTP数据块传输状态
ResourceManager8088HTTP资源调度界面
NodeManager8042HTTP节点资源汇报