
在大数据平台建设中,高性能 Hadoop YARN 集群是支撑海量数据处理的核心架构之一。A5IDC在本教程以 Red Hat Linux 8 为操作系统,详细讲解如何构建一个高性能的 Hadoop YARN 集群,并重点介绍资源隔离(基于 Linux cgroups)与任务调度优化(CapacityScheduler/FairScheduler)的方法。方案兼顾生产可用性、性能调优与可维护性。
一、架构设计与香港服务器硬件www.a5idc.com配置
1.1 集群节点角色划分
| 节点角色 | 主机名 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|---|
| NameNode | master01 | 2×16 Core Intel® Xeon | 256 GB | 2×600 GB SSD | 10 GbE |
| ResourceManager | master02 | 2×16 Core Intel® Xeon | 256 GB | 2×600 GB SSD | 10 GbE |
| DataNode | worker01--worker06 | 2×12 Core Intel® Xeon | 128 GB | 10×2 TB HDD (RAID10) | 10 GbE |
| NodeManager | 与 DataNode 合并 | 同上 | 128 GB | 同上 | 10 GbE |
1.2 软件版本
| 软件 | 版本 |
|---|---|
| 操作系统 | Red Hat Enterprise Linux 8.8 |
| Java JDK | OpenJDK 1.8.0_362 |
| Hadoop | 3.3.6 |
| SSH | OpenSSH 8.0 |
| cgroups | cgroups v1(兼容模式) |
二、环境准备
2.1 系统设置
所有节点统一设置主机名、时区、关闭防火墙、配置 NTP 与内核参数:
bash
# 设置主机名
hostnamectl set-hostname master01
# 关闭防火墙(或保留必要端口)
systemctl disable --now firewalld
# 时间同步
yum install -y chrony
systemctl enable --now chronyd
# 内核参数调整 (/etc/sysctl.d/99-hadoop.conf)
cat <<EOF > /etc/sysctl.d/99-hadoop.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
vm.swappiness = 10
fs.file-max = 1000000
EOF
sysctl --system
2.2 安装 JDK
bash
yum install -y java-1.8.0-openjdk-devel
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
source /etc/profile
验证:
bash
java -version
三、部署 Hadoop 集群
3.1 用户与 SSH 密钥
统一创建 Hadoop 用户、配置免密登录:
bash
useradd -m -s /bin/bash hadoop
echo "hadoop ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/hadoop
# 切换到 hadoop 用户
su - hadoop
ssh-keygen -t rsa -P ""
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将 ~/.ssh/authorized_keys 同步至所有节点,确保互信。
3.2 下载与解压 Hadoop
bash
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -zxvf hadoop-3.3.6.tar.gz -C /opt/
ln -s /opt/hadoop-3.3.6 /opt/hadoop
配置环境变量:
bash
cat <<EOF >> ~/.bashrc
export HADOOP_HOME=/opt/hadoop
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
EOF
source ~/.bashrc
四、核心配置文件
4.1 core-site.xml
xml
<configuration>
<property><name>fs.defaultFS</name><value>hdfs://master01:9000</value></property>
<property><name>hadoop.tmp.dir</name><value>/data/hadoop/tmp</value></property>
</configuration>
4.2 hdfs-site.xml
xml
<configuration>
<property><name>dfs.replication</name><value>3</value></property>
<property><name>dfs.namenode.name.dir</name><value>file:///data/hdfs/namenode</value></property>
<property><name>dfs.datanode.data.dir</name><value>file:///data/hdfs/datanode</value></property>
</configuration>
4.3 yarn-site.xml
xml
<configuration>
<!-- ResourceManager -->
<property><name>yarn.resourcemanager.hostname</name><value>master02</value></property>
<!-- Enable Linux Container Executor -->
<property><name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value></property>
<!-- cgroups resource isolation -->
<property><name>yarn.nodemanager.linux-container-executor.cgroups.enabled</name><value>true</value></property>
<property><name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name><value>/sys/fs/cgroup</value></property>
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>2048</value></property>
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>65536</value></property>
<property><name>yarn.scheduler.minimum-allocation-vcores</name><value>1</value></property>
<property><name>yarn.scheduler.maximum-allocation-vcores</name><value>16</value></property>
</configuration>
4.4 mapred-site.xml
复制模板并配置:
bash
cp mapred-site.xml.template mapred-site.xml
内容如下:
xml
<configuration>
<property><name>mapreduce.framework.name</name><value>yarn</value></property>
<property><name>mapreduce.jobhistory.address</name><value>master02:10020</value></property>
</configuration>
五、资源隔离:Linux cgroups
5.1 启用 cgroups
安装工具:
bash
yum install -y libcgroup-tools
编辑 /etc/cgconfig.conf:
conf
group yarncontainers {
cpu {
cpu.shares = 1024;
}
memory {
memory.limit_in_bytes = 51200000000;
}
}
启动 cgroups:
bash
systemctl enable --now cgconfig
5.2 配置 Container Executor
编辑 yarn-site.xml 中的以下参数:
xml
<property><name>yarn.nodemanager.linux-container-executor.group</name><value>hadoop</value></property>
<property><name>yarn.nodemanager.linux-container-executor.cgroups.mount</name><value>true</value></property>
确保 /sys/fs/cgroup 挂载且对 NodeManager 可见。
六、调度器优化
6.1 容量调度器(CapacityScheduler)
CapacityScheduler 配置文件:
xml
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>batch,interactive</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.batch.capacity</name>
<value>70</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.interactive.capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.batch.maximum-capacity</name>
<value>80</value>
</property>
6.2 公平调度器(FairScheduler)
若使用 FairScheduler,则在 yarn-site.xml 指定:
xml
<property><name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value></property>
并编写 fair-scheduler.xml:
xml
<allocations>
<queue name="default">
<minResources>4096 mb,2 vcores</minResources>
<maxResources>32768 mb,8 vcores</maxResources>
<fairSharePreemptionThreshold>0.5</fairSharePreemptionThreshold>
</queue>
</allocations>
七、性能与调优细节
7.1 内存与 JVM
| 组件 | 堆内存 |
|---|---|
| NameNode | 16 GB |
| SecondaryNameNode | 8 GB |
| DataNode | 8 GB |
| ResourceManager | 8 GB |
| NodeManager | 4 GB |
示例(hadoop-env.sh):
bash
export HADOOP_NAMENODE_OPTS="-Xms16g -Xmx16g"
7.2 GC 优化
建议使用 G1GC:
bash
export HADOOP_OPTS="$HADOOP_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
7.3 网络与 I/O
- 调整 TCP,启用大页(HugePages)提升 JVM 内存效率;
- 磁盘采用 RAID10 提升随机 I/O;
- NIC 绑定 10 GbE 网络,并配置 ethtool 减少中断负载。
八、启动集群
格式化 HDFS 并启动:
bash
hdfs namenode -format
start-dfs.sh
start-yarn.sh
确认节点状态:
bash
hdfs dfsadmin -report
yarn node -list
九、监控与评测
9.1 监控指标
| 指标 | 工具 |
|---|---|
| 集群健康 | Hadoop UI |
| GC 行为 | jstat / GC 日志 |
| cgroups 使用 | cgget / systemd-cgtop |
| 网络 | sar / ifstat |
9.2 评测结果示例
| 测试类型 | 数据量 | 吞吐 MB/s | 平均延迟 ms | CPU 利用率 |
|---|---|---|---|---|
| WordCount | 1 TB | 520 | 120 | 75% |
| Sort | 500 GB | 480 | 140 | 80% |
| Terasort | 1 TB | 460 | 150 | 82% |
评测表明,在资源隔离与调度优化后,任务稳定、资源利用率高、延迟可控。
十、常见问题与解决
10.1 容器分配失败
检查:
bash
yarn logs -applicationId <id> | grep "ContainerLaunch"
确保 cgroups 正常挂载、权限配置一致。
10.2 网络阻塞
排查:
bash
ethtool -S eth0
调整中断绑定与队列。
十一、结语
本文从环境准备、核心配置、资源隔离、调度器优化到性能评测,A5数据从实战角度完整展现了在 Red Hat Linux 8 上部署高性能 Hadoop YARN 集群的详细过程。通过启用 Linux cgroups 进行细粒度资源隔离,并合理配置 CapacityScheduler 或 FairScheduler,可以显著提升集群的稳定性与作业调度效率。完成本文方案后,集群能够支撑大规模数据处理任务,并具备良好的扩展性与可维护性。