1. Hadoop伪分布式模式安装概述
对于大数据初学者来说,Hadoop伪分布式模式是最理想的入门环境。它在一台机器上模拟完整的Hadoop集群运行环境,既保留了分布式系统的核心特性,又避免了多节点配置的复杂性。我在实际教学和项目开发中发现,90%的Hadoop初学者问题都集中在环境配置阶段,而伪分布式模式恰好能帮助开发者平滑过渡到真实集群环境。
伪分布式模式下,所有Hadoop守护进程(NameNode、DataNode、JobTracker、TaskTracker等)都运行在单个节点上,但每个进程独立运行,这与完全分布式模式的行为完全一致。这种模式特别适合以下场景:
- 开发调试MapReduce程序
- 学习HDFS文件操作
- 测试Hadoop配置变更
- 验证YARN资源调度
2. 环境准备与依赖安装
2.1 系统要求
推荐使用Ubuntu 18.04+或CentOS 7+作为基础系统,这些发行版对Hadoop的兼容性最好。我在AWS EC2 t2.medium实例(2vCPU 4GB内存)上测试时,伪分布式模式运行流畅。以下是具体配置要求:
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核 |
| 内存 | 4GB | 8GB |
| 磁盘 | 20GB | 50GB+ |
| 系统 | Linux内核3.10+ | - |
2.2 Java环境配置
Hadoop 3.x需要Java 8或Java 11。我强烈建议使用OpenJDK:
sudo apt update sudo apt install openjdk-11-jdk -y验证安装:
java -version # 应显示类似:openjdk version "11.0.12"设置JAVA_HOME环境变量(这是Hadoop最常见的配置错误源):
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc source ~/.bashrc2.3 SSH无密码登录配置
Hadoop使用SSH管理守护进程,即使单节点也需要配置免密登录:
sudo apt install openssh-server -y ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys测试SSH连接:
ssh localhost # 首次连接需确认指纹,之后应无需密码直接登录3. Hadoop安装与配置
3.1 下载与解压
从Apache镜像站获取稳定版(当前推荐3.3.4):
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz tar -xzvf hadoop-3.3.4.tar.gz -C /opt/ sudo ln -s /opt/hadoop-3.3.4 /opt/hadoop设置环境变量:
echo 'export HADOOP_HOME=/opt/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc source ~/.bashrc3.2 核心配置文件修改
进入配置目录:
cd $HADOOP_HOME/etc/hadoop- hadoop-env.sh- 设置Java路径:
echo "export JAVA_HOME=$JAVA_HOME" >> hadoop-env.sh- core-site.xml- 核心参数:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-data</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://${hadoop.tmp.dir}/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/datanode</value> </property> </configuration>- mapred-site.xml- MapReduce配置:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>- yarn-site.xml- YARN配置:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,...</value> </property> </configuration>4. 启动与验证集群
4.1 格式化HDFS
首次启动前必须格式化NameNode:
hdfs namenode -format注意:重复格式化会导致数据丢失!仅在首次安装或需要完全重置时执行
4.2 启动所有服务
start-dfs.sh start-yarn.sh验证进程:
jps # 应显示以下关键进程: # NameNode # DataNode # ResourceManager # NodeManager # SecondaryNameNode4.3 Web UI访问
- HDFS NameNode: http://localhost:9870
- YARN ResourceManager: http://localhost:8088
5. 运行测试作业
5.1 准备测试数据
hdfs dfs -mkdir -p /user/$USER/input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/$USER/input5.2 运行WordCount示例
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ wordcount /user/$USER/input /user/$USER/output查看结果:
hdfs dfs -cat /user/$USER/output/*6. 常见问题排查
6.1 端口冲突问题
如果启动失败,检查以下端口是否被占用:
- 9870 (NameNode HTTP)
- 9000 (NameNode)
- 8088 (YARN)
- 8032 (YARN ResourceManager)
使用以下命令查找占用进程:
sudo netstat -tulnp | grep <端口号>6.2 权限问题
Hadoop对文件权限敏感,遇到权限拒绝时:
sudo chown -R $USER:$USER $HADOOP_HOME hdfs dfs -chmod -R 755 /user6.3 内存不足
在yarn-site.xml中添加:
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> <!-- 根据机器配置调整 --> </property>7. 生产环境准备建议
虽然伪分布式模式主要用于开发测试,但通过以下调整可以更接近生产环境:
- 启用HDFS权限检查:
<!-- hdfs-site.xml --> <property> <name>dfs.permissions.enabled</name> <value>true</value> </property>- 配置日志聚合:
<!-- yarn-site.xml --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property>- 启用压缩:
<!-- mapred-site.xml --> <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property>8. 维护与监控
8.1 日常管理命令
- 停止所有服务:
stop-yarn.sh stop-dfs.sh- 单独启停组件:
hadoop-daemon.sh start|stop namenode yarn-daemon.sh start|stop resourcemanager8.2 日志查看
关键日志位置:
- NameNode: $HADOOP_HOME/logs/hadoop--namenode-.log
- DataNode: $HADOOP_HOME/logs/hadoop--datanode-.log
- YARN: $HADOOP_HOME/logs/yarn--resourcemanager-.log
使用tail实时监控:
tail -f $HADOOP_HOME/logs/hadoop-*-namenode-*.log9. 性能优化技巧
即使伪分布式模式,这些优化也能提升体验:
- 调整JVM参数: 在
hadoop-env.sh中:
export HADOOP_HEAPSIZE_MAX=1024m # 控制内存使用- 禁用IPv6:
echo "export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true" >> hadoop-env.sh- SSD存储: 如果可能,将
hadoop.tmp.dir指向SSD目录:
<property> <name>hadoop.tmp.dir</name> <value>/mnt/ssd/hadoop-data</value> </property>10. 安全关闭与清理
完成实验后正确关闭:
stop-yarn.sh stop-dfs.sh如需完全清理(包括数据):
rm -rf /tmp/hadoop-* hdfs dfs -rm -r /user/$USER/output