Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题
文章目录
- 一、HDFS
- 1、Hadoop的三大组成部分
- 2、本地模式和伪分布模式的区别是什么
- 3、什么是HDFS
- 4、如何单独启动namenode
- 5、hdfs的写入流程
- 6、hdfs的读取流程
- 7、hdfs为什么不能存储小文件
- 8、secondaryNameNode的运行原理
- 9、hadoop集群启动后离开安全模式的条件
- 10、hdfs集群的开机启动流程
- 二、MapReduce
- 1、MapReduce的原理
- 2、MapReduce的shuffer过程
- 3、块和片的区别
- 4、Combiner
- 5、环形缓冲区
- 三、Yarn
- 1、Yarn的三种调度器
一、HDFS
1、Hadoop的三大组成部分
1、HDFS(分布式文件系统):用于存储大规模的数据,具有高容错性和可扩展性
2、MapReduce(分布式计算框架):用于处理大规模数据的编程模型和计算框架
3、YARN(资源管理框架):负责管理集群中的资源分配和任务调度
2、本地模式和伪分布模式的区别是什么
本地模式是在单个节点上运行所有的进程,资源利用相对简单,通常将数据存储在本地文件系统中
而伪分布模式虽然也是在单个节点上运行,但会模拟出分布式环境,分配和管理多个进程所需的资源,会按照分布式的架构来组织和存储数据
3、什么是HDFS
HDFS(Hadoop 分布式文件系统)是 Hadoop 生态系统中的核心组件之一,它是一种用于大规模数据存储的分布式文件系统,具有高容错性和可扩展性,其中
namenode负责管理datanode节点,记录各个块的信息;
secondarynamenode负责帮助namenode完成fsimage和edits文件的合并
datanode负责存储数据
4、如何单独启动namenode
hdfs --daemon start namenode
5、hdfs的写入流程
客户端发送写请求,namenode接收后先校验权限,然后通过机架算法,计算出三个节点,将这三个节点发送给客户端,客户端通过pipeline通道向这三个节点写入数据,传递的单位是packet,一个packet大小为64KB,各个节点传递完成后,给客户端响应
6、hdfs的读取流程
客户端发送读请求,namenode接收后先校验权限,然后从自己内存中查看文件放在哪几个节点,并将其详细信息发送给客户端,客户端到对应datanode节点去拉取数据,然后将拉取的数据整合,再发送给客户端。
7、hdfs为什么不能存储小文件
HDFS文件系统中,默认需要将存储的数据进行切割存储的,每一个块是128M,不管一个块中存放的是大文件还是小文件,都有元数据,这个元数据大约占用内存150字节,如果存放过多的小文件,会占用过多的块,从而消耗过多内存。
8、secondaryNameNode的运行原理
1、SecondaryNameNode 每隔一个小时,去nameNode中拉取数据
2、拉取的时候,会终止当前的edits文件,生成一个新的edits_inprogress_XXX.
3、接着会将edits文件和最新的fsiamge文件拉取到SecondaryNameNode的服务器上进行合并,生成一个最新的fsimage.ckpt
4、将fsimage.ckpt传递给nameNode ,NameNode 修改一下名字,变为新的fsimage ,删除掉之前的倒数第二个文件。因为fsimage只保留两个最新的文件。
9、hadoop集群启动后离开安全模式的条件
解除安全模式需要满足两个条件:
1、每个数据块的副本数量达到了设定的阈值
2、并且加载出来的副本总数和所有数据块的所有副本数之和的比值需要大于99.99%
10、hdfs集群的开机启动流程
- 初始化 NameNode:与SecondaryNameNode配合,读取fsimage和edits文件,加载元数据,并重新生成一个新的edits文件
- 启动 DataNode,并与NameNode建立心跳机制
- 进入安全模式:只读模式,不能删除和修改文件
- 达到条件后,解除安全模式
二、MapReduce
1、MapReduce的原理
AppMaster: 整个Job任务的核心协调工具
MapTask: 主要用于Map任务的执行 ReduceTask:
主要用于Reduce任务的执行
一个任务提交 --> AppMaster–> 根据切片的数量统计出需要多少个MapTask任务 -->向ResourceManager(Yarn平台的老大)索要资源 --> 执行Map任务,先读取一个分片的数据,传递给map方法。–> map 方法不断的溢写 --> reduce 方法 --> 将统计的结果存放在磁盘上。
2、MapReduce的shuffer过程
1、Shuffle 过程是 MapReduce 框架中连接 Map 阶段和 Reduce 阶段的中间环节,它的主要作用是对 Map
阶段的输出结果进行整理和分区,以便 Reduce 任务能够高效地获取和处理数据。
2、map端写出数据到环形缓冲区中,环形缓冲区默认阈值为100MB,达到该阈值的80%,就开始溢写数据到磁盘,map会将这些小的磁盘文件进行归并和快排,变成一个大文件。
3、reduce端根据不同的分区,拉取map写到磁盘中对应的数据
4、而这个过程被称为shuffle过程,简单来说就是reduce对map端数据的各种拉取,就是数据的拉来拉去
3、块和片的区别
1、块是物理概念,片是逻辑概念。一般片 = 块,但是到最后一次的时候,有可能片> 块,但是绝对不能超过块的1.1倍。
2、mapreduce 启动多少个MapTask任务跟片有关系,有多少个片,就启动多少个map任务。跟块儿无关。
4、Combiner
Combiner其实就是运行在mapTask中的reducer。 Reducer其实就是合并代码的。Combiner是作用在Map端的。
Combiner 只能用于对统计结果没有影响的场景下。 一般只用于统计之和,统计最大值最小值的场景下。统计平均值等情况是不能用的。
5、环形缓冲区
1、环形缓冲区,其实是一个数组,将数组分为两部分,分割的这个点就称之为轴心。
2、存储KV真实数据,是顺时针存储
3、每一个KV真实数据都有对应的元数据,元数据是逆时针存储。
4、当两者数据占用空间达到80%的时候,需要清理数据,清理完之后,轴心发生了变化
三、Yarn
1、Yarn的三种调度器
1、FIFO Scheduler(FIFO调度器):先进先出,先进去的任务先执行
缺点:假如第一个任务很大,就会阻塞后面的小任务
2、Capacity Scheduler(容量调度器):将cpu资源分为多个队列,将不同类型的任务分到不同队列中
缺点:如果真遇到了大任务,执行的时间会稍微长一些。因为要时刻给小的任务预留资源
3、Fair Scheduler(公平调度器):根据当前正在运行的任务数量和资源使用情况,为新任务分配适当的资源
缺点:资源分配可能不够精准,对小任务响应可能不及时