大数据开发经典面试题:说一说Yarn、HDFS、MR

Yarn是什么?

是Hadoop2之后推出的,用于管理集群中的资源,他有这几个角色:

  • ResourceManager(下文简称RM)
  • NodeManager(下文简称NM)
  • ApplicationMaster(下文简称AppMaster)
  • Container

其中RM是整个集群的管理者,所有的资源的使用申请与释放都要向它进行汇报与调度,NM是集群中各个Node结点的管理资源,主要配合RM进行工作。这两者生命周期是从Yarn启动到结束均存在的。

AppMaster与Container是对进行某一次任务的资源分配的概念,AppMaster的主要任务就是主持某次任务的运行,而Container是某一次任务中跑在不同的节点上的资源总和,是一个抽象概率。

Yarn较老版本的JobTracker与TaskTracker的改变就是,实现了资源管理与任务调度的解耦,且Yarn只有资源管理部分是常服务,任务调度部分仅在任务执行后才会开启。

任务执行流程

Client提交一个Job到RM,将数据需要的代码、配置文件与切片信息,上传到HDFS上;

Client访问RM,要求开启一个任务,RM指定一个空闲的NM开启一个Container,反射一个AppMaster;

AppMaster到HDFS上查看其对应的切片信息,并带着切片信息到RM上申请资源;

AppMaster接收到RM返回的资源后,AppMaster连接对应的NM,请求开启对应的Container;

各个Container下载则到HDFS上下载该任务的代码、配置文件、切片数据,并开始相关计算;

各个Container返回结果到AppMaster,AppMaster再进行整合,返回到RM;

RM再将数据返回到Client。

HDFS是什么?

HDFS是一个分布式存储系统,负责数据在Hadoop集群中的存储工作,它主要有这几个角色:

  • NameNode(下文简称NN)
  • DataNode(下文简称DN)
  • SecondNameNode(下文简称SNN)

NN负责存储切片元数据;

DN负责存储具体的切片数据;

SNN负责合并Image镜像与log数据。

HDFS写流程

Client客户端访问NN,提出上传文件;

NN检查并保存其元数据,NN返回一个结点列表,表示第一个Block存储在这一系列结点上;

Client根据结点的远近(机架距离、网络距离),连接到最近的结点,再从该结点出发连接到一个最近的结点,一次连接后,就会形成一条通路;

Client将Block数据通过该通道进行发送,Block会被拆分为一个一个packet,并附带数据校验和,用于校验数据是否正确;

当一个结点接受到一个Packet之后,保存在本地完毕,就会将这个Packet传输到下游,并且,回复上游已经传输完毕了,请求再发送一个Packet过来,这样就形成了一个流水线的形式,提高了上传效率;

数据在传输过程中可能发生上传错误,失败的情况,当错误、失败的情况产生时,可能会与已经保存的元数据不一致,所以元数据会根据心跳更新其元数据。

HDFS读流程

Client客户端访问NN,提出读取文件请求;

NN根据元数据返回各个结点所在的结点列表;

Client根据结点列表中最近的机架距离去拉取数据;

Client可以选择只读取其中一块或者多块Block,并校验其数据完整性。

MR是什么?

MapReduce是为了解决大数据计算问题提出的一种方法,是一种分布式计算理论,即大量的数据计算任务无法在单台机器上快速完成或无法完成,就通过多台机器并行计算的思路,来使计算能够进行或更加有效率地进行。

MR主要分为MapPhaseReducePhase

其中Map阶段的任务就是将HDFS(或者其他分布式存储系统中),将该切片的数据进行转换(Map),即映射为后续我们能够处理的数据类型;举例一个WordCount程序,每个切片内容都是一段文章,我们需要对文字进行分割成(word,count),这样的键值对,才能便于后续的统计。

Reduce阶段的任务就是将每个Map阶段的任务进行整合的过程,因为Map阶段的数据计算,都是一个文件的局部处理,他们不能代表最终的结果。例如:WordCount程序中,第一段文章中,“你好”这个词语出现了10次,第二段文章中,“你好”出现了12次,这两篇文章分别在两个Map阶段进行计算,所以他们并不知道彼此的存在,所以只能通过Reduce将这些数据拉取在一起,再次进行计算整合。

Shuffle过程:shuffle是指Map阶段到Reduce阶段的这一过程。


这边简单说说Hadoop-MR:

拿WordCount举例,Map阶段执行过程中,(Word,1)这样的键值对,会不断地写入内存中(是一个以字节数组形式的“环形缓冲区”);

缓冲区缓冲的数据达到一定的大小后,就会进行溢写操作,溢写到磁盘形成一个一个小文件;

最终小文件会进行归并排序操作,最终每个Map任务都会合并成一个大文件;

在归并排序过程中,还可进行combine操作,进行数据的提前整合处理。

在每个Map都输出了对应的文件后,Reduce会到各个Map的输出文件处拉取其对应的(k,v);

其默认是以Hash值进行对Key值的分区Partition操作,以保证各个Map阶段的输出文件中的相同的Key会被拉取到同一个Reduce中;

被拉取过来的数据再次进行归并排序,进行combine操作整合,最终将每个Reduce输出的文件“拼接”(逻辑上的拼接,若其数据量还是很大,存储在HDFS上依然是以切片的形式存储),即为最终答案。

环形缓冲区的结构

环形缓冲区的结构是在环形缓冲区空闲的中间位置,分别向一边存储索引信息,另一边存储真实的KV数据

存储索引的目的是加快数据的检索,和分辨出哪一块的数据是某一个KV的起始位置,这是通过索引进行标记的。

而为什么要从环形缓冲区对立的位置进行存储?
  • 第一是能够能更大限度地利用空间,当两块数据“对撞”的时候,那缓冲区一定是已经没有空余空间了。
  • 第二是一定程度上保证了溢写操作能与map输出操作能够同时进行;若缓冲区此时要进行溢写操作了,那么只需要将已经存了索引与数据的位置的数据进行锁定,再从空闲的位置的终极位置开始存储数据,当需要溢写的数据都已经写出完毕了后,就可以对该区域解锁,只要新的数据不在溢写结束之前占满空闲的区域,那么就可以保证溢写与Map的输出能过同时进行。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值