004__Hadoop原理讲解(面试题)

一丶组件说明:

hadoop主要组件构成部分:
HDFS(存储)丶YARN(调度任务)丶MapReduce(分析计算)

--------------------------------------HDFS-----------------------------------------

NameNode(nn): 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等

DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验.

Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份

--------------------------------------YARN-----------------------------------------

ResourceManager(RM):整个集群资源(内存、CPU等)的老大

NodeManager(NM):单个节点服务器资源老大

ApplicationMaster(AM):单个任务运行的老大

Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等

说明:
1.客户端可以有多个
2.集群上可以运行多个ApplicationMaster
3.每个NodeManager上可以有多个Container

关系图:
在这里插入图片描述

--------------------------------------MapReduce-----------------------------------------

说明: 主要分为两个阶段, Map阶段和Reduce阶段,Map阶段主要负责并行处理输入数据,Reduce阶段主要负责对 Map 结果进行汇总计算

三大组件之间的关系图:
在这里插入图片描述

二丶HDFS文件的块大小

在这里插入图片描述

思考:为什么块的大小不能设置太小,也不能设置太大?
(1)HDFS的块设置太,会增加寻址时间,程序一直在找块的开始位置;
(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢

总结:HDFS块的大小设置主要取决于磁盘传输速率

三丶HDFS写数据流程

在这里插入图片描述

四丶HDFS读数据流程

在这里插入图片描述

五丶NameNode和SecondaryNameNode工作机制

  1. 主要是fsimage进行存储元数据信息,为了防止效率过低,将此加入到内存当中,然后进行更新(不能实时更新,那会和直接从磁盘读取没什么两样,造成效率低下)
  2. 又为了防止断电造成元数据没进行更新,导致数据丢失,增加了Edits文件(只追加一些更新操作)
  3. 这个合并更新的任务就交给了SecondaryNameNode,每一个小时进行检测

在这里插入图片描述

六丶DataNode工作机制

在这里插入图片描述
DataNode掉线时限参数设置:
在这里插入图片描述

七丶MapReduce工作流程(难点)

环形缓冲区
1.为什么要环形缓冲区?
答:使用环形缓冲区,便于写入缓冲区和写出缓冲区同时进行。
2.为什么不等缓冲区满了再spill?
答:会出现阻塞。
3.数据的分区和排序是在哪完成的?
答:分区是根据元数据meta中的分区号partition来分区的,排序是在溢出的时候排序。

分区的概念:

Map阶段处理的数据,在向环形缓冲区写的时候 是以分区的方式写的。 一般情况下,MR程序分区数有多少 reduceTask数量就应该有多少 ,一个分区的数据一个reduceTask去处理,reduceTask处理完成之后都会生成一个结果文件

举个例子:

mapper阶段输出的分区是5个 但是reduceTask数量是1,能否将MR运行成功呢?
可以运行成功 只有一个文件 五个分区 但是一个reduceTask可以去处理五个分区数据
那么我们衍生出这么几个问题:
若分区5个 但是reduceTask是2个, 则不能运行 运行报错 不患寡而患不均
若分区5个 reduceTask5个 ,百分百可以正常运行 ----最理想的状态
若分区5个 reduceTask大于6个 ,百分百也可以运行成功,但是会多出一个空白结果文件
`【注意】:以后在工作中写的 我们的reduceTask数量最好和分区数保持一致 这样的话处理才是MR程序认位的最佳状态

文字描述流程:

1、input组件从HDFS读取数据;
2、按照规则进行分片,形成若干个spilt;
3、进行Map
4、打上分区标签(patition)
5、数据入环形缓冲区(KVbuffer)
6、溢写之前会进行排序(sort+spill)
7、combiner+merge,落地到磁盘
8、shuffle到reduce缓存
9、继续归并排序(mergesotr)
10、reduce

1、客户端在执行submit方法之前,先获取待读取文件的信息
2、在将job提交给Yarn时,会带着三个信息:job split(文件切片信息);提交的jar包;job的xml(包括application id);
3、Yarn根据文件的切片信息,计算将要启动的map task的数量,然后启动map task;
4、读取数据,传到mapper:调用inputformat方法,读取HDFS上的文件;
5、mapper做逻辑的处理;
6、将数据发送到环形缓冲区环形缓冲区默认大小为100M,达到80%阈值将会进行溢写在溢写之前会做排序
7、排序:按照key进行字典序排序,排序手段为快排
8、产生大量溢写文件,溢写文件达到10个,再次调用merge方法,使用归并排序,形成一个大文件;
9、Combiner局部聚合;
10、Yarn会启动相应数量的reduce task到map端拉取数据,reduce会发送拉取线程,到map端拉取数据,拉到的数据会先加载到内存,如果内存不够,则写到磁盘,等所有数据拉取完之后,再进行归并排序。如果只有一个reduce,这个reduce就是全局排序。
12、归并后的文件会进行分组操作,然后数据以组为单位发送至reduce方法,reduce方法做逻辑判断后,调用outputformat,recordwrite方法将数据以kv形式写到HDFS上

Merge阶段(递归合并):当所有数据处理完成后,MapTask 对所有临时文件进行一次合并, 以确保最终只会生成一个数据文件,最终让每个 MapTask 最终只生成一个数据文件,可避免同时打开大量文件同时读取大量小文件产生的随机读取带来的开销

`

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八丶Yarn的工作机制

在这里插入图片描述

Yarn的调度器和调度算法:

调度器: FIFO容量(Capacity Scheduler)公平(Fair Scheduler)
Apache Hadoop3.1.3 默认的资源调度器是 Capacity Scheduler

FIFO 调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务
在这里插入图片描述

容量调度器(Capacity Scheduler):
在这里插入图片描述

1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略
2、容量保证:管理员可为每个队列设置资源最低保证资源使用上限
3、灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列
4、多租户
支持多用户共享集群和多应用程序同时运行。
为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定

注意: 使用深度优先算法,优先选择资源占用率最低的队列分配资源

公平调度器(Fair Scheduler)
在这里插入图片描述
缺额的解释:
在这里插入图片描述
公平调度器中的队列资源分配:
在这里插入图片描述
公共调度器中的队列内的作业资源分配:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值