Mapreduce运行原理以及2.-x基于yarn的工作原理
- mapreduce1.x的架构图
Job Tracker:
jobtracker是负责整个资源管理和资源调度
Task Tracker:
tasktracker是负责真正执行任务的节点
stp1: 当clients需要执行mapreduce计算时,clients首先向jobtracker申请一个jobid,客户端首先会根据自己
要计算block块列出所有的split列表、拷贝jar文件、配置信息到hdfs上。
stp2:jobtracker收到请求后将其放到作业队列中,等待作业调度器调度,作业调度器会根据split列表信息以
及自己的调度算法为每一个split创建一个map任务,并为每一个map任务分配一个tasktracker节点执行
此处分配tasktracker时会优先**根据含有map任务需要执行的数据的tasktracker上,**同时将jar包计算
程序,并且选择相对cpu不忙的tasktracker,复制到改tasktracker上,此处体现了mapreduce的计
算向数据的移动核心思想。
stp3:tasktracker根据和jobtracker的心跳机制告知jobtracker自身的资源情况,同时在心跳时,jobtracker
会告诉tasktracker需要其执行的map任务以及reduce任务。
stp4:tasktracker根据心跳机制,每过一段时间便会告知jobtracker自身执行的状态和进度,当一个任务执行
成功时会把当前作业执行状态设置为成功,当jobtracker查询时会向用户返回一条消息。(这条消息
就是我们平时可以看到的执行map=??% reduce=??%)
1.x的不足之处:jobtracker单点故障
jobtracker内存压力过大
只有当map执行完过后reduce才能执行,造成资源的浪费
2.mapreduce2.x的架构图
ResourceManger:资源管理,主节点
NodeManager:管理container的生命周期,与RM进行心跳机制
ApplicationMaster:负责向RM申请资源:同时向NodeManager请求启动contanier,告知container执行任务
Container:资源的列表信息(节点,cpu,io)默认1G,在没有人为设置的情况下当超出1G后nodemanger会直
接kill掉contaniner
stp1:.当clients需要执行mapreduce计算时,clients首先向ResourceManger申请一个jobid,客户端首先会
根据自己要计算block块列出所有的split列表、拷贝jar文件、配置信息到hdfs上。
stp2:RM为改作业分配第一个Container,与NodeManger通信申请一个Container既是ApplicationMaster
stp3:AppM向RM注册自己的信息。
stp4:APPM得到向RM申请一个Container,得到资源后,AppM向NodeManger申请开启任务,当
NodeManger设置好运行环境,既jar,环境变量等,
stp5:这些任务可以通过RPC协议向AppM报告执行过程,状态,当执行错误时,AppM会重启该任务
执行完这些任务后AppM会向RM申请注销自己。
MapReduce过程
1.当block块被读入maptask时会将maptask进行逻辑上的划分成许多split块(block大时会划分成小split,当block较小时,可以将多个block块合并或者设置split大一点将多个block合并)
2.默认一个split对应一个maptask,根据对应关系map读取数据
3.当执行完map操作后,实际生成的不只是有key,value同时还会带有partition既分区,maptask提供了partition重写的接口,可以自定义。默认是取一条数据对key hash后再以reduce task数据取模。这样可以决定最后这条数据应当交给那个reduce操作
4.数据被写入一个环形数据缓存中默认当达到80%时,数据会进行溢写,在溢写时会首先对数据进行一次排序,先按照partition的分区号进行排序,在根据key值排序(使用桶排)产生许多外部无序内部有序的文件
5.这些小文件会进行一次merge,(当小文件过多时,此时应该设置combine,将一些重复数据做combine操作,减少了最后reduce的读取和计算量节省了Io和计算时间)既是归并合成一个大文件
6.maptask的数据被拉去既是fetch将根据分区号将相同分区号的数据拉去到一个文件中,这文件进行merge合成一个个拥有指定分区号的文件内部有序。(此时用户可以设置combine),这些小文件慢慢merge最终合并成一个文件写到hdfs上并输出给用户。
的数据拉去到一个文件中,这文件进行merge合成一个个拥有指定分区号的文件内部有序。(此时用户可以设置combine),这些小文件慢慢merge最终合并成一个文件写到hdfs上并输出给用户。