如何在 Red Hat Linux 8 上搭建高性能 Hadoop YARN 集群,并进行资源隔离与任务调度优化

在大数据平台建设中,高性能 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 进行细粒度资源隔离,并合理配置 CapacitySchedulerFairScheduler,可以显著提升集群的稳定性与作业调度效率。完成本文方案后,集群能够支撑大规模数据处理任务,并具备良好的扩展性与可维护性。

相关推荐
liulilittle12 小时前
Windows WSL部署Ubuntu子系统到其它磁盘上
linux·运维·服务器·网络·windows·ubuntu·wsl
lbb 小魔仙12 小时前
Linux 安全攻防 2025:从 SELinux 配置到漏洞应急响应全流程
linux·python·安全
易天ETU12 小时前
2026年光模块市场分析与预见
大数据·运维·网络·人工智能·光模块·光通信
Blossom.11812 小时前
基于多智能体协作的自动化数据分析系统实践:从单点工具到全流程智能
运维·人工智能·分布式·智能手机·自动化·prompt·边缘计算
心止水j12 小时前
hive桶
数据仓库·hive·hadoop
last demo12 小时前
高可用Keepalived
linux·运维·网络·智能路由器
心止水j12 小时前
hive 分区总结
数据仓库·hive·hadoop
郝学胜-神的一滴12 小时前
Linux线程使用注意事项:骈文技术指南
linux·服务器·开发语言·数据结构·c++·程序人生
迷茫运维路12 小时前
【K8S集群漏洞扫描】kube-proxy进程所监听的443端口证书过期问题分析与解决
linux·容器·kubernetes·漏洞处理
笑笑�12 小时前
OpenResty + nginx_upstream_check_module 构建主动健康检查模块
运维·nginx·负载均衡·openresty