Interesting, I didn't realize that. If that's the case then I suppose it'd
be really bad for me to circumvent the lock by reproducing the Driver#run
method by calling Driver#compile and Driver#execute directly from within
my app. 

If that is the case why make Driver#compile and Driver#execute public
methods? There doesn't seem to be any inheritance that requires them to be
public and the fact that they are public opens up a thread safety issue.

Thanks,
Kris

On 8/15/13 1:11 PM, "Brock Noland" <br...@cloudera.com> wrote:

>The hive semantic analyzer is not fully thread safe.  We'd like to remove
>that lock but it will be a large project.
>
>Brock
>
>
>On Thu, Aug 15, 2013 at 11:12 AM, Kristopher Glover
><kglo...@appnexus.com>wrote:
>
>> Hi Everyone,
>>
>> I'm experiencing a threading issue with the Hive client where I want to
>> run multiple queries on the same JVM.
>>
>>  The problem I'm having is that org.apache.hadoop.hive.ql.Driver#run
>>(line
>> 907)  has the following few lines of code :
>>
>>  synchronized (compileMonitor) {
>>
>>       ret = compile(command);
>>
>>     }
>>
>>
>> The compileMonitor is a static so it blocks all threads even though I'm
>> using different instances of the Driver class. I could explicitly call
>> Driver#compile then Driver#execute to avoid the synchronized block but I
>> don't know if it's serving a special purpose. Does anyone know why that
>> synchronized block is there and if its really necessary ?
>>
>>
>> Thanks,
>>
>> Kris
>>
>
>
>
>-- 
>Apache MRUnit - Unit testing MapReduce - http://mrunit.apache.org

Reply via email to