
在大数据时代,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 系统准备
- 各服务器开启 SSH 免密码登录
- 安装必备工具及库
bash
sudo dnf install -y python3 python3-devel openssh-clients tar wget
sudo dnf groupinstall -y "Development Tools"
- 设置主机名与 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 角色拆分、模板渲染、模板参数化部署,再到集群启动与性能验证,整个方案具备高度可复用性与生产可用性。欢迎结合企业自身业务场景进一步优化。