The fundamental idea of YARN is to split up the functionalities of resource management and job scheduling/monitoring into separate daemons. The idea is to have a global ResourceManager, (RM), and a per-application ApplicationMaster, (AM). An application can be a single job, or a DAG (distributed array of jobs). The data-computation framework is formed by the NodeManager and the ResourceManager. The ResourceManager is the ultimate authority who arbitrates the allocation of resources among all applications in the system. The NodeManager is the per-machine framework agent who is responsible for containers, monitoring their resource usage (cpu, memory, disk, network) and reporting the same to the ResourceManager/Scheduler. The per-application ApplicationMaster, which is in essence a framework-specific library, is responsible for negotiating resources from ResourceManager and working with NodeManagers to execute and monitor tasks.