5.2 安装与配置


文档摘要

第五章:Apache Hadoop 安装与配置 5.2 安装与配置 Apache Hadoop 是构建大规模分布式数据处理系统的基石。本节提供一套完整、可复现的单节点伪分布式(Pseudo-Distributed)安装与配置流程,涵盖环境准备、二进制部署、核心配置、初始化、启动验证及基础功能测试,并延伸至多节点集群与高可用(HA)架构的关键配置要点,适用于 Ubuntu/CentOS 环境下的生产级部署实践。 2.1 环境准备 Hadoop 运行依赖于稳定的基础软件栈。部署前需确保以下系统组件就绪: 操作系统:Linux 发行版(推荐 Ubuntu 20.04/22.04 或 CentOS 7/8),内核版本 ≥ 3.

第五章:Apache Hadoop 安装与配置

5.2 安装与配置

Apache Hadoop 是构建大规模分布式数据处理系统的基石。本节提供一套完整、可复现的单节点伪分布式(Pseudo-Distributed)安装与配置流程,涵盖环境准备、二进制部署、核心配置、初始化、启动验证及基础功能测试,并延伸至多节点集群与高可用(HA)架构的关键配置要点,适用于 Ubuntu/CentOS 环境下的生产级部署实践。

2.1 环境准备

Hadoop 运行依赖于稳定的基础软件栈。部署前需确保以下系统组件就绪:

  • 操作系统:Linux 发行版(推荐 Ubuntu 20.04/22.04 或 CentOS 7/8),内核版本 ≥ 3.10
  • Java 运行环境:OpenJDK 8 或 OpenJDK 11(Hadoop 3.3.1 官方兼容 JDK 8–11),禁止使用 JDK 17+(存在 ClassLoader 兼容性风险)
  • SSH 服务:启用 sshd,并配置免密 SSH 登录(伪分布式模式下需实现 localhost 免密访问)
  • 用户权限:建议创建专用用户(如 hadoop),避免使用 root 直接运行 Hadoop 进程

安装 OpenJDK 8(以 Ubuntu 为例)

sudo apt-get update sudo apt-get install -y openjdk-8-jdk-headless

验证安装:

java -version # 输出应类似:openjdk version "1.8.0_382"

配置 SSH 免密登录

sudo apt-get install -y openssh-server ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys

测试连接:

ssh localhost # 成功后应无密码直接登录并返回 shell

2.2 下载与安装 Hadoop

下载与解压

Apache Hadoop 官方发布页 获取稳定版二进制包(推荐 hadoop-3.3.6,截至 2024 年最新 LTS 版本)。以下以 hadoop-3.3.6 为例:

cd /tmp wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz sudo tar -xzf hadoop-3.3.6.tar.gz -C /opt/ sudo chown -R $(whoami):$(whoami) /opt/hadoop-3.3.6 sudo ln -s /opt/hadoop-3.3.6 /opt/hadoop

/opt/hadoop 为后续配置中统一使用的 $HADOOP_HOME 路径,确保软链接指向有效版本。

配置系统环境变量

编辑当前用户环境文件:

echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc echo 'export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc echo 'export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"' >> ~/.bashrc source ~/.bashrc

验证环境变量:

echo $HADOOP_HOME # 应输出 /opt/hadoop hadoop version # 应显示 Hadoop 3.3.6 及构建信息

2.3 核心配置文件详解

所有配置文件位于 $HADOOP_HOME/etc/hadoop/。以下为伪分布式模式必需的四类 XML 配置,需严格按路径与语义修改,不可遗漏属性名或值格式

core-site.xml:定义默认文件系统

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/data/tmp</value> </property> </configuration>

hdfs-site.xml:配置 HDFS 存储行为

<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/hadoop/data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/hadoop/data/hdfs/datanode</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>

关键说明

  • dfs.replication=1 适用于单节点;多节点集群中建议设为 3
  • dfs.permissions.enabled=false 简化开发环境权限校验(生产环境应启用并配置 Kerberos)

mapred-site.xml:指定 MapReduce 运行框架

cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml

编辑内容:

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>

yarn-site.xml:配置资源调度服务

<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>localhost:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>localhost:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>localhost:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>localhost:8033</value> </property> </configuration>

验证配置完整性:执行 hadoop checknative -a,确认所有本地库(如 zlib、snappy)加载状态为 true

2.4 初始化 HDFS 文件系统

首次启动前必须格式化 NameNode 的元数据目录:

hdfs namenode -format

输出提示:成功时显示 Storage directory ... has been successfully formatted.
注意:该操作会清空 dfs.namenode.name.dir 目录下所有数据,切勿在已有生产数据的集群上重复执行

2.5 启动与验证集群服务

启动守护进程

# 启动 HDFS(NameNode + DataNode) start-dfs.sh # 启动 YARN(ResourceManager + NodeManager) start-yarn.sh

检查进程状态

jps

预期输出(共 5 个核心进程):

12345 NameNode 12346 DataNode 12347 SecondaryNameNode 12348 ResourceManager 12349 NodeManager

故障排查提示:若缺失 SecondaryNameNode,检查 hdfs-site.xml 中是否遗漏 dfs.namenode.secondary.http-address 配置;若 DataNode 未启动,检查 dfs.datanode.data.dir 目录权限(需属主可读写)。

Web UI 验证

  • HDFS 管理界面:http://localhost:9870(Hadoop 3.x 默认端口)
  • YARN 资源管理器:http://localhost:8088
  • 确认页面中 Live Nodes 数量为 1,且状态为 In Service

2.6 基础功能测试

使用 HDFS Shell 命令验证读写能力:

# 创建用户目录 hdfs dfs -mkdir -p /user/$(whoami) # 上传本地文件(生成测试文件) echo "Hadoop Installation Test" > test.txt hdfs dfs -put test.txt /user/$(whoami)/ # 列出文件并查看内容 hdfs dfs -ls /user/$(whoami)/ hdfs dfs -cat /user/$(whoami)/test.txt # 运行内置 WordCount 示例(验证 MapReduce) hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ wordcount /user/$(whoami)/test.txt /user/$(whoami)/output

成功标志/user/$(whoami)/output/part-r-00000 生成且包含统计结果。

2.7 多节点集群配置要点

当扩展至物理多节点时,需调整以下配置:

配置文件 修改项
slaves 替换为各 DataNode 主机名(每行一个),如 node1, node2, node3
core-site.xml fs.defaultFSlocalhost → 主 NameNode 主机名(如 namenode01
yarn-site.xml yarn.resourcemanager.hostname → ResourceManager 主机名
hdfs-site.xml dfs.namenode.name.dirdfs.datanode.data.dir 路径需在所有节点存在且权限一致

部署建议

  • 使用 Ansible 或 Shell 脚本统一分发配置文件与 $HADOOP_HOME
  • 所有节点执行 ssh-keygen + ssh-copy-id 实现全节点免密互信
  • 启动顺序:start-dfs.sh(主节点执行)→ start-yarn.sh(主节点执行)

2.8 高可用(HA)架构配置概述

Hadoop HA 通过 Active/Standby NameNode + ZooKeeper 协调服务 消除单点故障,核心组件包括:

  • 两个 NameNode:一个 Active 提供服务,一个 Standby 同步元数据
  • JournalNode 集群(≥3 节点):持久化 EditLog,供 Standby 实时同步
  • ZooKeeper Ensemble(≥3 节点):选举 Active NameNode 并管理故障转移
  • ZKFailoverController (ZKFC):每个 NameNode 节点上的守护进程,监控健康状态并触发切换

关键配置文件补充

  • hdfs-site.xml 中启用 HA 属性:dfs.ha.enabled, dfs.ha.namenodes.xxx, dfs.namenode.rpc-address.xxx.nn1
  • core-site.xmlfs.defaultFS 改为逻辑 URI:hdfs://mycluster
  • 部署 ZooKeeper 并配置 hadoop-env.shexport HADOOP_ZKFC_OPTS

生产建议:HA 配置复杂度高,首次部署前务必参考 Hadoop 官方 HA 文档,并进行 Failover 模拟演练。

总结

本节完整覆盖 Apache Hadoop 3.3.x 从零部署到高可用演进的技术路径。单节点伪分布式配置是理解 HDFS/YARN 架构的基石;多节点扩展需关注网络拓扑与配置一致性;而高可用方案则要求深入掌握 JournalNode 与 ZooKeeper 的协同机制。所有配置均经过 Ubuntu 22.04 + OpenJDK 8 环境实测验证,可作为企业级 Hadoop 集群建设的标准操作手册。后续章节将深入 HDFS 架构原理、YARN 调度策略及生产调优实践。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U