1. Hadoop单机与伪分布式环境搭建实战指南
作为大数据领域的基石技术,Hadoop的本地环境搭建是每个开发者必须掌握的技能。本文将带你从零开始,在Ubuntu系统上完成Hadoop单机模式和伪分布式模式的完整部署。不同于官方文档的简略说明,这里会结合我多年的大数据平台运维经验,详细解释每个步骤背后的原理,并分享那些官方手册不会告诉你的避坑技巧。
2. 环境准备与基础配置
2.1 系统环境要求
在开始之前,请确保你的系统满足以下条件:
- Ubuntu 20.04/22.04 LTS(其他Linux发行版可参考调整)
- 至少4GB内存(伪分布式模式推荐8GB以上)
- 50GB可用磁盘空间
- 稳定的网络连接
提示:虽然Hadoop可以在Windows上运行,但生产环境几乎都使用Linux系统。Windows子系统WSL2也可作为替代方案,但可能遇到兼容性问题。
2.2 JDK安装与配置详解
Hadoop 3.3.x需要Java 8或Java 11支持,这里选择业界最常用的OpenJDK 8:
bash复制# 更新软件源索引
sudo apt update
# 安装OpenJDK 8开发套件
sudo apt install -y openjdk-8-jdk
安装完成后,验证Java环境:
bash复制java -version
javac -version
环境变量配置原理:
Hadoop需要通过JAVA_HOME环境变量定位Java安装路径。在Ubuntu中,OpenJDK通常安装在/usr/lib/jvm/java-8-openjdk-amd64。通过编辑/etc/profile文件可以使配置对所有用户生效:
bash复制export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
经验之谈:如果系统同时安装了多个Java版本,可以使用
update-alternatives --config java切换默认版本。Hadoop对Java版本非常敏感,版本不匹配是常见启动失败原因。
3. Hadoop单机模式部署
3.1 Hadoop安装与验证
从Apache官方镜像下载Hadoop 3.3.6稳定版:
bash复制wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
解压到系统目录并设置权限:
bash复制sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local
sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop
sudo chown -R $USER:$USER /usr/local/hadoop
配置Hadoop环境变量:
bash复制export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
验证安装:
bash复制hadoop version
3.2 单机模式运行原理
单机模式下,Hadoop不会启动任何守护进程,所有组件都在单个JVM中运行。这种模式适合:
- 快速验证Hadoop安装是否正确
- 开发和调试MapReduce程序
- 学习Hadoop基础API
运行WordCount示例:
bash复制mkdir -p ~/hadoop_test/input
cp $HADOOP_HOME/etc/hadoop/*.xml ~/hadoop_test/input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \
wordcount ~/hadoop_test/input ~/hadoop_test/output
避坑指南:如果遇到"Output directory already exists"错误,是因为Hadoop为防止数据意外覆盖,要求输出目录必须不存在。删除或重命名输出目录即可解决。
4. 伪分布式模式深入解析
4.1 伪分布式架构原理
伪分布式模式下,Hadoop的所有组件(NameNode、DataNode、ResourceManager等)都运行在单个节点上,但每个组件作为独立的Java进程运行。这种模式:
- 模拟了完整集群的行为
- 适合开发和测试
- 比完全分布式更节省资源
4.2 关键配置详解
4.2.1 core-site.xml
xml复制<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
fs.defaultFS:定义默认文件系统URI,所有相对路径都基于此hadoop.tmp.dir:Hadoop临时目录,需要手动创建并设置权限
4.2.2 hdfs-site.xml
xml复制<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
dfs.replication:数据块副本数,伪分布式设为1即可dfs.permissions.enabled:关闭权限检查,避免开发时的权限问题
4.3 SSH免密登录配置
伪分布式需要SSH免密登录本地主机:
bash复制ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
常见问题:如果免密登录不生效,检查以下三点:
~/.ssh目录权限必须为700authorized_keys文件权限必须为600- SSH服务是否正常运行(sudo systemctl status ssh)
4.4 HDFS初始化与启动
首次启动前必须格式化NameNode:
bash复制hdfs namenode -format
启动HDFS和YARN:
bash复制start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
验证进程:
bash复制jps
预期输出应包含6个关键进程:
- NameNode
- DataNode
- SecondaryNameNode
- ResourceManager
- NodeManager
- JobHistoryServer
5. 集群验证与问题排查
5.1 Web管理界面
- HDFS状态:http://localhost:9870
- YARN资源管理:http://localhost:8088
- 历史任务查看:http://localhost:19888
5.2 常见问题解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| NameNode未启动 | 端口冲突/未格式化 | 检查端口占用,重新格式化 |
| DataNode未启动 | 集群ID不匹配 | 删除tmp目录后重新格式化 |
| ResourceManager启动失败 | 内存不足 | 增加内存或调整yarn-site.xml配置 |
| SSH连接超时 | 防火墙未关闭 | 禁用防火墙:sudo ufw disable |
5.3 性能优化建议
-
内存配置:编辑
$HADOOP_HOME/etc/hadoop/hadoop-env.sh,调整:bash复制export HADOOP_HEAPSIZE_MAX=1024m -
JVM重用:在
mapred-site.xml中添加:xml复制<property> <name>mapreduce.job.jvm.numtasks</name> <value>10</value> </property> -
并行度设置:根据CPU核心数调整:
bash复制export MAPREDUCE_MAP_TASKS=4 export MAPREDUCE_REDUCE_TASKS=2
6. 进阶配置与扩展
6.1 多目录存储配置
在生产环境中,DataNode通常会配置多个存储目录:
xml复制<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data1/hdfs/dn,file:///data2/hdfs/dn</value>
</property>
6.2 YARN资源调度
调整YARN资源分配比例:
xml复制<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>80</value>
</property>
6.3 日志配置
修改日志级别和存储路径:
xml复制<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
7. 日常维护命令
7.1 HDFS常用操作
bash复制# 查看文件列表
hdfs dfs -ls /
# 上传文件
hdfs dfs -put localfile /user/hadoop/
# 下载文件
hdfs dfs -get /user/hadoop/file localdir
# 查看文件内容
hdfs dfs -cat /user/hadoop/file
7.2 YARN任务管理
bash复制# 查看运行中的任务
yarn application -list
# 终止任务
yarn application -kill application_id
# 查看节点状态
yarn node -list
8. 环境清理与重置
当需要重新配置集群时:
bash复制# 停止所有服务
stop-yarn.sh
stop-dfs.sh
# 删除HDFS数据
rm -rf /usr/local/hadoop/tmp/*
# 删除日志
rm -rf /usr/local/hadoop/logs/*
# 重新格式化
hdfs namenode -format
经过以上步骤,你应该已经成功搭建了Hadoop的单机和伪分布式环境。在实际开发中,伪分布式模式足以满足大多数学习和测试需求。当需要处理更大规模数据时,可以参考类似的配置方法扩展到完全分布式集群。