MapReduce程序提交Yarn流程:
不同计算引擎在Yarn上AppMaster、AppWorker及运行方式:
Engine | AppMaster | AppWorker | Task Unit |
---|---|---|---|
MapReduce | MRAppMaster | MapTask / ReduceTask | Process (JVM进程) |
Spark | ApplicationMaster | Executor | Thread(一个Executor的JVM进程中运行多个Task线程) |
Flink | JobManager | TaskManager | Thread |
1. MR多进程模型:
- 每个Task是一个独立的JVM进程,启动Task的开销相对较大;
- 每个Task运行完后,将释放占用的资源,资源无法被其他Task复用;即每个Task都要经历:申请资源—> 运行Task –> 释放资源的过程。
- MR允许用户单独为Map Task和Reduce Task设置不同的资源,进而细粒度控制任务占用资源量,有利于大作业的正常平稳运行。
Spark多线程模型:
- 每个Executor是一个独立的JVM进程中,Executor启动后一直运行,资源可以一直被Task复用,直到Spark程序运行完成后才释放退出;
- 多个Task在Executor中以多线程模式运行(可共享内存)。
2. Container:是一个独立的进程空间(JVM进程),可能运行ApplicationMaster或其他各类任务。