hadoop面试题

Mapreduce过程

map阶段
主要分为五个阶段input阶段、map阶段、collect阶段、spill阶段、combine阶段。
1.**input阶段:**客户端将文件分片,发送到 jobTracker,jobTracker调用taskTracker来处理分片数据;在taskTracker中,map任务调用mapper的run方法生成<k,v>键值对,并且把它作为map函数的输入,k就是偏移量,v就是文件一行的内容;

2.map阶段:将解析出的key、value交给用户写的map()函数处理,并产生一系列新的key、value;

3.**spill阶段:**mapper方法的输出刚开始是写入map任务所有的环形内存缓冲区,待缓冲内容达到指定阈值(默认80%)时,会启动一个溢写的后台线程把内容从缓冲区写入磁盘;

4.partition&sort阶段:在将数据溢写到磁盘之前,会进行一个partition操作,即分区操作。它的作用就是根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理。并且在写入磁盘之前,要对数据进行快速排序,必要时进行压缩、合并等操作;

5.combine&merge阶段:在溢写过程中,可以加一次combine操作,可以优化一下中间结果。待全部的mapper输出都落盘后,有一个merge操作,将多个临时文件合并,此时map端任务就结束了。并且TaskTracker也知道map输出文件的位置。Reduce task会不断地通过rpc从jobTracker那里查询map task是否完成的信息,如果reduce task得到通知,shuffle 的后半段就开始了。

reduce阶段
主要分为四个阶段copy阶段、merge阶段、sort阶段、reduce阶段。
(1)copy阶段: reduceTask从TaskTracker那里获取map task的输出文件,然后就去拷贝map端的数据,数据量小直接放到内存,数据量大写到磁盘
(2)merge阶段:在copy数据的同时,reduceTask会对内存和磁盘上的数据进行合并,防止小文件过多
(3)sort阶段:reduce函数是按照key进行聚集的,在mapTask上已经进行了局部的排序,reduceTask只需要对数据再进行一次全局归并排序即可
(4)reduce阶段:将reduce()函数计算的结果写入HDFS或者其他文件系统

reduce函数如何知道从那台机器获取map输出?

Map任务完成后,taskTracker就会更新状态,并且通知jobTracker。这些都是通过心跳机制传输的,因此jobTracker知道map输出和taskTracker之间的映射关系。Reduce中有一个线程定期的询问jobTracker来获知map的输出位置。

Shuffle过程

Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。
Map端:
collect:每个map任务维护着一个环形缓冲区。当map输出数据时,先写到内存的环形缓冲区中,当环形缓冲区到达一定阈值时,开始溢出成spill文件。
spill:在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。
combine:如果有combiner,排序后进行一次合并,使结果紧凑,然后写入磁盘。当最后一个spill文件写完之后,将多个spill文件合并到一个已经分区并排序的大文件中。
Reduce端:
copy: reduce通过http方式从map端拉取数据,reduce有少量的复制线程,并行的从map端复制数据到reduce端。如果map输出比较少,则直接复制到内存中,如果其大小超过一定阈值,则复制到磁盘上。
merge:在远程拷贝数据的同时,ReduceTask 启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
sort:ReduceTask 对所有数据进行一次归并排序。

简述HDFS的读写流程

HDFS写数据流程

(1)客户端与NameNode建立连接,请求上传文件,NameNode检查用户是否有上传权限?目标文件是否已经存在?存在,直接报错;否则返回客户端可以上传文件。
(2)客户端请求第一个block该传输到哪些DataNode节点上
(3)NameNode根据配置文件中指定的备份数量以及副本放置策略进行文件分配,返回可用的DataNode的地址
(4)客户端请求DataNode节点,传输数据,DataNode会和其他DataNode形成pipline,整个pipline建立完成后逐级返回客户端
(5)客户端发送block,以packet为单位(默认64k),A收到就回传给B,B传给C;A每传一个packet会放入一个应答队列等待响应
(6)数据被分割成一个个packet数据包在pipline上依次传输,在pipline反方向,逐个发送ack,最终由第一个DataNode向客户端发送ack
(7)当一个block传输结束后,客户端再次请求NameNode上传第二个block

HDFS读数据流程

(1)客户端请求NameNode读取数据,NameNode检查文件位置,确认请求block所在位置
(2)namenode返回block列表,对于每个block,namenode都会返回含有该block副本的DataNode地址
(3)客户端和DataNode建立连接,读取数据(就近原则),如果客户端本身就是DataNode,那么将从本地直接获取数据
(4)读取完每一次block都会进行check sum验证。如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的DataNode 继续读。
(5)当读完列表的 block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表。

NameNode 和 Secondary NameNode工作机制

1.第一阶段NameNode启动:
(1)第一次启动NameNode,创建Fsimage和Edits文件。如果不是第一次启动,则直接加载镜像文件和编辑日志到内存。
(2)客户端对元数据进行增删改查请求
(3)NameNode记录操作日志,更新滚动日志
(4)NameNode在内存中对数据进行修改
2.Secondary NameNode工作
(1)Secondary NameNode询问NameNode是否需要checkpoint,返回结果
(2)Secondary NameNode请求执行checkpoint
(3)NameNode滚动正在写的Edits日志
(4)将滚动前的镜像文件和编辑日志拷贝到Secondary NameNode
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint。
(7)拷贝fsimage.chkpoint到NameNode。
(8)NameNode将fsimage.chkpoint重新命名成fsimage。

Yarn组成

1.ResourceManger
负责整个集群的资源管理和分配,是一个全局的资源管理系统。
2.NodeManger
NodeManager是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container的运行状态。
3.ApplicationMaster
用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的机器上,负责与RM调度器协商以获取资源

Yarn的运行流程

(1)客户端向 Resource Manager提交一个任务,RM向客户端返回作业id和资源提交路径。
(2)客户端将运行所需资源,提交到 HDFS 上,客户端提交job。
(3)Resource Manager通过调度器在Node Manager中创建一个容器,称为Application Master,后续流程由他发起。
(4)Application Master 向 Resource Manager 注册后,根据自己任务的需要,向 Resource Manager 申请 container, 由Application Master 负责分配在哪些Node Manager上启动container来运行map和reduce任务
(5)各个 container 向 Application Master 汇报自己的进度,都完成后,Application Master 向 Resource Manager注销任务并退出,Resource Manager 通知 Node Manager 杀死对应的 container,任务结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TigRer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值