-
客户端提交MR程序,请求yarn的主角色 resource manage分配资源,运行App master
-
RM收到请求后,返回一个配置文件存储路径,任务id
-
客户端将job运行资源:切片信息,配置信息,jar包上传到这个路径
-
资源上传完成后,向rm 申请运行程序
-
RM根据集群资源使用情况,node manger的空闲状态,在一台NM上预留容器资源
-
这台nm的容器启动APPmaster,启动后的AM会跟客户端和RM注册监听,保持通信
-
AM根据切片信息确定task任务的个数,向RM申请对应task个数的容器资源
-
RM收到申请后,并不会立即分配资源,而是将请求放到调度队列当中,根据调度策略进行资源分配,当调度到该申请后才会分配资源
-
当调度到自己的时候,在nm上分配一个容器资源
-
AM到这个分配的容器中,启动task任务(mr程序)
map task 读取hdfs上的数据
-
map task 访问HDFS的 name node 请求读取block上的数据
-
namd node 收到申请后,会返回对应的 data node中block块的元数据信息(一个block就是一个map task任务)
-
每个map task 通过textinputformat 按行读取block中的信息进行处理,返回的是(kv对)
-
将这些kv对通过逻辑代码 处理出新的kv对,经过partition分区(默认只有一个)输出到缓冲区
-
缓冲区的信息达到百分之八十就会产生一次溢出,溢出的信息经过快速排序存储到磁盘上的文件中
-
当所有数据处理完成后,磁盘上的文件数据经过归并排序 合并(megar)到一个最终文件当中finalresult
-
reduce task 拉取每个map task处理完的 最终文件 到内存当中,内存满了存磁盘
-
然后把这写最终文件按照key通过归并排序进行合并成一个文件
-
对文件内的数据按照key 进行分组,相同key的分为一组
-
reduce task 的业务代码按照组 进行读取处理数据,处理完成的数据又是一个新的kv对
将这些数据写入到HDFS上
-
reduce task 请求Name Node写入数据到HDFS上
-
NN收到请求后,经过校检(是否允许上传,或者这个数据本来就有) 返回统一上传的响应
-
reduce task收到响应后 请求上传第一个block
-
NN收到请求后 根据集群资源使用情况返回对应副本数的data node 的路径信息(默认三副本dn1,2,3)
-
reduce task收到响应后 先建立 dn1 dn2 dn3 的管道 在客户端进行一个数据缓存,当缓存到64kb的时候以数据包的形式通过管道传输给dn1每个packet都会返回一个ack校检
-
dn1接收数据并保存,然后复制给dn2,dn2接收保存复制给dn3,dn3接收保存
-
map task 和reducetask运行结束后 AM向RM申请回收资源,最后AM注销自己,释放资源
网友评论