Gopal, 

Here is basically my code and I can clearly see configure() was not called and 
JavaCode on GenericUDF#configure reads:  "This is only called in runtime of 
MapRedTask.". Also based on my observation, the query is not executed as a M/R 
because Yarn monitoring knows nothing about the job. Seems to be the query is 
executed locally (forgive me for knowing very little on how Tez works 
internally).

=========================================== 

public class GenericUDFTracker extends GenericUDF {
    private MapredContext context;

    @Override
    public void configure(MapredContext aContext) {
        super.configure(aContext);
        context = aContext;
        LOGGER.info("configure setting context:{}", context); //this never 
executed
    }

    @Override
    public Object evaluate(DeferredObject[] arguments)
        throws HiveException {
        LOGGER.info(ArrayUtils.toString(arguments));

        String arg0 = elementOI0.getPrimitiveJavaObject(arguments[0].get());
        String arg1 = elementOI1.getPrimitiveJavaObject(arguments[1].get());
        LOGGER.info("context = {}", context);  //it prints 'context = null'
        Reporter reporter = context.getReporter(); //NPE is thrown
        LOGGER.info("reporter = {}", reporter);
       ...
  }
}

-----Original Message-----
From: Gopal Vijayaraghavan [mailto:go...@hortonworks.com] On Behalf Of Gopal 
Vijayaraghavan
Sent: Tuesday, April 21, 2015 11:41 PM
To: user@hive.apache.org
Subject: Re: MapredContext not available when tez enabled


 
> A bit digging shows that GenericUDF#configure method was not called. 
>So in this case, is it possible to get counters through other means, or 
>we have to implement Counter concept ourselves?

You should be getting a TezContext object there (which inherits from 
MapRedContext).

And the method should get called depending on a needConfigure() check - if it 
is not getting called, that is very strange.

Cheers,
Gopal


Reply via email to