第五章: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 是构建大规模分布式数据处理系统的基石。本节提供一套完整、可复现的单节点伪分布式(Pseudo-Distributed)安装与配置流程,涵盖环境准备、二进制部署、核心配置、初始化、启动验证及基础功能测试,并延伸至多节点集群与高可用(HA)架构的关键配置要点,适用于 Ubuntu/CentOS 环境下的生产级部署实践。
Hadoop 运行依赖于稳定的基础软件栈。部署前需确保以下系统组件就绪:
sshd,并配置免密 SSH 登录(伪分布式模式下需实现 localhost 免密访问)hadoop),避免使用 root 直接运行 Hadoop 进程sudo apt-get update sudo apt-get install -y openjdk-8-jdk-headless
验证安装:
java -version # 输出应类似:openjdk version "1.8.0_382"
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
从 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 及构建信息
所有配置文件位于 $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适用于单节点;多节点集群中建议设为3dfs.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。
首次启动前必须格式化 NameNode 的元数据目录:
hdfs namenode -format
输出提示:成功时显示
Storage directory ... has been successfully formatted.
注意:该操作会清空dfs.namenode.name.dir目录下所有数据,切勿在已有生产数据的集群上重复执行。
# 启动 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目录权限(需属主可读写)。
http://localhost:9870(Hadoop 3.x 默认端口)http://localhost:8088Live Nodes 数量为 1,且状态为 In Service使用 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生成且包含统计结果。
当扩展至物理多节点时,需调整以下配置:
| 配置文件 | 修改项 |
|---|---|
slaves |
替换为各 DataNode 主机名(每行一个),如 node1, node2, node3 |
core-site.xml |
fs.defaultFS 中 localhost → 主 NameNode 主机名(如 namenode01) |
yarn-site.xml |
yarn.resourcemanager.hostname → ResourceManager 主机名 |
hdfs-site.xml |
dfs.namenode.name.dir 和 dfs.datanode.data.dir 路径需在所有节点存在且权限一致 |
部署建议:
- 使用 Ansible 或 Shell 脚本统一分发配置文件与
$HADOOP_HOME- 所有节点执行
ssh-keygen+ssh-copy-id实现全节点免密互信- 启动顺序:
start-dfs.sh(主节点执行)→start-yarn.sh(主节点执行)
Hadoop HA 通过 Active/Standby NameNode + ZooKeeper 协调服务 消除单点故障,核心组件包括:
关键配置文件补充:
hdfs-site.xml中启用 HA 属性:dfs.ha.enabled,dfs.ha.namenodes.xxx,dfs.namenode.rpc-address.xxx.nn1等core-site.xml中fs.defaultFS改为逻辑 URI:hdfs://mycluster- 部署 ZooKeeper 并配置
hadoop-env.sh中export HADOOP_ZKFC_OPTS
生产建议:HA 配置复杂度高,首次部署前务必参考 Hadoop 官方 HA 文档,并进行 Failover 模拟演练。
本节完整覆盖 Apache Hadoop 3.3.x 从零部署到高可用演进的技术路径。单节点伪分布式配置是理解 HDFS/YARN 架构的基石;多节点扩展需关注网络拓扑与配置一致性;而高可用方案则要求深入掌握 JournalNode 与 ZooKeeper 的协同机制。所有配置均经过 Ubuntu 22.04 + OpenJDK 8 环境实测验证,可作为企业级 Hadoop 集群建设的标准操作手册。后续章节将深入 HDFS 架构原理、YARN 调度策略及生产调优实践。