1. Hadoop3伪分布式环境搭建全指南
作为大数据生态的核心组件,Hadoop的伪分布式模式是每个开发者必须掌握的实验环境。不同于单机模式仅用于功能验证,伪分布式完整模拟了Hadoop集群的各个组件,包括NameNode、DataNode和ResourceManager等守护进程,可以真实体验HDFS文件系统和YARN资源调度的完整工作流程。本指南将基于Ubuntu 22.04 LTS和Hadoop 3.3.5版本,详细演示从零开始的部署过程。
重要提示:伪分布式模式要求主机配置至少4GB内存和20GB磁盘空间,建议使用物理机或配置较高的虚拟机。低于此配置可能导致进程异常退出。
1.1 系统环境准备
首先需要创建专用的hadoop系统用户,避免直接使用root账户带来的权限问题。以下命令会创建用户并赋予sudo权限:
sudo useradd -m hadoop -s /bin/bash # 创建用户目录并指定bash为默认shell sudo passwd hadoop # 设置密码(建议设为hadoop便于记忆) sudo adduser hadoop sudo # 加入sudo组更新软件源并安装必要工具链:
sudo apt-get update sudo apt-get install -y ssh pdsh vim openjdk-8-jdk这里选择OpenJDK 8是因为Hadoop 3.3.x版本对其兼容性最好。若需使用Oracle JDK,需手动下载tar包配置JAVA_HOME。
配置SSH免密登录是伪分布式运行的关键:
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 hostname # 应无密码返回主机名1.2 Hadoop安装与基础配置
从Apache官网下载二进制包并解压:
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz sudo tar -xzf hadoop-3.3.5.tar.gz -C /usr/local/ sudo chown -R hadoop:hadoop /usr/local/hadoop-3.3.5 sudo ln -s /usr/local/hadoop-3.3.5 /usr/local/hadoop # 创建软链接配置环境变量(~/.bashrc追加):
export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native1.3 核心配置文件修改
修改$HADOOP_HOME/etc/hadoop/core-site.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>配置hdfs-site.xml(注意副本数设为1):
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> </property> </configuration>修改mapred-site.xml启用YARN:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>配置yarn-site.xml资源管理器:
<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>1.4 初始化与启动集群
格式化HDFS文件系统(仅首次需要):
hdfs namenode -format # 看到successfully formatted提示表示成功启动所有服务:
start-dfs.sh start-yarn.sh验证进程是否正常:
jps # 应显示以下关键进程: # NameNode # DataNode # ResourceManager # NodeManager # SecondaryNameNode通过Web UI验证:
- HDFS状态:http://localhost:9870
- YARN管理:http://localhost:8088
2. 伪分布式环境实操演练
2.1 HDFS基础操作
创建用户目录并上传测试文件:
hdfs dfs -mkdir -p /user/hadoop hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/hadoop/input查看文件列表:
hdfs dfs -ls -R /user # 递归列出目录结构2.2 运行MapReduce示例
执行经典的wordcount程序:
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar \ wordcount /user/hadoop/input /user/hadoop/output查看结果:
hdfs dfs -cat /user/hadoop/output/*2.3 资源限制调整
修改yarn-site.xml增加资源分配:
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1024</value> </property>3. 故障排查与优化建议
3.1 常见问题解决方案
问题1:NameNode无法启动
- 检查日志:$HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log
- 常见原因:端口冲突或存储目录权限错误
- 解决方案:
sudo lsof -i:9000 # 检查端口占用 chmod -R 755 $HADOOP_HOME/tmp # 修复权限
问题2:DataNode进程消失
- 检查datanode日志中的磁盘空间报错
- 解决方案:
hdfs dfsadmin -report # 查看各节点状态 df -h # 检查磁盘空间
3.2 性能优化参数
在hadoop-env.sh中调整JVM参数:
export HADOOP_HEAPSIZE_MAX=1024m export HADOOP_NAMENODE_OPTS="-Xmx1024m" export HADOOP_DATANODE_OPTS="-Xmx512m"3.3 安全关闭流程
正确停止集群的顺序:
stop-yarn.sh stop-dfs.sh4. 进阶配置指南
4.1 启用历史服务器
配置mapred-site.xml:
<property> <name>mapreduce.jobhistory.address</name> <value>localhost:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>localhost:19888</value> </property>启动服务:
mr-jobhistory-daemon.sh start historyserver4.2 日志聚合配置
在yarn-site.xml中添加:
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/tmp/logs</value> </property>查看聚合日志:
yarn logs -applicationId <app_id>经过上述步骤,您已经建立起完整的Hadoop伪分布式环境。这个环境可以用于开发测试MapReduce程序、学习YARN调度机制以及体验HDFS分布式存储特性。对于生产环境,还需要考虑高可用配置、安全认证等更多因素。