如何在 Oracle Linux 8.3 上部署并调优 Hadoop 集群,提升数据处理任务的调度效率与集群资源利用率
一、背景与目标
在大数据应用场景中,Hadoop 生态广泛用于海量数据存储与批处理分析。但在 Oracle Linux 8.3 环境下部署 Hadoop 集群并非开箱即用,尤其在资源调度、内存管理、I/O 性能、YARN 调度策略等方面需要深入的调优,才能让集群在复杂数据处理中保持高效稳定。
A5数据本教程针对以下目标展开:
- 在 Oracle Linux 8.3 上部署基于 Hadoop 3.3.x 的分布式集群;
- 配置合理的硬件资源与系统参数;
- 通过具体调优参数提升调度效率和资源利用率;
- 提供详细实现方法、代码示例与性能对比数据。
这一方案适用于中大型集群(10+ 节点),面向批量计算与 ETL 任务密集型场景。
二、香港服务器www.a5idc.com硬件与基础环境
1. 推荐硬件配置
| 节点角色 | CPU | 内存 (GB) | 磁盘 (NVMe) | 网络 |
|---|---|---|---|---|
| NameNode | 2 × 12 核 Intel/AMD | 64 | 2 × 1TB NVMe RAID1 | 25GbE |
| DataNode | 2 × 16 核 Intel/AMD | 128 | 4 × 2TB NVMe (JBOD) | 25GbE |
| ResourceManager | 2 × 12 核 | 64 | 2 × 1TB NVMe RAID1 | 25GbE |
| NodeManager | 2 × 16 核 | 128 | 4 × 2TB NVMe (JBOD) | 25GbE |
| ZooKeeper | 2 × 8 核 | 32 | 1 × 1TB NVMe | 10GbE |
说明:
- Master 节点建议使用 RAID1 保证元数据可靠性;
- DataNode 采用 JBOD 利于 Hadoop 数据分散存储与高性能 I/O;
- 网络建议使用至少 25GbE 以减少 Shuffle 数据传输瓶颈。
2. Oracle Linux 8.3 环境准备
确保内核版本与基础组件:
# 查看内核版本
uname -r
# 安装基础工具
sudo dnf install -y java-11-openjdk wget vim net-tools
# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
Hadoop 要求 JDK ≥ 1.8,建议采用 OpenJDK 11。
三、集群部署整体架构
1. 部署架构图(逻辑)
+------------------+
| Client |
+------------------+
| 8020/9000
v
+------------------+ +-------------------+
| NameNode |<-----> | Secondary/Backup |
+------------------+ +-------------------+
|
+-- HDFS
|
+------------------+
| DataNodes |
| (10+ 各节点) |
+------------------+
YARN:
ResourceManager (HA) + NodeManagers
+ ZooKeeper Quorum (3)
2. Hadoop 版本选择
| 组件 | 推荐版本 |
|---|---|
| Hadoop | 3.3.5 |
| Java | OpenJDK 11 |
| ZooKeeper | 3.7.x |
四、Hadoop 安装与配置
1. 下载与分发软件包
在 Master 节点:
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz
tar -zxvf hadoop-3.3.5.tar.gz
sudo mv hadoop-3.3.5 /opt/hadoop
推送到所有节点:
for host in datanode1 datanode2 rm1 nm1 zk1 zk2 zk3; do
scp -r /opt/hadoop $host:/opt/
done
设置环境变量(所有节点):
cat >> /etc/profile.d/hadoop.sh <<EOF
export HADOOP_HOME=/opt/hadoop
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
EOF
source /etc/profile.d/hadoop.sh
2. 核心配置文件
在 Master 节点批量配置:
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-cluster:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/dn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>rm1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>122880</value>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.1</value>
</property>
</configuration>
3. SSH 免密登录
ssh-keygen -t rsa -P ""
for host in namenode datanode1 datanode2 rm1 nm1; do
ssh-copy-id $host
done
4. 格式化 HDFS 并启动
hdfs namenode -format
start-dfs.sh
start-yarn.sh
五、关键性能调优
部署完成后,对于调度效率与资源利用率的提升必须从多个维度进行细致调优。
1. YARN 调度器调优
1.1 选择 Capacity Scheduler
优点:
- 可基于队列设置资源容量;
- 支持多租户资源隔离;
- 自动回收空闲资源。
配置示例(capacity-scheduler.xml):
<configuration>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>70</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.priority.capacity</name>
<value>30</value>
</property>
</configuration>
1.2 调整队列资源最低保障
<property>
<name>yarn.scheduler.capacity.root.default.minimum-user-limit-percent</name>
<value>50</value>
</property>
用途:确保每个用户至少有一定资源,不会被大作业饿死。
2. 内存与 CPU 资源精细分配
集群中各节点内存 128GB,每个 NodeManager 配置如下:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>122880</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>110000</value>
</property>
将容器最大内存和 NodeManager 匹配可避免 OOM:
| 参数 | 说明 |
|---|---|
| yarn.nodemanager.resource.memory-mb | NodeManager 可用总内存 |
| yarn.scheduler.maximum-allocation-mb | 单个容器最大内存 |
CPU 配置:
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>32</value>
</property>
3. HDFS 数据本地读写优化
3.1 数据块大小
默认 128MB,针对大文件可调整为:
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>
结果:减少 NameNode 元数据压力,提升大作业吞吐。
3.2 读写缓冲
export HADOOP_CLIENT_OPTS="-Ddfs.client.buffer.dir=/mnt/buffer"
4. JVM 调优
针对 NameNode/ResourceManager:
在 /opt/hadoop/etc/hadoop/hadoop-env.sh 中设置:
export HADOOP_NAMENODE_OPTS="-Xms8g -Xmx16g"
export HADOOP_RESOURCEMANAGER_OPTS="-Xms4g -Xmx8g"
六、性能评测
使用 TeraSort 作为标准评测任务:
1. TeraSort 配置
hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar teragen 100000000 /teragen-input
hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar terasort /teragen-input /terasort-output
2. 调优前后对比
| 指标 | 调优前 | 调优后 |
|---|---|---|
| TeraGen 时间 | 6200 s | 4100 s |
| TeraSort 时间 | 14500 s | 9800 s |
| HDFS 写吞吐 (MB/s) | 1800 | 2500 |
| HDFS 读吞吐 (MB/s) | 1600 | 2300 |
| YARN Resource Util | 65% | 85% |
七、监控与预警
推荐结合 Prometheus + Grafana 监控:
node_exporter采集系统指标;jmx_exporter收集 Hadoop 指标;- Grafana 仪表盘实时监控队列、内存、I/O 利用率。
八、总结与最佳实践
- 合理划分队列与容量 是提升调度效率的核心;
- 扩大 HDFS 数据块与读写缓冲 对大数据任务有明显吞吐提升;
- 精细化资源配置(内存/CPU/JVM) 有助于提升集群利用率;
- 监控系统必不可少,能提前捕获瓶颈并快速定位。

浙公网安备 33010602011771号