Gopal V created HIVE-5169:
-----------------------------

             Summary: Sorted Bucketed Partitioned Insert does not sort by 
dynamic partition column causing reducer OOMs/lease-expiry errors
                 Key: HIVE-5169
                 URL: https://issues.apache.org/jira/browse/HIVE-5169
             Project: Hive
          Issue Type: Bug
    Affects Versions: 0.12.0
         Environment: Ubuntu LXC, hadoop-2
            Reporter: Gopal V


When a bulk-ETL operation is in progress, the query plan only sorts based on 
the SORTED BY key.

This means that the FileSinkOperator in the reducer has to keep all the dynamic 
partition RecordWriters open till the end of the reducer lifetime.

A more MR-friendly approach would be to sort by <partition_col,sorted_col> so 
that the data entering the reducer will not require to keep exactly one 
partition and bucket open at any given time.

As a test-case a partitioned insert for the TPC-h benchmark's lineitem table 
will suffice

{code}
create table lineitem
(L_ORDERKEY INT,
...
partitioned by (L_SHIPDATE STRING)
clustered by (l_orderkey)
sorted by (l_orderkey)
into 4 buckets
stored as ORC;

explain from (select
L_ORDERKEY ,
...) tbl 
insert overwrite table lineitem partition (L_SHIPDATE)
select *
;
{code}

The generated plan very clearly has 

{code}
         Reduce Output Operator
                key expressions:
                      expr: _col0
                      type: int
                sort order: +
                Map-reduce partition columns:
                      expr: _col0
                      type: int
                tag: -1
{code}

And col0 being L_ORDERKEY.

In the FileSinkOperator over at the reducer side, this results in a larger than 
usual number of open files.

This causes memory pressure due to the compression buffers used by ORC/RCFile 
and really slows down the reducers.

A side-effect of this is that I had to pump 350Gb of TPC-h data through 4 
reducers, which on occasion took > 1 hour to get from opening a file in the FS 
to writing the first ORC stripe.

This caused HDFS lease expiry and the task dying from that error.

All of these can be avoided by adding the partition column to the sort keys as 
well as the partition keys & keeping only one writer open in the 
FileSinkOperator.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to