当几个map任务在同一个datanote上并行运行时,关于datanode内存使用的混淆

时间:2014-04-19 14:14:18

标签: java memory hadoop mapreduce hbase

众所周知,地图任务有" io.sort.mb"限制分阶段使用的内存。

1)我的困惑是:让我猜想如果datanode有3G备用内存,我设置" io.sort.mb" 1024米 当几个map任务在同一个datanode上并行运行并且需要在节点上超过3G备用内存的内存时,会发生什么。

类似的问题:

2)" mapred.child.java.opts" -Xmx1024m给出了jvm可以使用的最大内存,如果在1)中提到的datanode上并行运行多个map任务,这些并行映射是否可能占用整个3G备用内存,那么会发生什么。

关于hbase的类似问题:

鉴于:在hbase上设置BlockCache 0.3 *堆,设置Memstore 0.4 *堆,在极端情况下,regionserver中存在2个区域。 2区域都使用0.6 * heap = 1.2堆。情景会发生吗?

如果您对上述问题有所了解(如果情况可能发生),欢迎并感谢您的分享。

1 个答案:

答案 0 :(得分:1)

至少前两个问题的答案来自于注意定义这两个属性的配置文件。

它们在mapred-default.xml中定义,可以选择在mapred-site.xml中重写。

这些配置文件管理整个数据节点,因此配置不是基于单个作业或任务。

因此,例如io.sort.mb为1024意味着将为运行该节点的所有map任务的排序阶段分配1024 mb的数据节点。它在所有地图任务之间共享。

我不完全确定第三个问题,但我的猜测是它应该按照类似的方式工作。