Hadoop 3.1.3 伪分布式环境搭建:Ubuntu 18.04 实战指南
1. 环境准备与基础配置
在开始Hadoop伪分布式环境搭建前,需要确保系统环境满足基本要求。Ubuntu 18.04 LTS作为长期支持版本,提供了稳定的基础运行环境。以下是详细的准备工作:
系统要求:
- Ubuntu 18.04 LTS 64位系统
- 至少4GB内存(推荐8GB)
- 20GB可用磁盘空间
- 稳定的网络连接
首先更新系统软件包并安装必要工具:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y ssh pdsh vim git curl wgetJava环境配置: Hadoop 3.1.3需要Java 8运行环境,执行以下命令安装OpenJDK:
sudo apt-get install -y openjdk-8-jdk验证Java安装是否成功:
java -version提示:如果系统已安装其他Java版本,可通过
update-alternatives --config java切换默认版本
创建专用Hadoop用户能提高系统安全性:
sudo adduser hadoop sudo usermod -aG sudo hadoop su - hadoop2. SSH免密登录配置
Hadoop集群管理需要SSH免密登录支持,即使单节点伪分布式环境也需要此配置。
生成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若仍需输入密码,检查权限设置:
chmod 0700 ~/.ssh chmod 0600 ~/.ssh/*3. Hadoop安装与核心配置
从Apache官网下载Hadoop 3.1.3二进制包:
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.1.3/hadoop-3.1.3.tar.gz tar -xzvf hadoop-3.1.3.tar.gz sudo mv hadoop-3.1.3 /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 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64使配置立即生效:
source ~/.bashrc核心配置文件修改:
- hadoop-env.sh:
echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> $HADOOP_HOME/etc/hadoop/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-tmp</value> </property> </configuration>- hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/tmp/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/tmp/hadoop/dfs/data</value> </property> </configuration>- mapred-site.xml:
<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,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>4. HDFS初始化与集群启动
格式化HDFS文件系统(仅首次需要):
hdfs namenode -format启动HDFS和YARN服务:
start-dfs.sh start-yarn.sh验证服务是否正常启动:
jps正常应看到以下进程:
- NameNode
- DataNode
- ResourceManager
- NodeManager
- SecondaryNameNode
Web管理界面访问:
- NameNode: http://localhost:9870
- ResourceManager: http://localhost:8088
5. 运行WordCount验证环境
创建测试目录并上传文件:
hdfs dfs -mkdir -p /user/hadoop/input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/hadoop/input运行WordCount示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/input /user/hadoop/output查看结果:
hdfs dfs -cat /user/hadoop/output/*常见问题排查:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法访问Web界面 | 防火墙阻止 | sudo ufw disable临时关闭防火墙 |
| DataNode未启动 | 多次格式化导致UUID不一致 | 删除/tmp/hadoop*目录后重新格式化 |
| 内存不足 | 默认配置过高 | 修改yarn-site.xml中的内存参数 |
6. 日常管理与维护
服务启停命令:
# 启动所有服务 start-all.sh # 停止所有服务 stop-all.sh # 单独启停组件 hadoop-daemon.sh start|stop namenode hadoop-daemon.sh start|stop datanode yarn-daemon.sh start|stop resourcemanager日志文件位置:
- NameNode日志: $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log
- DataNode日志: $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log
- YARN日志: $HADOOP_HOME/logs/yarn-hadoop-*.log
性能优化建议:
- 调整JVM堆内存大小(hadoop-env.sh)
- 合理设置HDFS块大小(dfs.blocksize)
- 配置MapReduce任务内存参数(mapred-site.xml)
- 启用压缩减少IO开销
7. 进阶配置与扩展
启用历史服务器: 在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 historyserverHDFS快照功能:
hdfs dfsadmin -allowSnapshot /user hdfs dfs -createSnapshot /user my_snapshot安全模式操作:
# 进入安全模式 hdfs dfsadmin -safemode enter # 离开安全模式 hdfs dfsadmin -safemode leave # 检查状态 hdfs dfsadmin -safemode get在实际项目中,伪分布式环境适合开发测试阶段使用。当需要处理更大规模数据时,可以考虑迁移到完全分布式集群环境。