与mapred.cluster.map.memory.mb和mapred.job.map.memory.mb一起苦苦挣扎

时间:2013-11-16 20:34:03

标签: java hadoop jvm

最近,我正在探索Hadoop的任务内存限制。以下是我提出的一些总结和令人困惑的观点;如果我错了,希望有人可以纠正我,并告诉我有关这些令人困惑的问题的线索。

  1. as this post mentioned)mapred.child.java.opts和mapred.job.map.memory.mb是不同的内存使用方面。 mapred.child.java.opts只给出了子JVM可以使用的最大堆大小; mapred.job.map.memory.mb是Hadoop任务子进程允许的最大虚拟内存,可能比maprechild.java.opts大,因为它还需要存储除堆之外的其他内存(堆栈等)。

    < / LI>
  2. 由于以下原因,设置mapred.child.java.opts的somtimes是不够的:a。这个属性只考虑每个JVM的堆大小,因此它不灵活(例如,如果我的mapper任务需要更多内存,但我的reducer只需要一点内存);湾此属性不考虑从原始任务中生成新进程的情况,这些情况不受总内存约束,这种情况可能会对整个任务进程树带来巨大的内存使用影响。

  3. Hadoop为上述两个缺点提供了两种选择:一种是设置mapred.child.ulimit。这个严格上限的属性可能会阻止单个JVM进程泄漏内存并影响其他正在运行的进程。但是,这个属性也不灵活,不考虑衍生过程。

  4. 另一个选择是设置mapred.cluster.map.memory.mb(调度程序使用的Map-Reduce框架中single map slot的大小,就虚拟内存而言。{ {1}}通过mapred.job.map.memory.mb,直到mapred.cluster.max.map.memory.mb指定的限制)并设置mapre.job.map.memory.mb(大小,用术语表示)虚拟内存,作业的单个映射任务。如果此映射任务使用的内存多于此属性,则此任务将终止)。

  5. 对于Hadoop-0.x,选择4目前为止更好。但是,我对这个选择有一些疑问:书中说这个选择可以强制执行整个任务流程树,包括衍生流程。任何人都可以知道关于这个选择的更多细节,为什么它也可以限制产生的过程?

0 个答案:

没有答案