HDFS面试高频题及实战答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

HDFS面试高频题及实战答案

一、基础原理类

问题:HDFS的核心设计思想是什么?为什么适合大数据存储?

答案:HDFS核心是“分而治之+容错优先”。它把大文件切成固定大小的Block(默认128M),分散存到集群节点,解决单节点存储上限;同时每个Block默认3副本,分布在不同机架的节点上,就算某个节点或机架故障也不丢数据。适合大数据的原因很实际:一是支持PB级大文件,不像本地文件系统受单个硬盘限制;二是流式读写效率高,大数据处理(比如MapReduce)都是批量读多、随机写少,HDFS针对这种场景做了优化,不用频繁寻址;三是硬件成本低,能用普通服务器搭建,横向扩展容易,加节点就扩容。

问题:HDFS的Block大小为什么设置成128M(或256M),不是更小(比如4M)或更大(比如1G)?

答案:核心是平衡“寻址时间”和“传输时间”。硬盘的特点是:寻道(找到数据位置)要花几毫秒,一旦找到,连续传输数据的速度很快(比如百MB/s)。如果Block太小,比如4M,那么一个大文件会被切成很多块,寻址次数就多,总时间里寻址占比太高,效率低;如果太大,比如1G,单个Block传输时间太长(比如10秒),一旦传输失败要重新传整个块,容错成本高,而且MapReduce任务通常一个Block对应一个Map任务,块太大任务数太少,集群并行度上不去,小文件处理也不灵活。128M是实践中找到的平衡点,大部分场景下寻址时间占比低,传输和容错也可控。

问题:HDFS的架构由哪些组件构成?各自的作用是什么?

答案:主要是三个核心组件,主从架构:

NameNode(NN):集群“大脑”,管元数据。比如文件的目录结构、每个文件由哪些Block组成、Block存在哪个DataNode上,这些信息都存在NN的内存里,还有持久化的editslog和fsimage文件,保证元数据不丢。NN不存实际数据,也不参与数据传输,只负责调度。

DataNode(DN):集群“苦力”,存实际数据Block。每个DN会定期向NN发送心跳(默认3秒)和块报告,告诉NN自己还活着、有哪些块。客户端读写数据时,直接和DN交互传输数据,NN只告诉客户端该找哪个DN。

SecondaryNameNode(SNN):不是NN的备份(很多人误解!),主要帮NN合并editslog和fsimage,减轻NN的负担。NN的fsimage是元数据快照,editslog是后续的操作日志,长期不合并的话,editslog会很大,NN启动时加载慢。SNN定期(默认1小时)拉取NN的editslog和fsimage,合并成新的fsimage,再发给NN替换旧的,这样NN启动时直接加载合并后的fsimage,速度快。但如果NN挂了,SNN的fsimage可能不是最新的,会丢部分数据,所以不能当备份用。

二、核心流程类

问题:HDFS客户端上传文件的完整流程是什么?

答案:举个实际例子,客户端要传一个1G的文件到/hdfs/test/file.txt:

客户端先和NN建立连接,发送上传请求:“我要把文件存到/hdfs/test/file.txt,文件大小1G”。

NN先做校验:目标路径是否存在、客户端有没有写权限、集群剩余空间够不够(1G切成8个128MBlock,每个3副本,共需24G空间)。校验通过后,NN返回给客户端“可以上传”,并告诉客户端每个Block该存到哪些DN(比如Block1存到DN1、DN2、DN3,Block2存到DN4、DN5、DN6,依此类推,副本会跨机架分布)。

客户端把本地文件切成128M的Block,然后和第一个Block的主DN(比如DN1)建立数据传输通道(Pipeline),同时连接另外两个副本DN(DN2、DN3),形成DN1→DN2→DN3的Pipeline。

客户端以Packet(默认64KB)为单位,把数据发给DN1,DN1接收后,一边写入本地磁盘,一边把Packet转发给DN2,DN2同理转发给DN3,每个DN接收完都要给前一个节点返回确认。

一个Block传输完成后,客户端会向NN汇报“Block1传完了”,NN更新元数据。然后客户端继续传下一个Block,重复步骤3-5,直到所有Block都传完。

所有Block上传完成,客户端向NN发送“上传结束”请求,NN最终更新文件的元数据,上传成功。

问题:HDFS客

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档