We end up of shipping all physical plan to the backend. One direct result is UDFContext is not set in OutputCommitter. Here is how:
1. PigGraceShuffleVertexManager deserialize "pig.tez.plan". TezOperator.stores reference physical plan so physical plan get deserialize.
2. When deserialize POUserFunc, POUserFunc.instantiateFunc is invoked. Inside it, POUserFunc.setFuncInputSchema would use UDFContext and leave an entry there (though it is empty map).
3. MapRedUtil.setupUDFContext would only deserialize if UDFContext is empty, since we already touch UDFContext with some maps, UDFContext is not deserialized