Hadoop单机模式安装教程:从零到跑通WordCount

发布时间:2026/9/18 20:34:58
Hadoop单机模式安装教程:从零到跑通WordCount
1. 环境准备与版本选型1.1 为什么选择Hadoop单机模式很多刚接触大数据的朋友一上来就想着搭集群、搞分布式结果被一堆节点、网络配置、SSH免密折腾到怀疑人生。我个人的建议是不管你是学生做课程设计还是工程师想快速验证某个MapReduce逻辑第一步永远是先把单机版跑通。单机模式不是“阉割版”它用的是本地文件系统替代HDFS所有组件都在一个JVM进程里跑最适合用来理解Hadoop的核心机制——你写一个WordCount跑通的瞬间对MapReduce的整个执行流程会有一个非常直观的感知。单机模式最大的价值在于“低门槛验证”。你不需要准备多台机器不需要配置复杂的网络环境甚至连HDFS都不需要启动就能把Hadoop的核心能力跑起来。对于后续要学伪分布式、完全分布式的人来说单机版是把“环境变量”“配置文件”“启停命令”这套基础操作练熟的最佳场地。这次教程我以Hadoop 3.3.6版本为例运行环境是Ubuntu 20.04 LTS。选这个组合的原因很简单Hadoop 3.x系列是目前生产环境的主流版本3.3.6修复了大量已知问题Ubuntu 20.04则是一个长期支持版本软件源稳定网上遇到问题也好搜到答案。如果你用的是CentOS或者Windows WSL操作逻辑完全一致只是个别命令的包管理器不同而已。1.2 安装前必须确认的三件事动手之前先把基础环境检查一遍省得装到一半才发现缺东西。我列一个自查清单照着过一遍就行JDK版本Hadoop 3.x要求JDK 8或JDK 11这里推荐JDK 8兼容性最好网上资料也最多。安装完用java -version确认一下看到“java version 1.8.x”即正常。系统用户强烈建议单独建一个Hadoop用户不要用root直接跑。原因是Hadoop的脚本对目录权限很敏感用root容易遇到各种Permission denied而且生产环境也不会允许你用root跑任务养成好习惯从第一次安装开始。SSH服务单机模式严格来说不强制要求SSH但后面升级伪分布式时必须用到ssh localhost免密登录所以这次一并配好省得到时候再折腾一遍。这三件事看着简单但每一项都能引出不少坑。比如JDK版本不匹配启动时直接报UnsupportedClassVersionError用root用户跑DataNode可能起不来没配SSH伪分布式阶段卡在密码输入那一步。所以别嫌麻烦基础工作做扎实了后面一路顺畅。2. JDK安装与Hadoop解压2.1 JDK 8的两种安装方式JDK安装我推荐用apt直接装OpenJDK原因就俩字省事。Oracle JDK虽然性能上略有优势但下载需要登录Oracle账号配置起来也繁琐对学习场景来说完全没必要追求那点差异。执行下面这条命令sudo apt update sudo apt install openjdk-8-jdk -y装完验证一下java -version正常会输出类似这样的信息openjdk version 1.8.0_382 OpenJDK Runtime Environment (build 1.8.0_382-8u382-b05-0ubuntu1~20.04) OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)看到1.8.0_xxx就说明JDK 8已经就位。如果你系统里原本装了更高版本的JDK在/usr/lib/jvm目录下能找到多个版本可以用update-alternatives来切换默认版本sudo update-alternatives --config java选到对应JDK 8的路径即可。这个命令在以后需要切换JDK版本时非常实用建议记下来。2.2 创建Hadoop用户与SSH免密现在创建Hadoop专用用户sudo useradd -m hadoop -s /bin/bash sudo passwd hadoop然后切换到Hadoop用户生成SSH密钥并配置免密登录su - hadoop ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys验证一下ssh localhost第一次连接会提示确认指纹输入yes回车即可。之后再次执行ssh localhost就直接进去了不再要求输密码。注意ssh-keygen命令中-P 表示空密码-f指定生成路径。如果已经存在密钥文件命令会提示是否覆盖输入y确认即可。这一步配置好后不仅能用于Hadoop后续配置Git SSH、远程服务器管理都能复用属于一次性投入、长期收益的操作。2.3 下载Hadoop并校验文件完整性Hadoop的下载地址我一般推荐用清华镜像源速度比官网快好几个量级。这里以3.3.6为例wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz下载完成后先做一件事——校验文件完整性。Hadoop官网每个发行包都附带.sha512校验文件防止下载过程中文件损坏。执行echo 粘贴对应的sha512值 hadoop-3.3.6.tar.gz | sha512sum -c -会输出hadoop-3.3.6.tar.gz: OK。如果你嫌麻烦也可以直接解压试跑但做数据这行的养成校验文件完整性的习惯没坏处——生产环境一个损坏的安装包能让你排查一整天。解压并移动tar -xzvf hadoop-3.3.6.tar.gz sudo mv hadoop-3.3.6 /usr/local/hadoop sudo chown -R hadoop:hadoop /usr/local/hadoop把Hadoop放到/usr/local下是Linux的习惯做法所有用户都能访问chown把所有权给到hadoop用户避免后续运行时的权限问题。3. 环境变量配置与核心参数修改3.1 环境变量配置的完整过程环境变量配置是新手最容易犯迷糊的地方其实原理很简单系统在启动时会加载~/.bashrc里的配置你只需告诉它Hadoop的安装路径和命令路径即可。用vim打开配置文件vim ~/.bashrc在文件末尾追加以下内容export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop然后让配置生效source ~/.bashrc验证配置hadoop version能输出版本信息就说明环境变量生效了。这里有个细节值得讲一下source ~/.bashrc只在当前终端窗口生效你新开一个终端时系统会自动加载.bashrc所以不用担心每次要手动执行。但如果你用的是zsh则需要改~/.zshrc这点注意区分。提示配置HADOOP_CONF_DIR是个好习惯它让后续所有Hadoop命令都从这个目录读取配置。尤其后面要写Java程序调用Hadoop API时没有这个变量会报Configuration is not set之类的错。3.2 核心配置文件逐个拆解Hadoop的配置集中在$HADOOP_HOME/etc/hadoop目录下单机模式我们重点关注三个文件hadoop-env.sh、core-site.xml、hdfs-site.xml。逐个来看hadoop-env.sh——这个文件里写死了JAVA_HOME。虽然你已经配好了环境变量但Hadoop的启动脚本在某些场景下不会读取你的~/.bashrc所以必须在文件里显式指定vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh找到export JAVA_HOME这一行修改为export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64core-site.xml——核心配置项单机模式主要设置临时目录configuration property namehadoop.tmp.dir/name value/usr/local/hadoop/tmp/value /property /configurationhadoop.tmp.dir是Hadoop存放临时文件的根目录默认在/tmp下系统重启就可能被清空导致NameNode元数据丢失。必须指定到一个持久化目录这就是很多教程都强调要先建这个目录的原因。执行mkdir -p /usr/local/hadoop/tmphdfs-site.xml——单机模式其实不需要启动HDFS但考虑到你后续会升级到伪分布式这里提前把副本数设为1默认是3伪分布式只有一台机器必须改成1configuration property namedfs.replication/name value1/value /property /configuration这三个文件改完单机模式的核心配置就算完成了。注意core-site.xml和hdfs-site.xml都必须在configuration标签内部写property否则不会被识别。3.3 单机模式下最重要的验证操作跑通官方WordCount配置完成不代表万事大吉真正的检验是跑一个MapReduce作业。官方自带的示例jar包就是现成的测试工具。先创建输入数据目录和文件cd /usr/local/hadoop mkdir input echo hello hadoop input/test.txt echo hello world input/test.txt echo hadoop is powerful input/test.txt然后执行WordCounthadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output执行过程会输出大量日志你会看到Map阶段和Reduce阶段进度条。等出现Map-Reduce Finished字样查看结果cat output/part-r-00000正常输出hadoop 2 hello 2 is 1 powerful 1 world 1看到这个结果说明你的单机版Hadoop已经全部配置成功。这里有个细节output目录不能事先存在否则会报FileAlreadyExistsException所以每次跑测试前记得删掉旧的输出目录rm -rf output4. 常见问题排查与避坑全集4.1 启动报错的典型症状和对策我在不同环境装过很多次Hadoop整理一份高频问题速查表基本覆盖了90%的新手报错场景报错现象根本原因解决方案UnsupportedClassVersionErrorJDK版本过新或过旧确认java -version是1.8必要时用update-alternatives切换Permission denied目录权限不足chown -R hadoop:hadoop /usr/local/hadoopJAVA_HOME is not sethadoop-env.sh未配在hadoop-env.sh中显式写入JDK路径FileAlreadyExistsException输出目录已存在rm -rf output后重跑Cannot run program bashPATH被覆盖检查~/.bashrc里是否误设了PATH4.2 隐藏较深的几个坑除了上面的常见问题还有几个坑藏得比较深碰到了容易懵。第一个坑环境变量不生效。如果你执行hadoop version报command not found不要急着怀疑安装路径先确认是不是当前终端窗口没有执行source ~/.bashrc。另外检查一下/usr/local/hadoop/bin这个目录是否存在——有时候解压完发现目录名带了版本号比如hadoop-3.3.6你把它移到了/usr/local/hadoop但环境变量写的是旧路径自然找不到。第二个坑Windows下编辑过的文件换行符问题。如果你用Notepad或VS Code在Windows上编辑过配置文件再传到Linux上文件里的换行符是\r\n而Linux只认\n这会导致配置文件解析出错。解决方法是装个dos2unix工具批量转换sudo apt install dos2unix -y dos2unix $HADOOP_HOME/etc/hadoop/*.xml第三个坑内存不足。Hadoop启动时会预分配内存如果你的虚拟机内存只有1GB很可能在启动阶段就被OOM杀掉。建议至少分配2GB内存给虚拟机或者在hadoop-env.sh中调低HADOOP_HEAPSIZEexport HADOOP_HEAPSIZE5124.3 验证配置正确性的两条命令有时候配置改来改去不确定当前环境到底是什么状态可以用下面两条命令做快速体检hadoop checknative这条命令检查本地库如压缩编解码器是否完整如果输出里有Openssl is false之类的项不影响单机模式跑任务但如果你后续要用到LZO或Snappy压缩就得留意。hadoop classpath输出一大串路径是正常的表示Hadoop能找到所有依赖。如果这里输出为空或报错八成是HADOOP_HOME没配对。这两条命令就像跑马拉松前的热身虽然不直接解决问题但能帮你确认基础环节没毛病。5. 从单机到伪分布式下一步怎么走5.1 单机模式与伪分布式的本质区别单机跑通之后很多人的下一步就是搭伪分布式。两者的核心区别用一句话就能说清单机模式所有进程在同一个Java虚拟机里用本地文件系统伪分布式则是每个Hadoop守护进程NameNode、DataNode、ResourceManager、NodeManager单独跑用HDFS真正的分布式文件系统。切换的方法非常简单。在core-site.xml中把默认文件系统协议改为hdfs://localhost:9000然后格式化NameNodehdfs namenode -format这条命令会清空NameNode的所有元数据所以只有在首次部署或彻底重置时才能执行。5.2 伪分布式启动与验证清单启动HDFS和YARNstart-dfs.sh start-yarn.sh用jps命令查看进程是否齐全jps正常应看到5个进程NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。如果少了某个进程去对应日志目录$HADOOP_HOME/logs下查看日志这是排查启动问题最直接的途径。然后访问两个Web界面确认状态HDFS管理界面http://localhost:9870可查看文件系统状态和DataNode是否存活YARN任务管理界面http://localhost:8088可查看资源使用情况和任务运行日志5.3 下一步还能玩什么单机版和伪分布式都跑通后你其实已经具备了大数据库开发的基础。可以试着做以下几件事用-put和-get命令操作HDFS文件熟悉分布式文件系统的用法写一个自定义Mapper和Reducer的Java项目打包成jar提交到集群跑尝试配置Hive把SQL查询编译成MapReduce作业感受一下大数据生态的层次感如果你用的是Docker环境直接拉一个Hadoop镜像能省去很多麻烦但强烈建议先手动装一遍——手动安装过程中踩的每一个坑都是你对Hadoop运行机制理解的养分。这一步的“慢”换来的是后面排障时的快。6. 写在最后的经验总结安装Hadoop这件事第一次做可能觉得繁琐但按部就班走下来其实也就是“装JDK、解压、配变量、改配置、跑测试”这几个环节。我自己装过不下十次每次都在不同系统、不同版本上折腾最大的体会是——大部分问题都出在环境因素而不是Hadoop本身。比如JDK路径写错、权限没给足、配置文件格式不对、端口被占用这些看起来“低级”的问题恰恰是最耗费时间的。所以我的习惯是每做完一个步骤就立刻验证装完JDK立刻java -version解压完立刻hadoop version改完配置立刻跑一次WordCount。把问题掐死在最小范围内不要攒到最后一起排查那样定位的难度会成倍增加。另外很多人喜欢直接复制网上的配置片段这里郑重提醒一下不同版本的Hadoop、不同的Linux发行版、不同的JDK路径配置文件的内容都会有差异。复制粘贴之前一定要检查路径是否存在、版本是否匹配否则配置复制进去根本不会被识别。最后如果你在安装过程中卡住了先把报错信息完整读完——大多数时候答案就在报错信息里而不是需要去搜索引擎碰运气。希望这份保姆级教程能帮你少走几个月的弯路顺利把Hadoop跑起来。