分布式程序详细内部工作流程"/>
MR分布式程序详细内部工作流程
- mr程序分为map端和reduce端,来进行处理数据,mr程序在运行的时候最先启动的程序就是MRAppMaster,MRAppMaster是可以读到在job提交的时候的参数信息,所以它可以根据参数信息,来启动对应数量的maptask和reducetask,在maptask启动后,会读取自己对应的任务切片,以逐行读取的方式,一个K,V执行一次map()方法,K为起始偏移量,V为行内容
- 在map()方法执行完一次后,会将数据写入到环形缓冲区中,当环形环形缓冲区中的数据存储达到80%的时候,就会进行分区,排序,然后然后将数据溢出到磁盘当中,剩余20%空间可以继续用来接收数据,如果在20%的空间接收满数据后,仍没有完成分区,排序的工作,那么环形缓冲区就会出现阻塞,防止向缓冲区中写入数据,等到数据.
- 将环形缓冲区中分区排序完的数据,使用的是归并排序算法,写入到本地磁盘当中
- 当这个maptask读取完给自己分配的任务切片的时候,会将存在本地磁盘中的相同分区的文件加载到内存中,进行合并排序.
- 将内存中合并排序完的数据,存入到yarn集群中的某一台nodemanager中,这台nodemanager机器就提供外部服务,以便于reduce可以下载到文件,到这里maptask的工作就结束了
- reducetask会从nodemanager中,以http协议的方式拉去属于自己分区的文件
- 在拉取到所有的文件后,reducetask会将文件,进行合并,排序,然后通过调用GroupingComparator将数据进行分组
- 根据mr程序中自己写的代码逻辑,进行数据运算处理
- 最后将处理完的数据存入到HDFS当中,这样一个mr程序的处理流程就结束了
流程图如下:
更多推荐
MR分布式程序详细内部工作流程
发布评论