简介:本文详细介绍Hadoop单机环境搭建的全流程,涵盖环境准备、安装配置、启动验证等关键步骤,帮助开发者快速掌握Hadoop单机部署的核心技能。
Hadoop作为分布式计算框架的标杆,其核心设计目标是处理PB级数据。但在开发调试阶段,搭建完整的分布式集群(3节点以上)存在硬件成本高、配置复杂、调试效率低等问题。单机环境通过伪分布式模式模拟分布式行为,既能验证核心功能,又能显著降低开发门槛。
典型应用场景包括:
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Linux/macOS | Linux Ubuntu 20.04 |
| 内存 | 4GB | 8GB+ |
| 磁盘空间 | 20GB | 50GB+(SSD优先) |
| CPU核心数 | 2核 | 4核+ |
关键提示:Hadoop 3.x版本对内存消耗较2.x降低约30%,但建议预留至少2GB内存给DataNode进程。
# 基础依赖安装(Ubuntu示例)sudo apt updatesudo apt install -y openjdk-11-jdk ssh pdsh
版本兼容性说明:
update-alternatives --config java确认当前版本
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gztar -xzvf hadoop-3.3.4.tar.gz -C /opt/sudo ln -s /opt/hadoop-3.3.4 /opt/hadoop
版本选择建议:
编辑~/.bashrc文件,添加以下内容:
export HADOOP_HOME=/opt/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
执行source ~/.bashrc使配置生效,验证命令:
hadoop version# 应输出类似:Hadoop 3.3.4
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>/tmp/hadoop</value></property></configuration>
<configuration><property><name>dfs.replication</name><value>1</value> <!-- 单机模式必须设为1 --></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>
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.map.memory.mb</name><value>512</value></property></configuration>
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.resource.memory-mb</name><value>1024</value></property></configuration>
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keysssh localhost # 首次连接需确认
常见问题处理:
Permission denied (publickey)错误,检查/etc/ssh/sshd_config中PubkeyAuthentication yesssh -v localhost调试连接过程
hdfs namenode -format# 成功输出应包含:Storage directory /tmp/hadoop/dfs/name has been successfully formatted.
警告:重复格式化会导致数据丢失,生产环境需谨慎操作
start-dfs.sh# 正常应启动三个进程:NameNode、DataNode、SecondaryNameNode
验证进程状态:
jps# 应看到类似输出:# 1234 NameNode# 1235 DataNode# 1236 SecondaryNameNode
start-yarn.sh# 验证ResourceManager和NodeManagerjps | grep -E "ResourceManager|NodeManager"
http://localhost:9870http://localhost:8088典型问题排查:
sudo ufw allow 9870/tcpsudo ufw allow 8088/tcp
tail -100f $HADOOP_HOME/logs/hadoop-*-namenode-*.log
hdfs dfs -mkdir /inputhdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar \wordcount /input /output
hdfs dfs -cat /output/part-r-00000# 应输出XML文件中单词的统计结果
现象:Container is running beyond physical memory limits
解决方案:
mapred-site.xml:
<property><name>mapreduce.map.memory.mb</name><value>1024</value></property><property><name>mapreduce.reduce.memory.mb</name><value>2048</value></property>
sudo fallocate -l 2G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile
检查占用端口:
netstat -tulnp | grep -E "9000|9870|8088"
修改配置(如需变更端口):
core-site.xml中修改fs.defaultFShdfs-site.xml中修改dfs.namenode.http-address典型日志:Incompatible namespaceID
解决方案:
stop-all.sh
rm -rf /tmp/hadoop/dfs/data/*
在log4j.properties中修改:
log4j.logger.org.apache.hadoop=DEBUG
<!-- hdfs-site.xml --><property><name>dfs.blocksize</name><value>134217728</value> <!-- 128MB --></property><property><name>dfs.datanode.handler.count</name><value>10</value></property>
以IntelliJ IDEA为例:
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.4</version></dependency>
-DHADOOP_HOME=/opt/hadoop-Djava.library.path=$HADOOP_HOME/lib/native
开发环境隔离:建议使用Docker容器封装Hadoop环境,示例命令:
docker run -it --name hadoop-single \-p 9870:9870 -p 8088:8088 \-v /tmp/hadoop:/tmp/hadoop \sequenceiq/hadoop-docker:2.7.0
数据备份策略:定期备份/tmp/hadoop/dfs/name目录
版本管理:使用git管理配置文件变更,示例:
cd $HADOOP_HOME/etc/hadoopgit initgit add .git commit -m "Initial Hadoop config"
性能基准测试:使用TestDFSIO进行IO性能测试:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.4-tests.jar \TestDFSIO -write -nrFiles 5 -fileSize 100
通过本文的详细指导,开发者可以系统掌握Hadoop单机环境的搭建方法,既能满足日常开发调试需求,又能为后续集群部署积累实践经验。建议在实际操作中结合官方文档(Hadoop Configuration)进行深入学习。