ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hadoop简介PPT:从架构图到伪分布式搭建与避坑指南

Hadoop简介PPT:从架构图到伪分布式搭建与避坑指南 简介这份Hadoop简介PPT面向大数据入门学习者与需要快速梳理知识框架的开发者用一页页图文讲清Hadoop是什么、由哪些组件构成以及各自解决什么问题。内容围绕HDFS、MapReduce、HBase、ZooKeeper与PIG展开涵盖NameNode、DataNode、Client的职责划分文件写入、读取与文件块复制的流程Map与Reduce两阶段的任务分解与结果汇总以及HBase的列导向存储、时间戳版本机制和ZooKeeper的命名空间、暂时节点与监视机制同时补充Mahout、Hive等周边组件与Hadoop可扩展、经济、可靠、高效的设计特点。资源包共1个文件为单个ppt格式大小约1.42MB轻量便于随课演示或自学翻阅。目前已有882人学习下载适合作为课堂讲义、面试复习或搭建知识体系的入门参考。1. 从一份 Hadoop 简介 PPT 说起它到底能帮你省下多少翻文档的时间如果你正在准备大数据方向的课程设计答辩、内部技术分享或者刚接手一个 Hadoop 集群需要快速给团队做一次入门培训那你大概率经历过这样的场景打开官方文档几十个模块扑面而来HDFS、YARN、MapReduce、Common 之间的关系还没理清就要开始讲架构图了。这份 Hadoop 简介 PPT 就是为这种场景准备的——它不是一份安装手册也不是源码解析而是一份把 Hadoop 生态的核心概念、组件关系和典型应用场景压缩成可讲解、可演示、可复用的幻灯片资源。它适合三类人第一类是需要做课程设计或毕业答辩的学生直接拿来做框架参考省去从零画架构图的时间第二类是需要给团队做内部培训的工程师PPT 里的组件分层图和数据流示意可以直接复用第三类是想快速了解 Hadoop 全貌但不想啃几百页文档的开发者用它建立第一层认知地图。但要注意这份 PPT 是“简介”性质它不会教你如何配置core-site.xml里的每一个参数也不会覆盖 HA 故障切换的细节。它的价值在于帮你把 Hadoop 的骨架讲清楚让你在后续动手搭建伪分布式或完全分布式集群时脑子里有一张清晰的地图。我见过太多人一上来就扎进安装教程结果namenode格式化了三次、datanode还是起不来最后发现是ssh免密没配好。如果先花半小时把这份 PPT 过一遍理解 HDFS 的NameNode和DataNode各自负责什么、YARN 的ResourceManager和NodeManager怎么协作再去动手排错效率会高很多。接下来的内容我会围绕这份 PPT 能覆盖的知识点结合伪分布式搭建、Docker 镜像、HA 架构和 DistCp 参数这些实际场景把“看 PPT 学概念”和“动手跑集群”之间的那条沟填上。2. Hadoop 核心组件拆解PPT 里那张架构图到底在画什么2.1 HDFS 的块、副本与 NameNode 内存账PPT 里通常会有一张 HDFS 架构图左边是NameNode右边是一排DataNode中间用箭头标着“元数据”“块报告”。很多人看完就记住了“一个老大带一群小弟”但真到调优的时候连dfs.blocksize默认是 128MB 还是 256MB 都说不清。HDFS 的设计逻辑其实就三条文件被切成固定大小的块每个块默认存三份副本NameNode在内存里维护整个文件系统的目录树和块映射。为什么块大小是 128MB这是权衡寻址开销和传输效率的结果。块太小NameNode内存压力大因为每个块都要占一条元数据记录块太大MapReduce 任务并行度上不去因为一个块只能由一个 map 任务处理。在 PPT 里可能只写了一句“默认 128MB”但你在实际搭建伪分布式时如果虚拟机磁盘只有 40GB跑几个测试文件没问题一旦要模拟真实数据量就得考虑dfs.replication设成 1否则三副本直接把磁盘写满。NameNode的内存账是另一个容易被忽略的点。每存一个块NameNode大约消耗 150 字节内存。假设你有 1 亿个块那就是 15GB 堆内存打底。PPT 里不会展开这个计算但你在做课程设计答辩时如果老师问“为什么 NameNode 需要大内存”你得能答上来。常见做法是先估算总数据量除以块大小得到块数再乘以 150 字节最后留出 30% 余量给NameNode自身运行。2.2 YARN 的资源调度从 PPT 的流程图到实际提交任务PPT 里讲 YARN 通常会画一条任务提交链路客户端提交应用到ResourceManagerResourceManager找NodeManager启动ApplicationMasterApplicationMaster再向ResourceManager申请容器跑任务。这条链路看着简单但真到提交一个 MapReduce 作业时卡在ACCEPTED状态不动是家常便饭。我一般会先检查三个地方ResourceManager的 Web UI默认 8088 端口里队列资源是不是满了NodeManager的日志里有没有“Container exited with a non-zero exit code”ApplicationMaster的日志里是不是在等某个不存在的资源。PPT 不会告诉你这些排查路径但如果你理解了 YARN 的调度流程就知道该去哪个组件的日志里找线索。还有一个常见误区把 YARN 的yarn.nodemanager.resource.memory-mb设得比物理内存还大。PPT 里可能只写了“配置 NodeManager 可用内存”但实际搭建时这个值要留出给操作系统和其他进程的空间。我通常按物理内存的 80% 来设比如 16GB 内存的机器设成 12288MB。如果设成 16384MB跑几个容器之后系统就开始 OOMNodeManager会被内核杀掉表现为节点“失联”。2.3 MapReduce 的数据流Shuffle 为什么是性能黑匣子PPT 里讲 MapReduce 一般会画一张图输入分片 → Map → Shuffle → Reduce → 输出。Shuffle 阶段通常用一个箭头带过但实际生产中80% 的性能问题都出在这个“黑匣子”里。Shuffle 要做的事包括Map 端输出写入环形缓冲区缓冲区达到阈值后溢写到磁盘Reduce 端从各个 Map 节点拉取属于自己的分区数据最后归并排序。PPT 不会展开的参数比如mapreduce.task.io.sort.mb默认 100MB和mapreduce.map.sort.spill.percent默认 0.8直接决定了溢写频率。如果 Map 输出数据量大缓冲区设得太小就会频繁溢写磁盘I/O 成为瓶颈。我一般会把io.sort.mb调到 200~300MB同时把spill.percent降到 0.7给后台溢写线程留更多时间。这些调优动作的前提是你得先理解 Shuffle 到底在干什么——而这份 PPT 的价值就是帮你把这张数据流图刻在脑子里后面调参时才知道每个参数在哪个环节起作用。3. 从 PPT 到动手伪分布式搭建与 Docker 镜像两条路3.1 伪分布式搭建配置文件里最容易写错的四个参数看完 PPT 对 HDFS 和 YARN 的介绍下一步通常是搭一个伪分布式环境来验证概念。伪分布式就是所有守护进程跑在一台机器上用localhost通信。我见过太多人卡在datanode起不来最后发现是core-site.xml里的fs.defaultFS写成了localhost:9000而不是hdfs://localhost:9000。下面是一份最小可用的配置清单基于 Hadoop 3.x 版本。!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value !-- 注意必须带 hdfs:// 前缀否则 NameNode 启动后客户端连不上 -- /property property namehadoop.tmp.dir/name value/opt/hadoop/tmp/value !-- 默认在 /tmp 下重启机器就丢生产环境必须改到持久化目录 -- /property /configuration!-- hdfs-site.xml -- configuration property namedfs.replication/name value1/value !-- 伪分布式只有一台 DataNode设成 3 会导致副本永远达不到要求 -- /property property namedfs.namenode.name.dir/name value/opt/hadoop/data/namenode/value /property property namedfs.datanode.data.dir/name value/opt/hadoop/data/datanode/value /property /configuration!-- mapred-site.xml -- configuration property namemapreduce.framework.name/name valueyarn/value !-- 不设这个MapReduce 会跑在本地模式YARN 根本用不上 -- /property /configuration!-- yarn-site.xml -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value !-- 拼写错误是高频翻车点必须是 mapreduce_shuffle 而不是 mapreduce.shuffle -- /property property nameyarn.nodemanager.resource.memory-mb/name value4096/value !-- 根据虚拟机实际内存调整设太大 NodeManager 会被系统杀掉 -- /property /configuration配置写完后格式化NameNode是第一步hdfs namenode -format。注意这个命令只能执行一次重复执行会导致clusterID不一致DataNode拒绝启动。如果手滑格式化了两次要么删掉dfs.namenode.name.dir和dfs.datanode.data.dir下的所有数据重新来要么手动把DataNode的clusterID改成和NameNode一致。启动顺序也有讲究先start-dfs.sh再start-yarn.sh。用jps检查进程应该看到NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager五个进程。少一个就去对应的日志目录里翻logs文件夹下按组件名开头的.log文件会告诉你缺了什么。3.2 Docker 镜像跑 Hadoop快速验证与隔离环境如果你不想在宿主机上装 Java 和 Hadoop或者需要频繁重置环境Docker 镜像是一条更干净的路。常见做法是拉一个带 SSH 和 Hadoop 的基础镜像比如sequenceiq/hadoop-docker但要注意这类镜像的 Hadoop 版本可能偏旧。更稳妥的方式是自己写一个Dockerfile基于openjdk:8-jdk或eclipse-temurin:8-jdk把 Hadoop 压缩包解压进去配好环境变量和 SSH 免密。# 拉取一个轻量级 Hadoop 镜像以实际可用的镜像名为准 docker pull sequenceiq/hadoop-docker:2.7.1 # 启动容器并映射端口 docker run -it --name hadoop-test \ -p 50070:50070 \ -p 8088:8088 \ -p 9000:9000 \ sequenceiq/hadoop-docker:2.7.1 /etc/bootstrap.sh -bash进入容器后jps应该能看到NameNode、DataNode、ResourceManager、NodeManager已经在跑。这种镜像的好处是开箱即用适合快速验证 PPT 里讲的架构图——你可以直接在容器里执行hdfs dfs -mkdir /test、hdfs dfs -put上传文件然后通过50070端口在浏览器里看块分布。但坑也很明显容器重启后数据默认丢失除非你把dfs.namenode.name.dir和dfs.datanode.data.dir挂载到宿主机卷。另外容器内的localhost和宿主机的localhost不是一回事如果你在宿主机上写 Java 代码连容器里的 HDFSfs.defaultFS要写成hdfs://容器IP:9000而不是localhost:9000。3.3 头歌环境下的安装与配置路径和权限的坑如果你是在头歌EduCoder这类在线实验平台上做 Hadoop 安装与配置最大的不同是权限受限很多目录不能写。PPT 里讲的“解压到/usr/local/hadoop”在头歌环境里可能行不通因为/usr/local通常需要 root 权限。我一般会先whoami看当前用户然后echo $HOME确认家目录把 Hadoop 解压到~/hadoop下。# 头歌环境下推荐的家目录安装方式 cd ~ tar -zxvf /path/to/hadoop-3.x.tar.gz -C ~/ mv ~/hadoop-3.x ~/hadoop # 配置环境变量注意不要覆盖已有的 PATH echo export HADOOP_HOME~/hadoop ~/.bashrc echo export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ~/.bashrc source ~/.bashrc # 验证 hadoop version头歌环境还有一个坑/etc/hosts可能不允许修改导致localhost解析异常。如果start-dfs.sh报“Connection refused”先ping localhost看通不通再cat /etc/hosts确认127.0.0.1 localhost这一行存在。如果不存在且没权限改可以在hadoop-env.sh里把HADOOP_COMMON_LIB_NATIVE_DIR和JAVA_HOME显式指到家目录下的路径绕过一些默认查找逻辑。4. 避坑与排查从 PPT 到集群那些没人告诉你的翻车现场4.1 现象DataNode 启动后立刻消失jps 里看不到原因最常见的是clusterID不匹配。NameNode格式化时生成一个clusterID写在dfs.namenode.name.dir/current/VERSION里DataNode启动时会去dfs.datanode.data.dir/current/VERSION里读自己的clusterID两者不一致就直接退出。另一种可能是dfs.datanode.data.dir指向的目录权限不对DataNode进程没有写权限。解决先比对两个VERSION文件里的clusterID。如果不一致停掉所有进程删掉DataNode的数据目录重新hdfs namenode -format后再启动。如果是权限问题chown -R 当前用户:当前用户 /opt/hadoop/data把目录所有权改过来。注意hdfs namenode -format会清空NameNode元数据生产环境千万别随便执行。4.2 现象YARN 提交任务后一直卡在 ACCEPTED原因ResourceManager的调度队列资源不足或者NodeManager没有向ResourceManager注册成功。PPT 里讲 YARN 架构时通常不会提队列容量配置但默认的default队列内存上限可能只有 8192MB而你提交的任务需要的容器内存超过了剩余可用资源。解决打开8088端口的 Web UI看“Scheduler”页面里default队列的“Used”和“Capacity”分别是多少。如果 Used 接近 Capacity要么等正在跑的任务结束要么调大yarn.scheduler.capacity.root.default.capacity。如果是NodeManager没注册去NodeManager日志里搜“Registering with RM”看有没有报错。常见原因是yarn.nodemanager.resource.memory-mb设得比物理内存还大NodeManager启动时自检失败。4.3 现象hdfs dfs -put 上传大文件时报“Could not obtain block”原因DataNode磁盘空间不足或者dfs.datanode.du.reserved预留空间设得太大。HDFS 默认会预留 10GB 空间不写入如果磁盘本身只有 20GB实际可用空间就只剩 10GB 左右。PPT 里不会提这个参数但它是导致“上传到一半失败”的常见元凶。解决df -h看磁盘剩余空间如果确实紧张调小dfs.datanode.du.reserved比如设成 1GB。同时检查dfs.replication是不是设成了 3伪分布式下三副本会迅速吃掉磁盘。改成 1 之后已经上传的文件不会自动减少副本需要手动hdfs dfs -setrep -w 1 /path/to/file调整。4.4 现象DistCp 跨集群拷贝时速度极慢带宽跑不满原因distcp默认使用 MapReduce 作业来并行拷贝但如果不指定-m参数它会用默认的 map 数量通常很小导致并行度不够。另一个原因是两个集群之间的网络延迟高而distcp默认的dfs.client.socket-timeout和dfs.datanode.socket.write.timeout可能偏短频繁重试拖慢速度。解决根据数据量和集群规模调整-m参数比如hadoop distcp -m 20 -bandwidth 100 hdfs://src/path hdfs://dst/path。-bandwidth单位是 MB/s用来限制每个 map 的带宽避免把源集群网络打满。如果跨机房拷贝还可以加-D dfs.client.socket-timeout120000延长超时。注意-m不是越大越好map 数量超过源集群的 DataNode 数量后收益递减反而增加调度开销。4.5 现象HA 集群切换后客户端仍然连旧 NameNode原因客户端配置的fs.defaultFS指向了具体的NameNode主机名而不是 HA 的 nameservice ID。PPT 里讲 HA 架构时会画两个NameNode和一个JournalNode集群但不会强调客户端配置的写法。如果core-site.xml里写的是hdfs://namenode1:9000那么namenode1挂掉后客户端不会自动切到namenode2。解决HA 模式下fs.defaultFS应该写成hdfs://nameservice-id比如hdfs://mycluster。同时hdfs-site.xml里要配dfs.nameservices、dfs.ha.namenodes.nameservice-id以及每个NameNode的 RPC 地址。改完配置后用hdfs haadmin -getServiceState namenode-id确认当前活跃节点再用hdfs haadmin -failover手动触发切换验证客户端是否能自动重连。5. 把 PPT 讲出深度面试题里的 HA 与 DistCp 参数怎么答到点上5.1 HA 架构的面试追问JournalNode 和 ZKFC 各自在干什么PPT 里讲 HA 通常只画两个NameNode和一个共享存储但面试官如果追问“JournalNode挂了几个还能写”你就得知道JournalNode集群是奇数个通常 3 个允许挂 1 个。NameNode写editlog时需要多数派确认3 个JournalNode里至少 2 个写入成功才算提交。如果只剩 1 个JournalNode写操作会阻塞整个 HDFS 变成只读。ZKFCZooKeeper Failover Controller是另一个高频考点。它跑在每个NameNode所在节点上负责监控NameNode健康状态并在NameNode挂掉时通过 ZooKeeper 抢锁来触发主备切换。PPT 里可能只写了一句“ZKFC 负责故障切换”但你要能说清楚ZKFC本身挂了不会导致NameNode切换但会失去自动切换能力如果两个ZKFC同时认为自己是 active就会发生“脑裂”这时候需要靠JournalNode的fencing机制来隔离旧NameNode。我一般会用一个具体场景来记这些组件的关系假设namenode1是 activenamenode2是 standby。namenode1的ZKFC在 ZooKeeper 里创建了一个临时节点/hadoop-ha/mycluster/ActiveStandbyElectorLock。namenode2的ZKFC注册了一个监听器。当namenode1进程崩溃临时节点消失namenode2的ZKFC收到通知抢到锁然后调用hdfs haadmin -transitionToActive把namenode2切成 active。整个过程在秒级完成客户端如果配了dfs.client.failover.proxy.provider就能自动重连。5.2 DistCp 参数速查-m、-bandwidth、-strategy 怎么选distcp是 Hadoop 生态里最常用的跨集群拷贝工具但参数不少PPT 里通常不会展开。下面这张表是我在实际迁移中总结的常用参数组合按场景选就行。参数含义推荐值适用场景-m最大 map 数量20~50数据量大、源集群 DataNode 多时调大-bandwidth每个 map 的带宽上限MB/s50~100跨机房拷贝避免打满专线-strategy拷贝策略dynamic默认uniform在异构集群下容易倾斜-delete删除目标端多余文件按需做增量同步时加上全量拷贝别加-p保留权限、属主、时间戳-p rp迁移后需要保持原属性时使用-log日志目录/tmp/distcp-log排查失败任务时必看-strategy这个参数容易被忽略。默认的uniform策略会把文件平均分给每个 map但如果文件大小差异很大就会出现“有的 map 跑完了有的还在传”的情况。dynamic策略会让先完成的 map 去认领剩余文件整体耗时更短。我一般在文件大小不均匀时用dynamic均匀时用默认的就行。还有一个隐藏坑distcp在拷贝大量小文件时每个文件都会创建一个 map 任务-m设得再大也没用因为 map 数量受文件数量限制。这时候应该先用hadoop archive把小文件打包成 HAR 文件再拷贝 HAR 包到目标集群再解包。或者用-append模式把多个小文件合并成一个大文件再传。5.3 面试题里的“伪分布式和完全分布式区别”怎么答出层次这个问题几乎每场大数据面试都会问PPT 里通常只写“伪分布式是一台机器完全分布式是多台机器”。但如果你只答这一句面试官会觉得你只是背了概念。我一般会从三个层次来答进程分布、数据冗余、资源调度。进程分布上伪分布式所有守护进程跑在同一台机器用localhost通信jps能看到全部五个进程完全分布式里NameNode和ResourceManager通常独立部署DataNode和NodeManager可以同机也可以分机。数据冗余上伪分布式dfs.replication只能设 1因为只有一台DataNode完全分布式至少 3 台DataNode副本可以跨机架分布容忍单节点故障。资源调度上伪分布式的 YARN 只能调度本机资源完全分布式可以跨节点分配容器支持动态扩缩容。如果再深入一点可以提“伪分布式适合功能验证和开发调试完全分布式适合生产环境但完全分布式又分 HA 和非 HA 两种”。非 HA 的完全分布式只有一个NameNode存在单点故障HA 模式有两个NameNode配合JournalNode和ZKFC实现自动切换。这样答下来面试官就知道你不是只看了 PPT 的标题而是真正理解了两者的边界。5.4 用 PPT 做课程设计答辩怎么把架构图讲成故事如果你拿这份 PPT 做课程设计答辩最忌讳的是照着幻灯片念“HDFS 是一个分布式文件系统具有高容错性”。评委老师听了一整天这种话早就麻木了。我一般会建议把架构图讲成一个数据流动的故事假设客户端要上传一个 500MB 的文件NameNode先检查权限和目录结构然后返回三个DataNode的地址因为副本数是 3。客户端把文件切成 4 个块128MB × 3 116MB × 1依次写入第一个DataNode第一个DataNode再并行复制给第二个和第三个。写完后DataNode向NameNode发送块报告NameNode更新元数据。整个过程里NameNode只负责“指路”不碰实际数据所以它不会成为带宽瓶颈。讲完这个流程再补一句“如果其中一个DataNode在写入过程中挂了客户端会收到确认失败然后从NameNode返回的地址列表里选下一个可用的DataNode继续写已经写成功的副本不会回滚后续由NameNode触发副本复制来补齐”。这样既展示了你对数据流的理解又带出了容错机制比干巴巴地念“高容错”三个字有说服力得多。5.5 从那以后我每次讲 Hadoop 都先画一张数据流图这份 PPT 最大的价值不是它有多少页而是它逼着我把 Hadoop 的组件关系用一张图讲清楚。我后来养成一个习惯不管是给新人培训还是自己复习先在白板上画一张从客户端到 HDFS 再到 YARN 的数据流图把NameNode、DataNode、ResourceManager、NodeManager、ApplicationMaster五个角色标上去然后用箭头连起来。画完这张图再去看 PPT 里的文字哪些是核心、哪些是补充一目了然。如果你拿到这份资源我建议不要只把它当幻灯片看。先过一遍架构图然后按第 3 章的配置清单搭一个伪分布式环境跑一个wordcount例子再回头对照 PPT 里的数据流图看看每个进程在哪个环节起作用。遇到DataNode起不来、YARN 卡在ACCEPTED的时候翻回第 4 章的排查清单按现象找原因。最后如果你要准备面试或答辩把第 5 章的 HA 和 DistCp 参数表过一遍试着用自己的话把JournalNode的多数派写入和distcp -strategy dynamic的适用场景讲出来。希望这份 PPT 和这篇笔记能帮你少走一点从“看懂架构图”到“跑通集群”的弯路。本文还有配套的精品资源点击获取
返回列表