如何在 Red Hat Linux 服务器上使用 Ansible 自动化部署并管理多节点 Hadoop 集群?

在大数据时代,Hadoop 已成为构建分布式存储与计算平台的核心组件。传统手动部署 Hadoop 集群不仅繁琐且易错,而借助 Ansible 这种无代理自动化工具,可以极大提升部署效率、统一配置并便于日后运维管理。

A5数据的本篇教程适合运维工程师 / 大数据开发工程师阅读,通过 Red Hat Enterprise Linux (RHEL 8.x/9.x) 服务器环境,使用 Ansible 自动化完成多节点 Hadoop 集群的部署、配置、启动、扩容与升级。


一、技术栈与版本

组件 版本
操作系统 Red Hat Enterprise Linux 8.7 / 9.1
Ansible 2.14.x
Java OpenJDK 11
Hadoop Apache Hadoop 3.3.6
SSH OpenSSH 8.x
Python 3.9+ (Ansible 依赖)

二、硬件与网络建议

以下配置基于生产级 10--50 节点中型集群规划

2.1 香港服务器www.a5idc.com节点角色与硬件规格

节点类型 CPU 内存 磁盘 网络
NameNode 16 核 64 GB 2×1.92 TB NVMe 10 Gbps
Secondary NameNode / Standby 8 核 32 GB 1×1.92 TB SSD 10 Gbps
DataNode 32 核 128 GB 4×4 TB HDD + 1×1.92 TB SSD (缓存) 10 Gbps
YARN NodeManager 16 核 64 GB 2×1.92 TB SSD 10 Gbps

三、前置条件与环境准备

3.1 系统准备

  1. 各服务器开启 SSH 免密码登录
  2. 安装必备工具及库
bash 复制代码
sudo dnf install -y python3 python3-devel openssh-clients tar wget
sudo dnf groupinstall -y "Development Tools"
  1. 设置主机名与 hosts 文件
bash 复制代码
# /etc/hosts 示例
192.168.100.10 namenode
192.168.100.11 datanode01
192.168.100.12 datanode02
...

四、安装 Ansible 控制节点

控制节点可以是任意一台 RHEL 服务器,不需作为 Hadoop 节点。

bash 复制代码
sudo dnf install -y epel-release
sudo dnf install -y ansible
ansible --version

五、配置 Ansible Inventory 文件

创建 inventory/hosts.ini

ini 复制代码
[hadoop_namenode]
namenode ansible_host=192.168.100.10

[hadoop_datanodes]
datanode01 ansible_host=192.168.100.11
datanode02 ansible_host=192.168.100.12

[hadoop_all:children]
hadoop_namenode
hadoop_datanodes

六、Ansible 角色拆分与目录结构

我们将 Ansible 角色拆分如下:

复制代码
ansible-hadoop/
├── inventory/
│   └── hosts.ini
├── roles/
│   ├── common/
│   ├── java/
│   ├── hadoop/
│   ├── hdfs/
│   └── yarn/
└── site.yml

七、角色实现细节

7.1 Role: common --- 通用初始化

roles/common/tasks/main.yml

yaml 复制代码
- name: Sync System Clock
  ansible.builtin.yum:
    name: chrony
    state: present

- name: Enable and start chronyd
  ansible.builtin.systemd:
    name: chronyd
    state: started
    enabled: yes

7.2 Role: java --- 安装 Java

roles/java/tasks/main.yml

yaml 复制代码
- name: Install OpenJDK 11
  ansible.builtin.yum:
    name: java-11-openjdk-devel
    state: present

- name: Ensure JAVA_HOME is configured
  ansible.builtin.lineinfile:
    path: /etc/profile.d/java.sh
    line: 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk'
    create: yes

7.3 Role: hadoop --- 下载 Hadoop 并分发

roles/hadoop/vars/main.yml

yaml 复制代码
hadoop_version: "3.3.6"
hadoop_url: "https://downloads.apache.org/hadoop/common/hadoop-{{ hadoop_version }}/hadoop-{{ hadoop_version }}.tar.gz"
install_dir: /opt/hadoop

roles/hadoop/tasks/main.yml

yaml 复制代码
- name: Download Hadoop tarball
  ansible.builtin.get_url:
    url: "{{ hadoop_url }}"
    dest: "/tmp/hadoop-{{ hadoop_version }}.tar.gz"

- name: Extract Hadoop
  ansible.builtin.unarchive:
    src: "/tmp/hadoop-{{ hadoop_version }}.tar.gz"
    dest: "{{ install_dir }}"
    remote_src: yes

- name: Create Hadoop symlink
  ansible.builtin.file:
    src: "{{ install_dir }}/hadoop-{{ hadoop_version }}"
    dest: "{{ install_dir }}/current"
    state: link

八、配置 HDFS 与 YARN

8.1 Core 配置模板

roles/hdfs/templates/core-site.xml.j2

xml 复制代码
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://namenode:9000</value>
  </property>
</configuration>

8.2 HDFS Site 配置

roles/hdfs/templates/hdfs-site.xml.j2

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>

8.3 YARN 配置

roles/yarn/templates/yarn-site.xml.j2

xml 复制代码
<configuration>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>65536</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>65536</value>
  </property>
</configuration>

九、主 Playbook --- site.yml

yaml 复制代码
- hosts: hadoop_all
  become: true

  roles:
    - common
    - java
    - hadoop

- hosts: hadoop_namenode
  become: true
  roles:
    - hdfs
    - yarn

- hosts: hadoop_datanodes
  become: true
  roles:
    - hdfs
    - yarn

执行部署:

bash 复制代码
ansible-playbook -i inventory/hosts.ini site.yml

十、初始化 HDFS 与启动服务

bash 复制代码
# 格式化 NameNode
ssh namenode "/opt/hadoop/current/bin/hdfs namenode -format -force"

# 启动 HDFS
ssh namenode "/opt/hadoop/current/sbin/start-dfs.sh"

# 启动 YARN
ssh namenode "/opt/hadoop/current/sbin/start-yarn.sh"

检查状态:

bash 复制代码
/opt/hadoop/current/bin/hdfs dfsadmin -report

十一、性能评测

11.1 HDFS 基准测试结果(示例)

测试项 参数 结果
写入测试 10 × 1GB blocks 190 MB/s
读取测试 10 × 1GB blocks 220 MB/s
小文件处理 10,000 files 30 sec

十二、运维管理技巧

12.1 扩容节点

只需更新 Inventory:

ini 复制代码
[hadoop_datanodes]
datanode03 ansible_host=192.168.100.13

执行:

bash 复制代码
ansible-playbook -i inventory/hosts.ini site.yml

12.2 Hadoop 升级

更新变量:hadoop_version → 新版本

执行 Playbook 即可实现滚动安装。


十三、监控与日志聚合建议

工具 作用
Prometheus + Grafana 集群健康监控
Elasticsearch + Filebeat + Kibana 日志收集与分析

结语

至此,你应该已掌握在 Red Hat Linux 环境下,利用 Ansible 自动化部署多节点 Hadoop 集群的完整流程。从基础环境准备,到 Ansible 角色拆分、模板渲染、模板参数化部署,再到集群启动与性能验证,整个方案具备高度可复用性与生产可用性。欢迎结合企业自身业务场景进一步优化。

相关推荐
街灯L1 小时前
【kylin-Linux】Flash兼容插件包安装
大数据·linux·运维·kylin
Howrun7771 小时前
Linux_C++网络编程四种CS模型
linux·运维·服务器
vortex51 小时前
如何快速删除 Linux 中的海量小文件:告别rm命令的缓慢困境
linux·运维·服务器
General_G2 小时前
ROS2资源汇总
linux·机器人·ros2
RisunJan3 小时前
Linux命令-ldd(查看可执行程序或共享库所依赖的动态链接库)
linux·运维·服务器
实心儿儿3 小时前
Linux —— 进程概念 - 进程运行、阻塞、挂起状态
linux·运维·服务器
观音山保我别报错3 小时前
消息队列项目基础知识总结
linux·服务器·数据库
历程里程碑3 小时前
Linux 5 目录权限与粘滞位详解
linux·运维·服务器·数据结构·python·算法·tornado
酉鬼女又兒3 小时前
SQL113+114 更新记录(一)(二)+更新数据知识总结
java·服务器·前端