
一、先搞清楚伪分布式是什么伪分布式模式是在一台机器上运行 Hadoop 的全部守护进程NameNode、DataNode、ResourceManager、NodeManager 等每个进程独立运行模拟一个小规模集群。它和完全分布式在功能机制上一致区别只是所有角色挤在一台机器上。二、环境准备系统LinuxCentOS 7 / Ubuntu 20.04 / OpenEuler 均可内存建议 4GB 以上伪分布式所有进程在同一台机器上内存太小容易起不来。JavaJDK 8Hadoop 3.3.x 兼容 Java 8/11下文以 JDK 8 为例。2.1 安装 JDK 并配置环境变量# 解压 JDK路径按实际压缩包名调整tar-zxvf/opt/software/jdk-8u221-linux-x64.tar.gz-C/opt/modulevi/etc/profile补充提要C必须为大写的c还需要注意压缩包是否输入正确这也是经常出现错误的地方。文末追加exportJAVA_HOME/opt/module/jdk1.8.0_221exportPATH$PATH:$JAVA_HOME/binsource/etc/profile#刷新使环境配置生效java-version#观察是否配置好对应版本的环境2.2 安装 Hadooptar-zxvf/opt/software/hadoop-3.3.4.tar.gz-C/opt/module/etc/profile 继续文末追加exportHADOOP_HOME/opt/module/hadoop-3.3.4exportPATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinsource/etc/profile hadoop version补充Java看版本命令是 java -version,Hadoop看版本是hadoop version。这个需要注意区别输入错误可能会导致不能查看。伪分布式下 HADOOP_HOME 和 JAVA_HOME 的路径必须前后一致后面 hadoop-env.sh 里还要再写一次。三、SSH 免密登录伪分布式必须伪分布式虽然只在一台机器上但 start-dfs.sh 仍然会通过 SSH 登录到 localhost 来拉起进程。不配免密启动时会反复要求输密码甚至直接失败。ssh-keygen-trsa# 一路回车cat~/.ssh/id_rsa.pub~/.ssh/authorized_keyschmod700~/.sshchmod600~/.ssh/authorized_keys验证应该不输密码直接返回主机名sshlocalhosthostname如果这一步卡住或要求输密码先检查 ~/.ssh 和 authorized_keys 权限不要急着下一步。四、核心配置文件在 $HADOOP_HOME/etc/hadoop 下修改cd$HADOOP_HOME/etc/hadoop4.1 hadoop-env.sh在文件头部附近找到 JAVA_HOME 相关行显式写入实际路径exportJAVA_HOME/opt/module/jdk1.8.0_221配置好Java的环境以实际路径为主自行改变。4.2 core-site.xmlconfigurationpropertynamefs.defaultFS/namevaluehdfs://localhost:9000/value/propertypropertynamehadoop.tmp.dir/namevalue/opt/data/hadoop/value/property/configuration关键点初学阶段建议写 localhost并与 SSH 免密、workers 保持一致写主机名也可以但要确保本机解析和免密登录都正常。hadoop.tmp.dir 指向持久化目录避免落在 /tmp 被系统清理。4.3 hdfs-site.xmlconfigurationpropertynamedfs.replication/namevalue1/value/propertypropertynamedfs.namenode.name.dir/namevalue/opt/data/hadoop/dfs/name/value/propertypropertynamedfs.datanode.data.dir/namevalue/opt/data/hadoop/dfs/data/value/property/configuration伪分布式副本数必须是 1只有一个 DataNode写 3 会导致数据块永远无法满足副本要求HDFS 会一直处于复制中或报错。4.4 mapred-site.xmlconfigurationpropertynamemapreduce.framework.name/namevalueyarn/value/propertypropertynameyarn.app.mapreduce.am.env/namevalueHADOOP_MAPRED_HOME/opt/module/hadoop-3.3.4/value/propertypropertynamemapreduce.map.env/namevalueHADOOP_MAPRED_HOME/opt/module/hadoop-3.3.4/value/propertypropertynamemapreduce.reduce.env/namevalueHADOOP_MAPRED_HOME/opt/module/hadoop-3.3.4/value/property/configuration4.5 yarn-site.xmlconfigurationpropertynameyarn.nodemanager.aux-services/namevaluemapreduce_shuffle/value/property/configuration4.6 workersvi workers伪分布式只有本机一个 DataNodeworkers 写 localhost 即可写主机名也可以根据实际情况修改localhost建议不要跳过。start-dfs.sh 会依据 workers 启动 DataNodestart-yarn.sh 会依据 workers 启动 NodeManager伪分布式应保留 localhost。注意每行一个主机名不要有多余空格。五、创建数据目录伪分布式下 NameNode 和 DataNode 都在本机目录需要在格式化之前存在mkdir-p/opt/data/hadoop/dfs/namemkdir-p/opt/data/hadoop/dfs/datachown-Rroot:root /opt/data/hadoop# 如果用非 root 用户运行改成对应用户补充提要这里我们使用的是手动创建数据目录还有一种是极简方法为了省事就使用的是临时目录依赖默认值。两者相比较临时目录数据持久性较低。但是正规的部署文档或生产环境指南都会要求手动创建并显式配置路径。操作须知记得在 hdfs-site.xml 中分别把 dfs.namenode.name.dir 指向 /opt/data/hadoop/dfs/name把 dfs.datanode.data.dir 指向 /opt/data/hadoop/dfs/data。六、格式化并启动6.1 格式化 NameNode只执行一次hdfs namenode-format看到 successfully formatted 即成功。没有成功可以依次排查配置文件是否有遗漏或者拼写错误。补充hdfs namenode -format这个命令之间存在空格。没有空格命令错误。6.2 启动 HDFS 和 YARNstart-dfs.sh start-yarn.sh如果在/etc/profile文本里面配置好Hadoop的sbin环境就可以使用start-all.sh一键启动HDFS还有YARN。伪分布式下 start-all.sh 也能用但分开执行便于观察 HDFS 和 YARN 各自的启动日志。6.3 验证进程jps应看到NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。如果进程缺失先看 $HADOOP_HOME/logs/ 下对应 .log 文件如 namenode.log、datanode.log日志里的报错比反复重启有用得多。七、区别伪分布式 和 完全分布式节点数不同伪分布式节点数是1完全分布式节点是多台SSH免密不同完全分布式至少需要 master 到所有节点包括 master 自身和所有 slave配置 SSH 免密伪分布式只需本机 localhost 免密。作用场景的不同伪分布式适合日常开发调用以及学习理解Hadoop的工作机制完全分布式适合大规模数据业务。