众所周知,地图任务有" 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堆。情景会发生吗?如果您对上述问题有所了解(如果情况可能发生),欢迎并感谢您的分享。
答案 0 :(得分:1)
至少前两个问题的答案来自于注意定义这两个属性的配置文件。
它们在mapred-default.xml中定义,可以选择在mapred-site.xml中重写。
这些配置文件管理整个数据节点,因此配置不是基于单个作业或任务。
因此,例如io.sort.mb为1024意味着将为运行该节点的所有map任务的排序阶段分配1024 mb的数据节点。它在所有地图任务之间共享。
我不完全确定第三个问题,但我的猜测是它应该按照类似的方式工作。