大数据岗位校招Hadoop面试总结

这篇博客总结了大数据岗位校招中关于Hadoop的面试要点,涵盖了HDFS的副本数修改、文件结构、租约管理、NameNode的集中式缓存管理和零拷贝模式,以及MapReduce的作业提交流程、MapReduce1与YARN的比较和调度器机制。此外,还讨论了NameNode的安全模式和高可用实现,以及YARN中ResourceManager的高可用和脑裂问题的解决。
摘要由CSDN通过智能技术生成

上两篇文章传送门:

大数据岗位校招Hive面试总结

大数据岗位校招Spark面试总结


)

1、HDFS 默认的副本数?如果想修改副本数怎么修改

默认副本数为3,运行客户端的节点上放一个,第二个放与第一个不同且随机选择的机架上,第三个与第二个一个机架,另一个节点。

修改副本数的方法

  1. 在配置文件中修改 dfs.replication项,只能保证新写入的是2,原来的还是3
  2. 通过命令上传文件时,指定副本为1 : hadoop dfs -D dfs.replication=1 -put 文件 目标路径
  3. 修改已保存的文件的副本数: hadoop dfs -setrep 2 文件路径
  4. 对文件夹中的所有文件都修改副本数:hadoop dfs -setrep 2 -R 文件夹路径

2、HDFS 的文件结构

namenode文件结构

  • edits:编辑日志
  • fsimage:文件系统镜像,文件系统元数据的持久检查点
  • seen_txid:存放 edits*文件的最后一个数,namenode重启时,会从edits_0001一直跑到edits_000(seen_txid)
  • version:包含正在运行的hdfs版本信息
  • in_use.lock:锁文件,namenode使用该文件时为存储目录加锁,防止多个namenode实例同时使用损坏数据。

datanode文件结构

  • blk_文件:数据块文件
  • BP文件:代表数据块池
  • finalized/rbw文件:存储块数据,包含 .meta 文件,包括校验和等信息
  • version文件:版本信息
  • in_use.lock:锁文件

3、租约管理(Lease机制)

HDFS支持一次写入多次读取,对文件写操作的互斥同步靠Lease实现。Lease实际上是时间约束锁,主要特点是排他性。客户端写文件时需要先申请一个Lease,一旦有客户端持有了某个文件的Lease,其它客户端就不可能再申请到该文件的Lease,这就保证了同一时刻对一个文件的写操作只能发生在一个客户端。NameNode的LeaseManager是Lease机制的核心,维护了文件与Lease、客户端与Lease的对应关系。

LeaseManager包括以下三个主要核心数据结构

  1. sortedLeases:Lease集合,按照时间先后有序组织,便于检查Lease是否超时 ;
  2. leases:客户端到Lease的映射关系 ;
  3. sortedLeasesByPath:文件路径到Lease的映射关系;

LeaseManager.Monitor 的作用

由于Lease本身的时间约束特性,当Lease发生超时后需要强制回收,内存中与该Lease相关的内容要被及时清除。超时检查及超时后的处理逻辑由LeaseManager.Monitor执行。

软超时(softLimit)和硬超时(hardLimit)

正常情况下,客户端向集群写文件前需要向NameNode的LeaseManager申请Lease;写文件过程中定期更新Lease时间,以防Lease过期,写完数据后申请释放Lease。整个过程可能发生两类问题:
(1)写文件过程中客户端没有及时更新Lease时间 —— softLimit
(2)写完文件后没有成功释放Lease —— hardLimit

租约恢复

软硬超时之后的强制回收称为租约恢复。两种场景都会触发LeaseManager对Lease超时强制回收。如果客户端写文件过程中没有及时更新Lease超过softLimit时间后,另一客户端尝试对同一文件进行写操作时触发Lease软超时强制回收;如果客户端写文件完成但是没有成功释放Lease,则会由LeaseManager的后台线程Monitor检查是否硬超时后统一触发超时回收。

软硬超时的回收逻辑都一样,先对Lease过期前最后一次写入的Block进行检查和修复,之后释放超时持有的Lease,保证后面其它客户端的写入能够正常申请到该文件的Lease。

4、第一关系管理及第二关系管理

  • 第一关系:文件与数据块的关系,由 fsimage 和 编辑日志 提供
  • 第二关系:数据块与节点的映射关系,NameNode启动时,DataNode会上报其所有的块信息,这些信息构成了第二关系,INodeFile.blocks字段记录了一个HDFS文件拥有的所有数据块,通过这个字段HDFS第一关系与第二关系发生了关联。

5、NameNode中的集中式缓存管理

允许用户将指定路径的文件或目录进行缓存,NameNode会通知拥有对应块的DataNodes将其缓存在DataNode的内存当中。使用集中式缓存主要出于以下原因:

  1. 防止那些被频繁使用的数据从内存中清除;
  2. 因为DataNode的缓存由NameNode来管理(并作为元数据的一部分进行持久化),applications在做任务安排时可以查询这个缓存的列表,使用一个被缓存的块副本能够提高读性能;
  3. 减少cache浪费。例如一个block的三个replica分别存储在三个DataNote 上,有可能这个block同时被这三台DataNode的OS buffer cache,但是这个情况并没有对外暴露,从HDFS的全局看就有同一个block在cache中存了三份,其实可能只需要一份;
  4. 加快HDFS client读速度。过去NameNode处理读请求时只根据拓扑远近决定去哪个DataNode读,现在当HDFS client和要读取的block被cache在同一台DataNode的时候,可以通过zero-copy read直接从内存读,略过磁盘I/O、checksum校验等环节。

6、零拷贝模式

DataNode读取数据块的正常过程为:

  1. Datanode会首先将数据块从磁盘存储读入操作系统的内核缓冲区。(外设和内存之间)
  2. 再将数据跨内核推到用户缓冲区(内存中)
  3. 然后会再次跨内核将数据推回内核中的套接字缓冲区(内存中)
  4. 最后将数据写入网卡缓冲区(外设和内存之间)

造成四次上下文切换,使用零拷

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值