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,任务结束

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TigRer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值