假设我有 100 个映射器并行运行,总共有 500 个映射器在运行。
每个映射器接收的输入大小几乎相同,每个映射器应该花费的处理时间应该或多或少相同。
但是假设前 100 个映射器在 20 分钟内完成,接下来的 100 个映射器大约需要 25-30 分钟,下一批 100 个映射器每个大约需要 40-50 分钟。然后我们得到 GC 开销错误。
为什么会这样?
我已经设置了以下配置:
<property><name>mapred.child.java.opts</name><value>-Xmx4096m</value></property>
<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
这里还能做什么?