尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Hadoop核心架构与集群搭建:从HDFS到YARN的完整实践指南

发布时间:2026/9/26 5:48:56

资讯中心
01
ARTICLE

Hadoop核心架构与集群搭建:从HDFS到YARN的完整实践指南

Hadoop核心架构与集群搭建:从HDFS到YARN的完整实践指南
简介这是一份 Hadoop 入门介绍演示文稿专门面向刚接触大数据或准备系统学习分布式框架的初学者用约三十页的内容梳理 Hadoop 生态的核心组成、运行机制与设计思路。压缩包仅包含 1 个文件类型为 PowerPoint 文档整体大小约 1.42MB轻量易取用既可用于课堂讲解也便于自学时对照翻阅。内容围绕“什么是 Hadoop”展开重点介绍了 HDFS 分布式文件系统中 NameNode、DataNode、Client 三个角色及其文件读写与块复制流程MapReduce 中 Map 与 Reduce 的分工HBase 的列式数据库模型ZooKeeper 的协调机制以及 Pig 的类 SQL 数据处理语言并简单提及 Mahout 与 Hive 在生态中的延伸作用。全稿配有大量架构图、数据模型表和操作流程举例各组件的层次关系一目了然能帮助初学者快速建立对大数据存储与计算的整体认识。目前已有 882 人学习适合用于技术分享、课程报告或作为后续阅读源码前的入门铺垫。1. Hadoop简介PPT别把入门讲义当科普翻翻就过Hadoop这个词在简历、课程设计和数据仓库面试里出现的频率几乎和“大数据”本身一样高。但真正能把HDFS、MapReduce和YARN三者之间的关系讲成一条完整链路的人其实不多。这份《Hadoop简介PPT》表面上像一份入门讲义实际内容却覆盖了从核心架构到伪分布式搭建再到作业提交到YARN的完整闭环适合三类人准备大数据岗位面试的应届生、要用Hadoop做课程设计并需要答辩的同学、以及想在公司局域网里从零搭一套集群练手的一线开发。它不解决生产级调优问题但能把“Hadoop到底是什么”这个最容易被跳过的地基扎实补上。2. Hadoop核心架构HDFS、MapReduce与YARN的三层拆解2.1 HDFS文件切成128MB块之后存储的完整链路HDFS的基本设计是把数据拆成固定大小的块。Hadoop 2.x开始默认块大小是128MB1.x时代是64MB。一个1GB的文件会被切成8个块每个块默认3个副本分布在不同的机器上。这个设计解决两个实际问题单台机器磁盘装不下大文件以及磁盘故障导致的数据丢失。块大小不是拍脑袋定的块设小了元数据膨胀、任务数量爆炸块设大了MapReduce的并行度上不去。128MB是在NameNode内存开销和任务并行度之间取的一个平衡值。写数据时客户端把文件按块切分向NameNode申请存放位置拿到一组DataNode列表后按“管线”方式依次写入。副本数为3时就分三步客户端写第一个DataNode第一个DataNode边接收边转发给第二个第二个再转发给第三个最后沿原路返回确认。伪分布式里只有一个DataNode管线退化成单节点写入但整体逻辑不变。读数据时客户端从NameNode拿到块位置列表选离自己最近的副本直接读取NameNode本身不参与数据传输它只维护元数据。理解NameNode的元数据内存模型很重要。一个文件、目录或块的记录大约占150字节元数据8GB内存的NameNode大约能支撑5000万条记录。很多团队做到后面发现集群“文件数太多导致NameNode Full GC”就是没算这笔账。副本放置策略也值得讲清楚第一个副本放在客户端所在节点第二个副本放在同一机架的不同节点第三个副本放在不同机架。这套策略兼顾了写入吞吐和故障容错。副本集中在同一机架机架交换机挂了全丢放得太散跨机架写流量又把网络带宽吃满。2.2 MapReduce计算搬到数据旁边的经典模型与代价MapReduce的核心思想是“移动计算优于移动数据”。早期Hadoop版本里MapReduce同时承担计算执行和资源调度两个角色运行过程分Map阶段、Shuffle和Reduce三个阶段。用最经典的WordCount举例。输入一堆文本文件Map阶段每个Worker把每行按空格切词输出键值对(key单词, value1)Shuffle阶段框架自动对key排序、分组同一个key的数据被合并传输到同一个ReducerReduce阶段对每个key的value列表累加输出最终词频。你只需要写map函数和reduce函数分布式排序、网络传输、节点容错都由框架处理。这个模型的贡献在于证明了“不理解分布式细节也能写出可并行化的计算逻辑”。但代价同样直接每轮MapReduce几乎都要读写磁盘中间结果落盘导致迭代计算性能很差。Map端输出不是直接写磁盘而是先进环形缓冲区默认大小100MB达到80%阈值时启动SpillSpill前做分区和排序最终合并成输出文件。这套机制是后面面试的高频区也是理解Spark为什么比MapReduce快的关键参照。PPT里还应该理解Combiner和Partitioner的角色。Combiner是Map端的“预Reduce”能减少跨节点传输的数据量但必须是可交换、可结合的否则会改变最终结果。Partitioner决定哪个key去哪台Reducer默认按key哈希取模数据倾斜严重时需要自定义Partitioner。这两点属于“概念不多但实战必考”的细节。2.3 YARN资源调度从MapReduce剥离之后是谁在管Hadoop 2.0把资源管理从MapReduce里剥离成独立组件YARN从此MapReduce只负责计算资源调度交给专门的角色。YARN里三个关键角色分工明确ResourceManager是全局调度者负责接收作业请求、分配容器、监控集群资源NodeManager运行在每个节点负责汇报资源并启动容器里的任务ApplicationMaster是每个作业的“项目经理”向RM申请资源并跟踪任务进度。作业提交到YARN的流程是面试高频考点。客户端把作业提交给ResourceManagerRM分配一个Container启动ApplicationMasterAM再向RM异步申请一批Container拿到资源后在对应NodeManager上启动Task任务全部完成后AM注销自己并释放所有Container。这套流程理解透以后打开YARN的Web UI就能看懂每个Application的实时状态排错时也知道该去哪里看日志。调度器方面FIFO简单但容易发生队头阻塞Fair Scheduler能让多个作业公平分享资源Capacity Scheduler则按队列预分配资源是目前Hadoop默认的企业级选择。PPT讲到这里就够了再深就进入生产调优范畴。2.4 版本差异2.x和3.x讲概念时不能混用新手最容易翻车的地方是照着旧教程配新版本。Hadoop 3.x和2.x有几个关键差异要分开讲。对比项Hadoop 2.xHadoop 3.x默认块大小128MB128MB支持配置NameNode Web UI端口500709870DataNode Web UI端口500759868最低JDK版本JDK 7/8JDK 8/11纠删码不支持支持可降低冗余存储开销多NameNode联邦基础支持更成熟Hadoop 3.x引入纠删码后存储冗余策略有了新选项副本方式至少3倍冗余纠删码可以用更少的额外存储获得同样的容错能力。但纠删码的代价是编码解码CPU开销和更长的故障恢复时间适合冷数据存储。面试如果被问到“Hadoop 3.x比2.x改了什么”把端口、JDK、纠删码三点答出来基本就够了。3. 从零搭建Hadoop单机、伪分布式与完全分布式的落地路径3.1 前置准备JDK版本、SSH免密与专用用户Hadoop是Java写的JDK是硬前提。Hadoop 2.x常用JDK 8Hadoop 3.3以上支持JDK 11但生产环境大量部署仍然集中在JDK 8。建议先确认Hadoop版本对应的JDK再动手版本不匹配会在启动时报UnsupportedClassVersionError这是最常见的提前翻车点。sudo apt update sudo apt install openjdk-8-jdk java -version # 添加专用用户避免直接用root跑集群 sudo useradd -m hadoop -s /bin/bash sudo passwd 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逻辑说明ssh-keygen -P 表示空密码测试集群可以这么干生产环境建议用密钥配ssh-agent管理。chmod 600保证私钥权限OpenSSH对权限过宽的密钥文件会直接拒绝加载这是SSH免密失败最常见的原因之一。SSH免密决定后面能不能一条命令启动整个集群完全分布式下还得把master的公钥分发到所有slave节点。3.2 四个核心配置文件core-site.xml到mapred-site.xml的职责边界Hadoop配置体系说穿了是四个XML加一个环境变量文件core-site.xml管全局hdfs-site.xml管存储yarn-site.xml管调度mapred-site.xml管计算框架接入YARN的方式。伪分布式最小配置如下。!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/home/hadoop/hdata/tmp/value /property /configuration!-- hdfs-site.xml -- configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/home/hadoop/hdata/namenode/value /property property namedfs.datanode.data.dir/name value/home/hadoop/hdata/datanode/value /property /configuration!-- yarn-site.xml -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.env-whitelist/name valueJAVA_HOME,HADOOP_HOME,HOME/value /property /configuration逻辑说明core-site.xml里的fs.defaultFS是HDFS入口地址hadoop.tmp.dir如果不单独指定会默认落在/tmp下Linux重启清空后NameNode元数据丢失集群直接起不来这是教科书级的坑。hdfs-site.xml里dfs.replication在伪分布式必须设为1否则副本数默认3但只有1个DataNode数据会一直处于副本不足状态。参数说明dfs.namenode.name.dir和dfs.datanode.data.dir分别存元数据和数据块强烈建议放独立数据盘别跟系统盘混在一起。yarn-site.xml里的mapreduce_shuffle是MapReduce在Shuffle阶段通过NodeManager传数据的必需服务漏配会直接报Shuffle服务未注册。3.3 三种部署方式实验选伪分布式集群选完全分布式部署模式进程数量适用场景单机模式 Local Mode不启动任何守护进程本地调试MapReduce逻辑伪分布式 Pseudo-DistributedNameNode、DataNode、ResourceManager、NodeManager都在一个节点单机学习、开发测试完全分布式 Fully DistributedMaster和Slave分工至少三台机器真实集群、课程设计演示顺序建议是先跑通单机模式理解作业执行再上伪分布式把进程、端口、日志的位置搞清楚最后扩展到完全分布式。直接跳过前两步上三台机器出错时连日志该看哪个文件都不知道。伪分布式启动前有一道必做工序格式化NameNode。hdfs namenode -format逻辑说明只有首次启动才需要格式化。格式化会在dfs.namenode.name.dir下生成fsimage文件记录文件系统初始状态。重复格式化会丢失原有元数据所有文件的块信息全部清空生产环境等于事故。注意格式化之前在core-site.xml里把hadoop.tmp.dir指到非系统目录否则格式化结果又会写到/tmp下。3.4 启动与验证jps进程、Web UI和端口检查伪分布式启动命令start-dfs.sh start-yarn.sh jps逻辑说明start-dfs.sh启动NameNode和DataNodestart-yarn.sh启动ResourceManager和NodeManager。jps输出里这4个进程都在基本说明启动成功。完全分布式下jps是快速检查各台机器进程状态的手段但jps只能说明JVM进程活着不能说明服务健康。真正要确认的是Web UI。Hadoop 3.x访问http://localhost:9870看NameNode页面http://localhost:9868看DataNode状态YARN的页面在http://localhost:8088。另外注意hdfs-site.xml里dfs.namenode.http-address默认绑在0.0.0.0:9870如果服务器有防火墙或云安全组记得放行9870、9868、8088三个端口。很多人卡在“进程全在但页面打不开”最后排查发现是安全组没配。4. 开发环境整合IDEA、Docker镜像与ZooKeeper HA流程4.1 Windows下用IDEA连Hadoopwinutils和HADOOP_USER_NAMEWindows本机写代码连远程Hadoop集群第一个拦路虎是winutils.exe。Hadoop在Windows上执行本地命令时依赖这个工具缺失会报Failed to locate the winutils binary in the hadoop binary directory。常见做法是下载和Hadoop版本严格对应的winutils放到独立目录并设置环境变量set HADOOP_HOMED:\hadoop-3.3.4-winutils set PATH%HADOOP_HOME%\bin;%PATH%逻辑说明IDEA里写MapReduce或HDFS客户端代码本机只需要客户端jar包和工具。winutils就是Windows环境下隐藏的坑它还顺带解决NativeIO$Windows相关的权限检查异常。IDEA里创建工程时引入hadoop-client依赖dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-client/artifactId version3.3.6/version /dependency参数说明在IDEA的运行配置里设置HADOOP_USER_NAMEroot可以模拟Linux用户身份避免访问HDFS时Permission denied。这个环境变量只影响客户端不需要在服务端改任何配置。4.2 Docker镜像快速搭集群实验够用但不能直接照搬生产Docker方式是目前最省事的实验路径。拉取Apache官方镜像用docker-compose定义NameNode和DataNode即可。services: namenode: image: apache/hadoop:3.3.6 hostname: namenode ports: - 9870:9870 environment: - HADOOP_USER_NAMEroot command: [hdfs, namenode] datanode: image: apache/hadoop:3.3.6 hostname: datanode environment: - HADOOP_USER_NAMEroot command: [hdfs, datanode]逻辑说明docker-compose把多容器编排进同一张网络容器间通过service名互相解析。NameNode的9000端口和9870端口在容器内部通信不需要全暴露只有需要从宿主机访问的页面才做端口映射。官方镜像里的Hadoop是精简版只装了HDFS和YARN核心组件MapReduce自带示例不一定齐全做完整WordCount演练时建议用包含更多组件的社区镜像比如bde2020/hadoop系列。参数说明容器退出后数据默认丢失。挂载volume把namenode和datanode的目录持久化实验数据才不会随容器销毁。Docker方式适合快速验证架构概念生产环境不建议直接用这种镜像官方精简版缺少大量运维配套能力。4.3 Hadoop与ZooKeeper整合HA集群的关键配置ZooKeeper在Hadoop里的主要角色是给NameNode做高可用。NameNode是集群单点挂了整个集群不可用。两个NameNode通过ZooKeeper协调自动故障切换Active节点和Standby节点都连ZooKeeper谁获得锁谁当Active。核心配置在hdfs-site.xml里property namedfs.nameservices/name valuemycluster/value /property property namedfs.ha.namenodes.mycluster/name valuenn1,nn2/value /property property namedfs.client.failover.proxy.provider.mycluster/name valueorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider/value /property property nameha.zookeeper.quorum/name valuezk1:2181,zk2:2181,zk3:2181/value /property逻辑说明dfs.nameservices给整个HA集群命名dfs.ha.namenodes.mycluster列出集群内的NameNode标识ha.zookeeper.quorum指向ZooKeeper集群地址。ZKFailoverController进程负责连接ZooKeeper、监控NameNode状态并执行主备切换。参数说明ZooKeeper至少部署3个节点才能形成有效多数。2个节点在脑裂时无法判断谁持有领导权等于白搭。如果只是学习可以先搭一个单节点ZooKeeper跑通流程但要知道生产环境单节点ZooKeeper本身就是隐患。4.4 作业提交到YARN的完整流程用hadoop jar提交作业时完整链路是客户端JobClient向ResourceManager提交RM返回ApplicationId并分配第一个Container启动ApplicationMasterAM向RM异步申请资源RM依据各NodeManager心跳信息分配ContainerAM把任务调度到Container上执行完成后AM注销自己。hadoop jar wordcount.jar WordCount /input /output逻辑说明/input和/output都是HDFS路径。输出目录在执行前必须不存在否则框架直接报FileAlreadyExistsException。这个不起眼的细节经常被新手忽略跑了两次同样的命令第二次就失败。Java代码里对应的配置Configuration conf new Configuration(); conf.set(fs.defaultFS, hdfs://localhost:9000); conf.set(mapreduce.framework.name, yarn); Job job Job.getInstance(conf, wordcount); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1);逻辑说明代码里只配置了入口、Mapper、Reducer和输入输出路径其余细节由框架处理。mapreduce.framework.nameyarn指定作业提交到YARN而不是本地跑这个参数漏了的话作业会在客户端本地执行集群上完全看不到任务。参数说明waitForCompletion(true)会阻塞并打印进度返回true表示执行成功。生产环境建议把输入输出路径参数化不要硬编码。5. 避坑手册Hadoop搭建与运行的五个常见问题5.1 DataNode起不来clusterID不一致引发的拒绝启动现象start-dfs.sh执行后NameNode正常DataNode进程闪退日志报Initialization failed for Block pool或Incompatible clusterIDs。原因格式化NameNode之后DataNode的data目录会记录集群的clusterID。如果你重复格式化NameNode新生成的clusterID变了而DataNode里存的还是旧值两边的clusterID对不上DataNode拒绝启动。这个坑在练习阶段频率高因为很多人会反复格式化“重来一次”。解决停掉所有服务删除NameNode的name目录和DataNode的data目录重新格式化NameNode再启动。注意这个操作在实验环境可以生产上等于清空所有数据。更温和的做法是手动把NameNode的current/VERSION里的clusterID同步到DataNode的current/VERSION里然后重启DataNode。5.2 SSH免密失败权限不对时启动服务会卡死现象ssh localhost每次都要输入密码start-dfs.sh远程启动DataNode时长时间卡住或直接失败。原因authorized_keys文件权限不对、.ssh目录属主不是当前用户或者SELinux强制访问控制拦截了SSH。很多教程只说了配免密没人强调权限细节Ubuntu默认umask可能会产生644权限的authorized_keys。解决执行chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys再chown -R hadoop:hadoop ~/.ssh。SELinux环境下检查getenforce输出可以临时setenforce 0验证是不是它的锅但生产不要关SELinux正确做法是restorecon -R -v ~/.ssh恢复上下文。5.3 NameNode目录权限不足格式化前先改属主现象NameNode日志报Permission denied但文件系统层面看目录权限没问题。原因dfs.namenode.name.dir指定的目录是用root权限创建的后续用hadoop用户启动时无法写入。伪分布式环境这个错很常见因为大家都习惯用sudo mkdir一次性建目录。解决把整个HDFS数据目录的属主改成hadoop用户再格式化sudo chown -R hadoop:hadoop /home/hadoop/hdata格式化之前就要做这一步否则fsimage文件根本生成不出来。5.4 Windows提交作业权限被拒winutils和HADOOP_USER_NAME的坑现象IDEA里本地WordCount正常提交到集群报Permission denied: userAdministrator, accessWRITE, inode/user/root。原因Windows下Hadoop客户端默认拿当前系统用户名作为HDFS访问用户Administrator在Linux集群上没有权限。另一种情况是winutils缺失导致用户信息获取失败。解决提交前设置环境变量HADOOP_USER_NAMEroot或在代码里加System.setProperty(HADOOP_USER_NAME, root)。同时检查winutils版本是否与Hadoop严格对应。这套组合在Windows下能解决九成权限类报错。5.5 YARN容器反复被杀内存参数超了物理机配置现象作业提交到YARN后Map任务一直失败重试日志报Container killed on request. Exit code is 143或GC overhead limit exceeded。原因伪分布式下单台机器默认的yarn.nodemanager.resource.memory-mb值过高Container启动后直接把机器内存吃满被系统OOM Killer杀掉。很多人以为默认值就一定合理实际上默认按8GB以上内存配置小机器必然翻车。解决在yarn-site.xml显式调低property nameyarn.nodemanager.resource.memory-mb/name value2048/value /property property nameyarn.scheduler.maximum-allocation-mb/name value2048/value /property property nameyarn.scheduler.minimum-allocation-mb/name value256/value /property逻辑说明resource.memory-mb定义NodeManager能分配给所有Container的总内存上限调度器最小和最大分配值必须在这个范围内。改完重启YARN服务再提交作业。这类“Container被杀”问题十有八九不是代码问题是资源没给够。6. 拿这份PPT去面试和答辩一套讲述框架6.1 面试时把shuffle细节讲出层次面试官问“说说MapReduce的执行流程”大多数人都能背出Map、Shuffle、Reduce三个阶段。但真正能加分的做法是从环形缓冲区切入Map端输出先进内存环形缓冲区默认100MB达到80%阈值触发SpillSpill前做分区和排序最后合并成输出文件。讲到这个层级面试官基本能判断你是真做过还是只背过PPT。再往下可以提Combiner和Partitioner的区别以及数据倾斜时怎么处理——自定义Partitioner或加一层预处理。6.2 课程设计答辩用一个闭环讲清整个系统如果课程设计基于Hadoop做应用比如交通信息分析系统答辩时最忌讳一上来讲技术栈。我建议按“数据从哪来、存到哪、算在哪、结果去哪”四段式讲数据采集后写入HDFS用MapReduce或Hive做统计分析结果导出到MySQL配合Web页面展示整个过程配上这份PPT里的架构图。先讲清业务闭环再讲技术选型理由最后落在一两个具体指标的实现细节上。这样既有高度又有深度。6.3 演示节奏三张图撑起十分钟短时间演示时准备三张图就够了HDFS写入流程图、YARN作业提交流程图、Hadoop版本对比表。第一张图讲清存储第二张图讲清计算调度第三张图展示你对版本差异的敏感度。每张图用两分钟讲完剩下时间留给自己操作一个WordCount的完整跑通。这套框架我从准备第一份Hadoop答辩用到现在。记得第一次搭集群时我反复格式化NameNode导致DataNode起不来折腾了整整一晚上最后才发现是clusterID不一致。从那以后每搭一次集群我都强制走一遍“先改属主、再格式化、再验证ssh免密”的顺序宁可多花五分钟也不愿意再翻一次车。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。