Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在与mapred.cluster.map.memory.mb和mapred.job.map.memory.mb斗争_Java_Hadoop_Jvm - Fatal编程技术网

Java 正在与mapred.cluster.map.memory.mb和mapred.job.map.memory.mb斗争

Java 正在与mapred.cluster.map.memory.mb和mapred.job.map.memory.mb斗争,java,hadoop,jvm,Java,Hadoop,Jvm,最近,我正在探索Hadoop的任务内存限制。以下是我提出的一些总结和令人困惑的观点;如果我错了,希望有人能纠正我,并给我一些关于混淆点的线索 ()mapred.child.java.opts和mapred.job.map.memory.mb是不同的内存使用方面。mapred.child.java.opts只给出了子JVM可以使用的最大堆大小;mapred.job.map.memory.mb是Hadoop任务子进程允许的最大虚拟内存,可以大于maprechild.java.opts,因为它还需要存

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

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

  • 有时设置mapred.child.java.opts是不够的,原因如下:。此属性只考虑每个JVM的堆大小,因此它不灵活(例如,如果我的映射器任务需要更多的内存,但我的减速机只需要一点内存);B该属性不考虑从原始任务中生成新进程的情况,这些任务不受其总内存的限制,这种情况可能会对整个任务进程树带来巨大的内存使用影响。
  • Hadoop为以上缺点提供了两种选择:一种是设置mapred.child.ulimit。这个严格上界的属性可以防止单个JVM进程泄漏内存并影响其他正在运行的进程。但是,这个属性也不灵活,不考虑孕育过程。

  • 另一种选择是设置mapred.cluster.map.memory.mb(调度程序使用的map Reduce框架中
    单个映射插槽的虚拟内存大小)。
    作业可以通过mapred.job.map.memory.mb为单个映射任务请求多个插槽,上限为mapred.cluster.max.map.memory.mb指定的限制)以及设置mapre.job.map.memory.mb(该作业的单个映射任务的虚拟内存大小。如果此映射任务使用的内存超过此属性,则此任务将终止)


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

    正在努力解决同样的问题。有什么办法吗?