如何在 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 利用率。

八、总结与最佳实践

  1. 合理划分队列与容量 是提升调度效率的核心;
  2. 扩大 HDFS 数据块与读写缓冲 对大数据任务有明显吞吐提升;
  3. 精细化资源配置(内存/CPU/JVM) 有助于提升集群利用率;
  4. 监控系统必不可少,能提前捕获瓶颈并快速定位。
posted @ 2026-01-12 10:40  A5IDC  阅读(22)  评论(0)    收藏  举报