1. 必要性
Hadoop提供了多个配置参数使得admin和user可以灵活设定内存;有些参数有defaut-value, 有些选项是cluster specific以支持memory-intensive作业。
当构建一个cluster时,admin可以先设定一些appropriate default value;其他一些参数设定可根据cluster硬件配置(如任务可获得的物理内存和虚拟内存的总大小、slave配置的slots的数目、在slave上运行的process的需求)和作业类型(如内存密集型任务)而确定。
2. 内存监控
(1) 监控任务内存的目的
防止MapReduce task占用了过量的内存(consuming memory beyond a limit),从而导致同在该slave上运行的其他进程、其他任务、或者daemon(例如DataNode或者TaskTracker)。
(2) virtual memory和physical memory
Hadoop可以监控节点的virtual memory和physical memory,两者之间独立。然而,在streaming应用中,由于程序需要加载了libraries来执行任务,故virtual memory使用较多。在这种情况下,监控physical memory会更准确.
(3) hadoop允许为作业指定期望所需内存的最大值。通过resource aware scheduling and monitoring, hadoop tries to确保满足task数量,以满足限制