[
https://issues.apache.org/jira/browse/HIVE-10163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gopal V updated HIVE-10163:
---------------------------
Description:
The CommonMergeJoinOperator wastes CPU looking up the correct comparator for
each WritableComparable in each row.
{code}
@SuppressWarnings("rawtypes")
private int compareKeys(List<Object> k1, List<Object> k2) {
int ret = 0;
....
ret = WritableComparator.get(key_1.getClass()).compare(key_1, key_2);
if (ret != 0) {
return ret;
}
}
{code}
!mergejoin-parallel-lock.png!
!mergejoin-comparekeys.png!
The slow part of that get() is deep within {{ReflectionUtils.setConf}}, where
it tries to use reflection to set the Comparator config for each row being
compared.
!mergejoin-parallel-bt.png!
was:
The CommonMergeJoinOperator wastes CPU looking up the correct comparator for
each WritableComparable in each row.
{code}
@SuppressWarnings("rawtypes")
private int compareKeys(List<Object> k1, List<Object> k2) {
int ret = 0;
....
ret = WritableComparator.get(key_1.getClass()).compare(key_1, key_2);
if (ret != 0) {
return ret;
}
}
{code}
!mergejoin-comparekeys.png!
The slow part of that get() is deep within {{ReflectionUtils.setConf}}, where
it tries to use reflection to set the Comparator config for each row being
compared.
> CommonMergeJoinOperator calls WritableComparator.get() in the inner loop
> ------------------------------------------------------------------------
>
> Key: HIVE-10163
> URL: https://issues.apache.org/jira/browse/HIVE-10163
> Project: Hive
> Issue Type: Bug
> Components: Query Processor
> Affects Versions: 1.2.0
> Reporter: Gopal V
> Labels: JOIN, Performance
> Attachments: mergejoin-comparekeys.png, mergejoin-parallel-bt.png,
> mergejoin-parallel-lock.png
>
>
> The CommonMergeJoinOperator wastes CPU looking up the correct comparator for
> each WritableComparable in each row.
> {code}
> @SuppressWarnings("rawtypes")
> private int compareKeys(List<Object> k1, List<Object> k2) {
> int ret = 0;
> ....
> ret = WritableComparator.get(key_1.getClass()).compare(key_1, key_2);
> if (ret != 0) {
> return ret;
> }
> }
> {code}
> !mergejoin-parallel-lock.png!
> !mergejoin-comparekeys.png!
> The slow part of that get() is deep within {{ReflectionUtils.setConf}}, where
> it tries to use reflection to set the Comparator config for each row being
> compared.
> !mergejoin-parallel-bt.png!
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)