希望大家多多点赞 ,多多关注。 有问题大家随时讨论。
MR程序运行阶段:
1.map task 读文件,是通过TextInputFormat(默认)(-->RecordReader-->
read()) 一次读一行,
返回key value,-->Mapper{map(k,v);context.write;输出}-->OutPutCollector收集器-->写到环形缓冲区(默认100M,只写80%,前写后清理,防止溢出)即将溢出时调用combination组件,逻辑和reducede 的一样,合并相同的key,value。提高效率。
2.reduce task 将 map task (合并,归并排序)的最终结果文件下载到本地磁盘工作目录。
3.Reduce task 一次读取一组,通过reduce(k,values){context.write(k,v)}->-OotPutFormat-->
RecordWriter.write(k,v)将文件输出。
MR与yarn的工作机制:
1.mr程序在客户端提交 ,main方法的job.submit()会向YARrunner 提交。
2.YARrunner 向 resource manager 申请提交一个application
3.resource manageg 反馈给 YARrunner application资源提交路径:hdfs://xxxx.../.staging以及application_id
4.YARNrunner 向 hdfs 提交job运行所需要的资源文件:job.split
Job.xml,xxxx.jar
5.YARNrunner资源提交完毕后,向resource manager 申请 mrAppMaster
6.resourcemanager 将用户的请求初始化成一个task ,并将task放入队列之中(FIFO调度策略)
7.node manager 领取到task任务(只有一个MRAppmaster),创建容器,从hdfs上下载job资源到本地。首先启动MRAppmaster
8.MRAppmaster 向 resource manager申请运行maptask的容器
9.resource manager反馈给MRAppmaster 领取到map task 的nodemanager的地址,并且领取任务的node manager 创建容器。
10.MPAppmastsr 向node manager 发送程序启动脚本。
11.map 阶段运行结束之后,MPAppmastst 向RM申请容器,运行reduce task程序。
Map task reduce task 都由yarnchild 线程运行。
Map task 都被 MRAppmaster监管。MR程序 和Yarn 不是耦合的。
Yarn:资源调度系统,只负责程序运行所需要的分配回收等调度任务与应用程序的内部运作机制完全无关.
YARN已经成为一个通用资源调度平台,许多运算框架都可以借助YARN来实习资源管理。