Hadoop 三种运行模式:从单机调试到生产集群,一路搭过来 📅 发布时间:2026/8/22 2:09:59 👁 浏览次数: Hadoop 三种运行模式从单机调试到生产集群一路搭过来Hadoop 提供三种运行模式本质上对应三个场景单机模式我电脑上写代码跑通逻辑就行伪分布式模式我测试 HDFS YARN 功能对不对完全分布式模式生产环境多台机器跑大数据从单机到完全分布式的过程就是你的 Hadoop 技能从入门到生产的过程。不管哪种模式先配 Java 环境Hadoop 依赖 Java不管哪种模式这一步都逃不掉。# 安装 Java以 CentOS 为例sudoyuminstalljava-1.8.0-openjdk-devel# 确认 Java 路径whichjava# 输出/usr/bin/java# 找到 JAVA_HOMEreadlink-f/usr/bin/java|seds:/bin/java::然后在$HADOOP_HOME/etc/hadoop/hadoop-env.sh里加上exportJAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk验证 Hadoop 能跑hadoop version单机模式什么都不配直接跑Hadoop 默认就是单机模式解压即用。所有进程跑在单个 JVM 里不启动 HDFS、不启动 YARN读写本地文件系统。什么时候用写 MapReduce 代码的时候跑通逻辑就行。输入输出都在本地不用跟 HDFS 打交道。快速上手 WordCount# 创建输入目录mkdir-pinputechohello hadoop worldinput/file.txtechohello yarninput/file.txt# 运行 WordCountJAR 包路径按实际版本调整hadoop jar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount input output# 看结果catoutput/part-r-00000# hadoop 1# hello 2# world 1# yarn 1单机模式的优点零配置秒级启动用来验证逻辑正确性最好。缺点没有 HDFS没有分布式调度不能模拟真正的集群行为。伪分布式模式一台机器模拟集群单机模式验证了代码逻辑但你还不确定它在 HDFS YARN 上能不能跑。伪分布式模式就是在一台机器上启动所有守护进程——NameNode、DataNode、ResourceManager、NodeManager 全都有但都跑在同一台机器上。什么时候用功能测试、开发调试需要验证 HDFS 和 YARN 的交互逻辑。核心配置4 个文件都在$HADOOP_HOME/etc/hadoop/1. core-site.xml——HDFS 地址configuration!-- 指定 HDFS 的 NameNode 地址 --propertynamefs.defaultFS/namevaluehdfs://localhost:9000/value/property!-- Hadoop 临时文件存储目录需手动创建 --propertynamehadoop.tmp.dir/namevalue/opt/data/hadoop/tmp/value/property/configuration2. hdfs-site.xml——单节点副本数设为 1configuration!-- 副本数量单节点集群设为 1 --propertynamedfs.replication/namevalue1/value/property!-- NameNode 元数据存储目录需手动创建 --propertynamedfs.namenode.name.dir/namevalue/opt/data/hadoop/hdfs/name/value/property!-- DataNode 数据存储目录需手动创建 --propertynamedfs.datanode.data.dir/namevalue/opt/data/hadoop/hdfs/data/value/property!-- 关闭 HDFS 权限检查方便测试 --propertynamedfs.permissions.enabled/namevaluefalse/value/property/configuration3. mapred-site.xml——用 YARN 跑 MapReduceconfiguration!-- 指定 MapReduce 运行在 YARN 上 --propertynamemapreduce.framework.name/namevalueyarn/value/property!-- MapReduce 应用类路径3.x 版本需配置 --propertynamemapreduce.application.classpath/namevalue$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*/value/property/configuration4. yarn-site.xml——开启 Shuffleconfiguration!-- 启用 Shuffle 服务MapReduce 依赖 --propertynameyarn.nodemanager.aux-services/namevaluemapreduce_shuffle/value/property!-- Shuffle 服务类3.x 版本需配置 --propertynameyarn.nodemanager.aux-services.mapreduce_shuffle.class/namevalueorg.apache.hadoop.mapred.ShuffleHandler/value/property!-- 允许环境变量白名单避免 YARN 启动报错 --propertynameyarn.nodemanager.env-whitelist/namevalueJAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME/value/property/configuration启动# 格式化 HDFS仅需执行一次多次执行会清空数据hdfs namenode-format# 启动 HDFSstart-dfs.sh# 启动 YARNstart-yarn.sh# 检查进程jps# 应该看到NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager验证HDFS Web UIhttp://localhost:9870YARN Web UIhttp://localhost:8088跑个作业验证# 在 HDFS 上建目录、传文件hdfs dfs-mkdir-p/input hdfs dfs-putinput/file.txt /input/# 运行 WordCounthadoop jar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output# 看结果hdfs dfs-cat/output/part-r-00000关闭stop-yarn.sh stop-dfs.sh完全分布式模式多台机器真正跑集群伪分布式的所有进程挤在一台机器上资源争抢、单点风险——生产环境不能这样。完全分布式模式把组件分散到多台机器真正分布式部署。集群规划3 台机器机器HDFS 角色YARN 角色hadoop1主NameNode—hadoop2从DataNode SecondaryNameNodeNodeManagerhadoop3从DataNodeResourceManager NodeManager前置准备在所有节点执行配置主机名和 /etc/hosts# 每台机器的 /etc/hosts 都要加上192.168.1.101 hadoop1192.168.1.102 hadoop2192.168.1.103 hadoop3SSH 免密登录主节点hadoop1需要能免密登录所有从节点# 生成 SSH 密钥主节点执行ssh-keygen-trsa-P-f~/.ssh/id_rsa# 复制公钥到所有节点包括自身ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3所有节点安装 Java Hadoop路径一致主节点配置hadoop1 上配然后 scp 到其他节点core-site.xmlconfiguration!-- 指定 NameNode 地址主节点 hostname --propertynamefs.defaultFS/namevaluehdfs://hadoop1:9000/value/property!-- Hadoop 临时目录所有节点需手动创建 --propertynamehadoop.tmp.dir/namevalue/opt/data/hadoop/tmp/value/property/configurationhdfs-site.xmlconfiguration!-- 副本数量建议设为 2-3取决于从节点数 --propertynamedfs.replication/namevalue2/value/property!-- SecondaryNameNode 地址建议部署在从节点 --propertynamedfs.namenode.secondary.http-address/namevaluehadoop2:9868/value/property!-- NameNode 元数据存储目录 --propertynamedfs.namenode.name.dir/namevalue/opt/data/hadoop/hdfs/name/value/property!-- DataNode 数据存储目录 --propertynamedfs.datanode.data.dir/namevalue/opt/data/hadoop/hdfs/data/value/property/configurationmapred-site.xmlconfiguration!-- 指定 MapReduce 运行在 YARN 上 --propertynamemapreduce.framework.name/namevalueyarn/value/property/configurationyarn-site.xmlconfiguration!-- 启用 Shuffle 服务 --propertynameyarn.nodemanager.aux-services/namevaluemapreduce_shuffle/value/property!-- 指定 ResourceManager 地址 --propertynameyarn.resourcemanager.hostname/namevaluehadoop3/value/property/configurationworkers告诉 Hadoop 哪些节点是 DataNodehadoop2 hadoop3分发配置到所有节点scp-r$HADOOP_HOME/etc/hadoop/* hadoop2:$HADOOP_HOME/etc/hadoop/scp-r$HADOOP_HOME/etc/hadoop/* hadoop3:$HADOOP_HOME/etc/hadoop/启动集群# hadoop1 上执行格式化 HDFShdfs namenode-format# hadoop1 上执行启动 HDFSstart-dfs.sh# hadoop3 上执行启动 YARNResourceManager 在 hadoop3start-yarn.sh验证hadoop1 上能看到NameNodehadoop2 上能看到DataNodeSecondaryNameNodehadoop3 上能看到DataNodeResourceManagerNodeManagerWeb UIHDFS 在http://hadoop1:9870YARN 在http://hadoop3:8088