You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by gu...@apache.org on 2014/09/25 21:38:13 UTC
svn commit: r1627618 - in
/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec:
ExprNodeGenericFuncEvaluator.java GroupByOperator.java
Author: gunther
Date: Thu Sep 25 19:38:12 2014
New Revision: 1627618
URL: http://svn.apache.org/r1627618
Log:
HIVE-8188: ExprNodeGenericFuncEvaluator::_evaluate() loads class annotations in a tight loop (Gopal V via Gunther Hagleitner)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java?rev=1627618&r1=1627617&r2=1627618&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java Thu Sep 25 19:38:12 2014
@@ -45,6 +45,7 @@ public class ExprNodeGenericFuncEvaluato
transient ExprNodeEvaluator[] children;
transient GenericUDF.DeferredObject[] deferredChildren;
transient boolean isEager;
+ transient boolean isConstant = false;
/**
* Class to allow deferred evaluation for GenericUDF.
@@ -124,7 +125,10 @@ public class ExprNodeGenericFuncEvaluato
if (context != null) {
context.setup(genericUDF);
}
- return outputOI = genericUDF.initializeAndFoldConstants(childrenOIs);
+ outputOI = genericUDF.initializeAndFoldConstants(childrenOIs);
+ isConstant = ObjectInspectorUtils.isConstantObjectInspector(outputOI)
+ && isDeterministic();
+ return outputOI;
}
@Override
@@ -154,12 +158,11 @@ public class ExprNodeGenericFuncEvaluato
@Override
protected Object _evaluate(Object row, int version) throws HiveException {
- rowObject = row;
- if (ObjectInspectorUtils.isConstantObjectInspector(outputOI) &&
- isDeterministic()) {
+ if (isConstant) {
// The output of this UDF is constant, so don't even bother evaluating.
- return ((ConstantObjectInspector)outputOI).getWritableConstantValue();
+ return ((ConstantObjectInspector) outputOI).getWritableConstantValue();
}
+ rowObject = row;
for (int i = 0; i < deferredChildren.length; i++) {
deferredChildren[i].prepare(version);
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java?rev=1627618&r1=1627617&r2=1627618&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/GroupByOperator.java Thu Sep 25 19:38:12 2014
@@ -77,6 +77,7 @@ public class GroupByOperator extends Ope
private static final Log LOG = LogFactory.getLog(GroupByOperator.class
.getName());
+ private static final boolean isTraceEnabled = LOG.isTraceEnabled();
private static final long serialVersionUID = 1L;
private static final int NUMROWSESTIMATESIZE = 1000;
@@ -101,6 +102,7 @@ public class GroupByOperator extends Ope
transient ExprNodeEvaluator unionExprEval = null;
transient GenericUDAFEvaluator[] aggregationEvaluators;
+ transient boolean[] estimableAggregationEvaluators;
protected transient ArrayList<ObjectInspector> objectInspectors;
transient ArrayList<String> fieldNames;
@@ -557,11 +559,13 @@ public class GroupByOperator extends Ope
// Go over all the aggregation classes and and get the size of the fields of
// fixed length. Keep track of the variable length
// fields in these aggregation classes.
+ estimableAggregationEvaluators = new boolean[aggregationEvaluators.length];
for (int i = 0; i < aggregationEvaluators.length; i++) {
fixedRowSize += javaObjectOverHead;
AggregationBuffer agg = aggregationEvaluators[i].getNewAggregationBuffer();
if (GenericUDAFEvaluator.isEstimable(agg)) {
+ estimableAggregationEvaluators[i] = true;
continue;
}
Field[] fArr = ObjectInspectorUtils.getDeclaredNonStaticFields(agg.getClass());
@@ -765,10 +769,12 @@ public class GroupByOperator extends Ope
flushHashTable(true);
hashAggr = false;
} else {
- LOG.trace("Hash Aggr Enabled: #hash table = " + numRowsHashTbl
- + " #total = " + numRowsInput + " reduction = " + 1.0
- * (numRowsHashTbl / numRowsInput) + " minReduction = "
- + minReductionHashAggr);
+ if (isTraceEnabled) {
+ LOG.trace("Hash Aggr Enabled: #hash table = " + numRowsHashTbl
+ + " #total = " + numRowsInput + " reduction = " + 1.0
+ * (numRowsHashTbl / numRowsInput) + " minReduction = "
+ + minReductionHashAggr);
+ }
}
}
}
@@ -952,7 +958,7 @@ public class GroupByOperator extends Ope
AggregationBuffer[] aggs = hashAggregations.get(newKeys);
for (int i = 0; i < aggs.length; i++) {
AggregationBuffer agg = aggs[i];
- if (GenericUDAFEvaluator.isEstimable(agg)) {
+ if (estimableAggregationEvaluators[i]) {
totalVariableSize += ((GenericUDAFEvaluator.AbstractAggregationBuffer)agg).estimate();
continue;
}
@@ -966,8 +972,10 @@ public class GroupByOperator extends Ope
// Update the number of entries that can fit in the hash table
numEntriesHashTable =
(int) (maxHashTblMemory / (fixedRowSize + (totalVariableSize / numEntriesVarSize)));
- LOG.trace("Hash Aggr: #hash table = " + numEntries
- + " #max in hash table = " + numEntriesHashTable);
+ if (isTraceEnabled) {
+ LOG.trace("Hash Aggr: #hash table = " + numEntries
+ + " #max in hash table = " + numEntriesHashTable);
+ }
}
// flush if necessary