如何在 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 角色拆分、模板渲染、模板参数化部署,再到集群启动与性能验证,整个方案具备高度可复用性与生产可用性。欢迎结合企业自身业务场景进一步优化。

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush44 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 天前
Linux 11 动态监控指令top
linux