Hadoop集群运行实战:从节点规划到作业提交的完整部署指南

发布时间:2026/10/6 9:19:44
Hadoop集群运行实战:从节点规划到作业提交的完整部署指南 简介这份PDF是“1X”职业技能等级证书配套课程中关于Hadoop集群运行的章节讲义面向正在学习Hadoop分布式系统运维的职校学生或自学者重点解决集群启动、格式化、健康状态检查与关闭等基础操作问题。文档以实验任务形式组织涵盖NameNode与DataNode格式化、HDFS报告查看、Java进程与节点状态监控、stop-all.sh停止集群等完整流程每个任务都配有具体命令与实际输出便于读者按步骤动手复现。资源为单个PDF文件大小约1.33MB内容紧凑但信息密度较高PDF内从实验目的、环境要求到五个实验任务逐步递进结构清晰。目前已有203人学习浏览适合作为Hadoop集群搭建后的第一份运维实践手册使用。读者完成本章后可掌握jps、hdfs dfsadmin -report等常用命令并理解重新格式化NameNode前需清理工作目录等关键注意事项为后续集群监控与维护打下基础。1. Hadoop集群运行一份把教材变成实操的PDF资源Hadoop集群搭建这件事看起来就是装个软件、改几个配置文件、跑几个启动命令但真正动手的人都知道返工最多的往往不是命令本身而是节点规划、参数默认值、版本差异这些不起眼的细节。这份《第5章 Hadoop集群运行》PDF对应大数据方向课程体系里集群部署与运维的核心章节也覆盖了1X大数据平台运维与开发考证的操作面。它解决的问题很具体在一组虚拟机上把一个真正可用的分布式Hadoop跑起来能启动、能提交作业、能看懂任务调度、能处理日志里暴露的异常。适合正在跟课程做集群实验的学生也适合刚入职需要独立搭一套测试环境的运维新人。2. 集群规划与选型节点怎么分、内存给多少、组件怎么配2.1 主从架构与节点角色划分Hadoop集群默认是主从架构主节点承担管理职责从节点负责数据存储和任务计算。这份PDF里的标准实验拓扑一般是一台主节点、两台或三台从节点。主节点上跑NameNode、SecondaryNameNode和ResourceManager从节点上跑DataNode和NodeManager。NameNode管理文件系统的命名空间和元数据所有文件的目录结构、块位置信息都存在它这块。DataNode真正存数据块默认情况下每个block会有副本按dfs.replication参数决定副本数。ResourceManager负责集群资源调度NodeManager在每台从节点上管理本机资源并启动Container。这里有个新手容易混淆的点ResourceManager和SecondaryNameNode不一定要跟NameNode放在同一台机器实验环境通常放一起简化管理但生产环境不建议这样搞。主节点单点压力已经不小再把资源调度和元数据检查点都堆在上面一旦内存不够整个集群跟着遭殃。我一般建议学习阶段按“一主二从”三节点起步用虚拟机克隆出两台从节点即可。主节点负责协调从节点提供存储和计算资源这样既符合官方拓扑也便于后面观察数据块在DataNode之间的分布情况。2.2 资源估算与版本选型在动手之前先算清楚内存和磁盘。Hadoop进程本身不是特别吃配置但JVM堆内存、日志、临时文件会快速占用空间。最低配是三台虚拟机各分配2GB内存主节点因为同时跑NameNode和ResourceManager建议不低于2GB从节点1.5GB到2GB都可以。如果宿主机只有8GB内存那就把从节点降到各1.5GB并且别在集群之外再跑太多大型软件。16GB内存的机器体验会好很多能同时保留集群和IDE。磁盘方面每台节点至少留20GB因为元数据、日志、临时目录都会持续写入。NameNode的元数据目录和DataNode的数据存储目录最好分开挂载别都挤在系统盘。这里有个关键参数是hadoop.tmp.dir默认指向/tmp/hadoop-hadoop而Linux的/tmp目录可能被系统定期清理一旦清掉NameNode的元数据整个集群的HDFS就起不来了。版本选型上当前课程和考证环境普遍用Hadoop 3.x配合JDK 8使用。Hadoop 3.0之后默认端口和文件结构有变化如果用旧教程的2.x路径去查进程和Web界面会对不上。安装时优先选稳定的3.3.x版本不要追求最新版教材和考证题库往往以3.2或3.3为基准。2.3 网络与系统准备hosts、防火墙、时钟同步集群节点之间靠主机名通信所以hosts文件必须先配好。三台虚拟机都要在/etc/hosts里写入另外两台节点的IP和主机名映射否则启动时会报UnknownHost或连接超时。防火墙是另一个高频问题。CentOS默认开着firewalldNameNode、DataNode、ResourceManager之间的RPC端口和Web端口都会被拦截。很多人启动成功了但Web界面打不开十有八九是防火墙策略没放行。测试环境直接停掉防火墙最省事生产环境则要按端口逐条放行。SSH免密配置、目录权限这些基础项也要提前确认。另外分布式集群各节点时间同步很重要NameNode和DataNode之间对时间偏差有容忍度但偏差过大时NameNode会进入安全模式。时间同步可以用NTP服务实验环境手动校准一次也行。2.4 安装流程概览熟悉Linux基本操作是前提。从解压JDK、配置环境变量到免密登录、修改配置文件再格式化NameNode、启动集群整个安装流程可以梳理成四个步骤环境准备、组件安装、配置修改、启动验证。每一步都是下一步的前提。3. 安装与配置四份核心配置文件与启动三步走3.1 JDK与Hadoop安装先装JDK再装Hadoop。JDK版本和Hadoop版本有对应关系Hadoop 3.3.x配JDK 8是成熟组合Hadoop 3.4以上需要JDK 11。安装包下载完成后解压到统一目录比如/usr/local再配置环境变量。# 解压Hadoop到/usr/local目录 tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/ cd /usr/local ln -s hadoop-3.3.6 hadoop # 配置环境变量 echo export JAVA_HOME/usr/local/jdk1.8.0_291 /etc/profile echo export HADOOP_HOME/usr/local/hadoop /etc/profile echo export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin /etc/profile source /etc/profile # 验证安装结果 java -version hadoop version这里解释一下几行命令的作用。解压后做软链接是为了后续升级版本不用改环境变量直接换软链接指向即可。JAVA_HOME必须写实际路径不要省略否则Hadoop的启动脚本可能找不到JDK。环境变量里同时加了bin和sbin两个目录bin目录放hdfs、yarn等客户端命令sbin目录放start-dfs.sh、stop-yarn.sh这类服务管理命令。验证阶段如果hadoop version能打印出版本信息说明Hadoop自身能识别JDK环境。这一步失败通常是JAVA_HOME路径写错或者profile没生效用source命令重新加载一次就好。3.2 SSH免密登录配置集群里主节点要远程控制从节点启动和停止DataNode、NodeManager这个过程中会反复执行SSH命令。如果每次都要输密码启动脚本就会卡在那等输入集群根本起不来所以免密登录必须在配置Hadoop之前完成。# 在主节点生成密钥对不设置密码 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 把公钥分发到所有节点包括主节点自身 ssh-copy-id hadoopmaster ssh-copy-id hadoopslave1 ssh-copy-id hadoopslave2 # 验证免密是否生效 ssh slave1 date ssh slave2 date参数说明-t rsa指定密钥类型-P 表示私钥不设置口令-f指定生成的密钥文件路径。ssh-copy-id会自动把主节点的公钥追加到目标节点的authorized_keys文件里。验证命令如果直接返回了从节点的当前时间说明免密已经通了。这里有个容易被忽略的细节主节点也要给自己分发公钥。start-dfs.sh会在主节点本地启动NameNode和SecondaryNameNode同样需要本机免密。另外.ssh目录和authorized_keys文件的权限必须正确目录是700文件是600权限过宽SSH会直接忽略这个密钥文件。3.3 四份核心配置文件与参数表Hadoop的可配置项非常多但搭建一个能正常运行的集群只需要改四个文件hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml再加一个workers文件声明从节点列表。hadoop-env.sh统一放JAVA_HOME等JVM相关环境变量Hadoop 3.x要求在这里显式指定JAVA_HOME直接在文件里找export JAVA_HOME那一行去掉注释并填入实际路径。下面是core-site.xml和hdfs-site.xml的典型配置。!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://master:9000/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property /configuration!-- hdfs-site.xml -- configuration property namedfs.namenode.name.dir/name value/data/hadoop/name/value /property property namedfs.datanode.data.dir/name value/data/hadoop/data/value /property property namedfs.replication/name value2/value /property property namedfs.namenode.http-address/name valuemaster:9870/value /property /configuration先说fs.defaultFS它决定了HDFS的入口地址客户端和集群内部通信都用它。hadoop.tmp.dir是NameNode元数据和DataNode数据块的公共父目录必须指向一个不会被系统清理的自定义目录。dfs.namenode.name.dir和dfs.datanode.data.dir以逗号分隔的话可以配置多个目录实现冗余实验环境写一个就行。dfs.replication设置副本数三节点环境如果DataNode只有两台副本数写成2刚好。dfs.namenode.http-address是NameNode的Web UI地址Hadoop 3.x默认是9870端口别再用2.x的50070端口去访问。下面是yarn-site.xml和mapred-site.xml。!-- yarn-site.xml -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.resource.memory-mb/name value1536/value /property property nameyarn.scheduler.maximum-allocation-mb/name value1536/value /property /configuration!-- mapred-site.xml -- configuration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.application.classpath/name value$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*/value /property /configurationyarn.nodemanager.aux-services必须配置成mapreduce_shuffleMapReduce任务在Shuffle阶段要依赖这个辅助服务。yarn.nodemanager.resource.memory-mb是每台NodeManager能使用的物理内存上限这里按从节点1.5GB内存估的如果给从节点分了2GB可以调成2048。yarn.scheduler.maximum-allocation-mb控制单个Container最大能申请到的内存改大也没用受nodemanager.resource.memory-mb约束。mapred-site.xml在Hadoop 3.x里不再是必须文件MapReduce默认就跑在YARN上但显式声明mapreduce.framework.nameyarn可以避免某些框架配置读取异常。application.classpath配置项能解决MR任务提交后报ClassNotFound的问题特别是3.x版本。最后是workers文件在$HADOOP_HOME/etc/hadoop/workers里写入从节点主机名。# 编辑workers文件 vi $HADOOP_HOME/etc/hadoop/workers # 写入以下内容每行一个主机名 slave1 slave2Hadoop 2.x时代这个文件叫slaves3.0之后改成了workers。如果手头教程是旧的写了slaves文件启动脚本根本不会读取结果就是DataNode和NodeManager起不来。3.4 格式化与集群启停配置文件全部就位后先启动HDFS之前需要格式化NameNode。这一步初始化文件系统的元数据目录生成fsimage和edits日志的初始版本。格式化命令只在首次搭建集群时执行不要每次遇到问题就格式化。# 在master节点执行格式化 hdfs namenode -format # 启动HDFS start-dfs.sh # 启动YARN start-yarn.sh # 检查所有角色进程是否正常 jps格式化输出里出现successfully formatted说明成功了。如果这一步报错优先检查hadoop.tmp.dir目录是否存在且当前用户有写权限。start-dfs.sh和start-yarn.sh分开执行的好处是出问题时能更快定位到底是HDFS还是YARN的问题不建议用start-all.sh一把梭。启动过程中观察jps输出主节点应该有NameNode、SecondaryNameNode、ResourceManager从节点应该有DataNode、NodeManager。哪个进程缺失对应的节点日志里一定有线索。4. 运行验证从jps检查到WordCount提交与distcp参数4.1 进程层面的验证集群启动完成第一件事不是急着传数据而是确认进程全部存活。jps是JDK自带的小工具能列出当前用户启动的所有Java进程。在每台节点分别执行jps然后对照下面的进程清单检查。节点必须出现的进程主节点 masterNameNode、SecondaryNameNode、ResourceManager从节点 slave1DataNode、NodeManager从节点 slave2DataNode、NodeManager经常有同学在三台机器上分别执行jps后跑来问为什么主节点没有DataNode。这不是故障NameNode和ResourceManager是主节点专属进程DataNode是数据节点专属进程。主节点不存业务数据块出现DataNode反而要检查clusterID是否配置混乱。如果进程缺失比如slave1没有DataNode先看对应节点的日志文件路径在$HADOOP_HOME/logs/下。日志文件命名格式一般是hadoop-hadoop-datanode-slave1.log用tail -100查看末尾内容。4.2 Web UI验证Hadoop自带Web界面这点在验证集群健康状态时非常方便。浏览器里访问两个地址http://master:9870是HDFS的管理界面能看到NameNode状态、存活DataNode列表、文件浏览http://master:8088是YARN资源调度界面能看到正在运行的Application、节点资源使用情况。打开9870页面后重点看两个信息一是Storage页面里Live Nodes数量是否与从节点数量一致二是Overview页面里Configured Capacity是否正常显示总存储空间。这里如果显示Dead Nodes说明DataNode和NameNode之间的通信有问题通常是clusterID不匹配或者网络被防火墙拦截。YARN的8088页面则能确认NodeManager上报了多少资源Active Nodes列表里应该有全部从节点。4.3 HDFS命令行操作与WordCount提交验证完进程和Web界面接下来在HDFS里建目录、传文件最后提交一个MapReduce作业。HDFS命令行跟Linux命令类似操作的是分布式文件系统。# 创建输入目录 hdfs dfs -mkdir -p /input # 上传本地文件到HDFS echo hello hadoop hello world test.txt hdfs dfs -put test.txt /input/ # 确认文件已写入 hdfs dfs -ls /input # 查看文件内容 hdfs dfs -cat /input/test.txthdfs dfs -mkdir -p是递归创建目录跟Linux的mkdir -p用法一致。hdfs dfs -put把本地文件复制到HDFS如果文件较大客户端会跟NameNode交互获取数据块位置再实际写入DataNode。这里强调一下hdfs dfs -cat读的是文件内容适合确认数据是否完整写入。文件就绪后跑第一个官方示例作业WordCount。这个程序统计输入文件里每个单词出现的次数能完整走一遍Map、Shuffle、Reduce全流程。# 提交WordCount作业 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output # 查看执行结果 hdfs dfs -cat /output/part-r-00000hadoop jar命令把Jar包提交到集群运行需要指定主类和参数。这里的wordcount是类的逻辑名称/input是输入路径/output是输出路径。输出路径不能已存在否则作业直接报错退出这是明文规则。执行过程中到8088页面能看到Application从ACCEPTED变成RUNNING再变成FINISHED进度条会有Map和Reduce的完成比例。最终输出文件part-r-00000是Reduce阶段的结果文件hdfs dfs -cat就能看到每个单词的出现次数。这个例子虽简单但验证了从上传到计算到取回结果的完整闭环。4.4 distcp参数说明集群内与集群间的数据复制工具WordCount跑通之后值得掌握的一个高级工具是distcp。它是HDFS自带的分布式复制工具用MapReduce并行拷贝海量数据比hadoop fs -cp逐文件复制的效率高一个量级。在集群间迁移数据或者做备份时distcp是最常被问到的命令之一。# 集群内复制目录 hadoop distcp -m 8 -bandwidth 50 /input /input_backup # 集群间复制需要指定完整路径地址 hadoop distcp hdfs://master:9000/source hdfs://slave1:9000/target-m参数指定并行Map任务的数量默认每个源文件会分配一个Map任务来拷贝文件很多的时候适当调大能显著缩短时间。-bandwidth参数限制单Copy任务的最大带宽单位是MB/s生产环境做集群迁移时建议加上它避免复制过程把业务流量占满。distcp还有一些特殊参数值得注意-update表示跳过目标端已经存在且大小一致的文件只拷贝新增或变化的文件-delete表示删除目标端多余的、源端没有的文件-overwrite直接覆盖目标端同名文件。-update和-delete组合使用可以达到目标目录和源目录完全一致的效果这是常用的增量同步方案。# 增量同步并清理多余文件 hadoop distcp -update -delete /source /target这个命令在生产环境很实用比如每周把生产集群的数据定期同步到报表集群第一次全量拷贝后面增量同步就行。如果Copy过程中某个文件失败重跑一次带-update的distcp即可跳过已成功的文件比手动补文件省事得多。5. 常见故障排查五个必踩的坑和对应解法5.1 重复格式化导致DataNode连接失败现象第一次搭建集群时一切正常格式化一次后FileSystem报连接异常DataNode日志里出现Incompatible clusterIDs、NameNode is not ready之类的提示。原因DataNode启动时会把自己的clusterID发给NameNode注册NameNode发现两边ID不一致直接拒绝。重复执行hdfs namenode -format会生成新的clusterID而DataNode数据目录里还保留着旧clusterID两边就对不上了。解决不要单独重新格式化NameNode要清理DataNode的元数据之后一起格式化。具体操作是停掉集群删除每台节点上dfs.datanode.data.dir目录如/data/hadoop/data里的current目录同时清理NameNode的name目录再重新格式化并启动。这个坑的根本教训是格式化不是后悔药拿它当万能重启手段用只会制造更多问题。5.2 免密登录配置后仍然要求输入密码现象ssh slave1执行后依然提示输入密码集群启动脚本卡在SSH登录阶段。原因最常见的是目录权限不达标。SSH很较真.ssh目录权限必须是700authorized_keys文件权限必须是600home目录不能是777。另外如果之前配置过错误的主机名映射公钥分发到了错误IP的节点上免密当然不会生效。解决回到主节点执行chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys再逐台重新执行ssh-copy-id。如果之前免密通中间改过IP或hosts才失灵的删掉~/.ssh/known_hosts里对应的旧条目后重试。5.3 启动后jps里只有DataNode和NodeManager没有NameNode现象start-dfs.sh执行完从节点的DataNode都起来了主节点就是没有NameNode进程。原因NameNode元数据目录不存在或者不可写。建好目录后没有用hdfs namenode -formatNameNode起不来。另一个常见原因是hadoop.tmp.dir指向了系统/tmp目录/tmp下的数据被系统清理工具删掉了启动脚本找不到元数据。解决检查/etc/hosts里的主机名解析是否正常NameNode启动时会先做主机名反向解析。如果解析没问题检查hadoop.tmp.dir的属主是不是当前用户然后重新格式化再启动。5.4 Web界面打不开但集群进程正常现象jps里所有进程都正常在宿主机浏览器却访问不了http://master:9870和http://master:8088。原因一是防火墙没放行对应端口CentOS默认firewalld会拦截外部访问。二是fs.defaultFS和dfs.namenode.http-address里写的主机名解析有问题浏览器解析不了master这个主机名自然打不开。解决测试环境直接执行systemctl stop firewalld并禁用开机自启最省事。宿主机浏览器如果解析不了master就在宿主机hosts文件里加一条解析记录指向虚拟机的IP。注意8088和9870两个端口都要能访问防火墙一般需要同时放行。5.5 Container内存不足WordCount提交后一直卡在ACCEPTED现象作业能提交到YARN但永远停在ACCEPTED状态日志里报Physical memory usage is very high或者Container is running beyond memory limits。原因虚拟机的物理内存不够而yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb参数配得过高。作业申请的内存容器实际选不出来集群调度器一直在等待可用资源。解决把yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb都调低同时把mapreduce.map.memory.mb和mapreduce.reduce.memory.mb也降下来保持各级参数不超过NodeManager物理内存上限。对于纯学习环境还可以把yarn.nodemanager.vmem-check-enabled设为false跳过虚拟内存检查。这套参数如果不知道怎么配有个经验值NodeManager内存1.5GB时每个作业容器给512MBNodeManager是2GB时给768MB比较稳妥。6. 进阶要点集群自检命令、调优方向与考证衔接6.1 一条命令组合快速自检集群运行一段时间后进程和Web UI都正常不代表块健康。HDFS有一个fsck命令专门检查文件块的完整度和副本数量配合dfsadmin -report能快速掌握集群健康状况。# 查看DataNode节点和存储容量概览 hdfs dfsadmin -report # 检查根目录下所有文件的数据块分布是否正常 hdfs fsck / -files -blocks # 查看YARN节点资源和运行中的应用 yarn node -listdfsadmin -report直接列出全部DataNode的地址、状态、剩余空间一眼能看出有没有节点掉线。fsck输出里会给出每份文件的副本数和健康状态如果Healthy Blocks有数值说明某份数据副本数不足需要干预。yarn node -list能看到每个NodeManager的注册状态和资源量。这三条命令我一般组合使用搭建完交付前会强制跑一遍。6.2 调优参数与适用场景集群能跑之后针对数据规模调整参数是下一步。数据块大小和副本数是最先接触的两个维度。参数配置位置适用场景dfs.blocksizehdfs-site.xml默认128MB小文件多调小为32MB大文件顺序读可调大dfs.replicationhdfs-site.xml实验环境2生产环境至少3mapreduce.map.memory.mbmapred-site.xml单个Mapper能用的内存512MB起步yarn.nodemanager.resource.memory-mbyarn-site.xmlNodeManager物理内存上限按机器内存估算dfs.blocksize直接写在hdfs-site.xml中默认值是128MB。如果集群里大量小文件128MB的块设计会让元数据膨胀调小到32MB可以减少NameNode的压力。副本数在追求存储效率的测试环境可以是1但学习阶段最好用2或3这样才能观察到同一份文件在多个DataNode上的分布。6.3 考证与面试衔接要点这份PDF对应的1X大数据平台运维与开发考证方向集群运行这一章通常被拆成几个操作型考点集群的安装部署与启停、HDFS基本运维命令、作业提交与状态查看、基础故障处理。考试形式大概率是给定一个运行现场让你通过命令判断集群状态并恢复。面试里经常被追问的也是这一章的实践细节启动集群的完整流程、如何确认集群健康、distcp做数据迁移时怎么保证一致性、格式化NameNode的边界条件。能把WordCount从提交到完成的整个过程讲清楚比背一堆架构名词更有说服力。说句实在话我第一次搭集群的时候把格式化当成万能钥匙每遇到问题就重新格式化结果DataNode和NameNode的clusterID对不上整个集群反复重建。从那以后每次搭集群都强制走一遍固定顺序先hosts、再免密、再改配置文件、格式化前检查hadoop.tmp.dir里有没有旧数据启动后先看jps再打开Web UI确认节点数最后必须提交一个WordCount作业验证整套链路。希望这份《第5章 Hadoop集群运行》PDF能帮你把这一步走稳。本文还有配套的精品资源点击获取