[ 
https://issues.apache.org/jira/browse/HIVE-11502?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14663199#comment-14663199
 ] 

Yongzhi Chen commented on HIVE-11502:
-------------------------------------

It is a regression, I ran the query in 0.13.1 version with hive.map.aggr is 
true, it finished in 20 seconds.
In the master branch, the major time spend in following stack.
{noformat}
HashMap<K,V>.getEntry(Object) line: 465 
HashMap<K,V>.get(Object) line: 417      
PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(String) line: 373        
PrimitiveTypeInfo.getPrimitiveTypeEntry() line: 85      
PrimitiveTypeInfo.getPrimitiveCategory() line: 63       
WritableDoubleObjectInspector(AbstractPrimitiveObjectInspector).getPrimitiveCategory()
 line: 58 
ObjectInspectorUtils.compare(Object, ObjectInspector, Object, ObjectInspector, 
MapEqualComparer) line: 694      
ObjectInspectorUtils.compare(Object, ObjectInspector, Object, ObjectInspector) 
line: 668        
ListObjectsEqualComparer$FieldComparer.areEqual(Object, Object) line: 127       
ListObjectsEqualComparer.areEqual(Object[], Object[]) line: 172 
KeyWrapperFactory$ListKeyWrapper.equals(Object) line: 101       
HashMap<K,V>.getEntry(Object) line: 467 
HashMap<K,V>.get(Object) line: 417      
GroupByOperator.processHashAggr(Object, ObjectInspector, KeyWrapper) line: 777  
GroupByOperator.processKey(Object, ObjectInspector) line: 693   
GroupByOperator.process(Object, int) line: 761  
SelectOperator(Operator<T>).forward(Object, ObjectInspector) line: 837  
SelectOperator.process(Object, int) line: 88    
TableScanOperator(Operator<T>).forward(Object, ObjectInspector) line: 837       
TableScanOperator.process(Object, int) line: 97 
MapOperator$MapOpCtx.forward(Object) line: 162  
MapOperator.process(Writable) line: 508 
ExecMapper.map(Object, Object, OutputCollector, Reporter) line: 163     
{noformat}
It seems that heavily used 
PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(String) slows down the 
query. So I change the code to store the PrimitiveTypeEntry as instance 
variable in PrimitiveTypeInfo. This does improve  the performance a lot, now 
the query can finish in 1 hour. But it is still very slow.
I checked 0.13.1 code, it uses Hashmap too, but much much faster. 
I do not know why the HashMap search is so slow in master branch(and 1.1 or 
later version). 


> Map side aggregation is extremely slow
> --------------------------------------
>
>                 Key: HIVE-11502
>                 URL: https://issues.apache.org/jira/browse/HIVE-11502
>             Project: Hive
>          Issue Type: Bug
>          Components: Logical Optimizer, Physical Optimizer
>    Affects Versions: 1.2.0
>            Reporter: Yongzhi Chen
>            Assignee: Yongzhi Chen
>
> For the query as following:
> {noformat}
> create table tbl2 as 
> select col1, max(col2) as col2 
> from tbl1 group by col1;
> {noformat}
> If the column for group by has many different values (for example 400000), 
> the map side aggregation is very slow. I ran the query which took more than 3 
> hours , after 3 hours, I have to kill the query.
> The same query can finish in 7 seconds, if I turn off map side aggregation by:
> {noformat}
> set hive.map.aggr = false;
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to