> Now I am rather confused about the following parameters (for example
> mapreduce.reduce versus
> mapreduce.map) and their correlation to each other

They have no relationship with each other. They are meant for two
different task types in MapReduce.

In general you run fewer reducers than mappers, so they are given more
memory per-task than mapppers - most commonly it's ~2x of the other, but
they are not related in any way.

The ideal numbers to use for both are exact multiples of
yarn.scheduler.minimum-allocation-mb (since YARN rounds up to that
quantum).

For example, with a 1536 min-alloc, you're better off allocating 4608 &
getting -Xmx3686, since the 4096 ask will anyway pad up to 4608, losing
500Mb in the process.

This is very annoying & complex, so with Tez there's exactly 1 config &
you can just skip the -Xmx param for hive.tez.java.opts. Tez will inject
an Xmx after a container alloc returns (so that re-adjustment is
automatic).

> <property>
> <name>mapreduce.map.memory.mb</name>
> <value>4096</value>
> </property>
>  
> <property>
> <name>mapreduce.reduce.memory.mb</name>
> <value>8192</value>
> </property>
>  
> <property>
> <name>mapreduce.map.java.opts</name>
> <value>-Xmx3072m</value>
> </property>
>  
> <property>
> <name>mapreduce.reduce.java.opts</name>
> <value>-Xmx6144m</value>
> </property>

Those configs are correct, the GC heap is approximately 80% of the
allocated container (the JVM uses non-GC buffers for operations like Zlib
decompression).


Cheers,
Gopal


Reply via email to