hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eric Chu (JIRA)" <>
Subject [jira] [Commented] (HIVE-6134) Merging small files based on file size only works for CTAS queries
Date Mon, 06 Jan 2014 19:24:51 GMT


Eric Chu commented on HIVE-6134:

Thanks [~ashutoshc] for pointing out the concatenate command. However, I think the ability
to merge files for a table partition is orthogonal to supporting hive.merge.mapfiles, hive.merge.mapredfiles,
and hive.merge.smallfiles.avgsize for "regular" queries (i.e., that don't result in a new
table). Even if we have the optimal number of files at input for each partition, users querying
over a large number of partitions with just SELECT FROM WHERE clauses will result in a large
number of small output files, and there will be negative sides effects such as Hue timeout,
the next job will have a large number of mappers, etc.

Can someone explain why the properties are supported only for queries with move tasks? Was
it just a matter of scoping, or is there some reason that makes this inappropriate for queries
without a move task? We are considering adding this support on our own and would like to get
some insights on the original design considerations. Thanks!

> Merging small files based on file size only works for CTAS queries
> ------------------------------------------------------------------
>                 Key: HIVE-6134
>                 URL:
>             Project: Hive
>          Issue Type: Bug
>    Affects Versions: 0.8.0, 0.10.0, 0.11.0, 0.12.0
>            Reporter: Eric Chu
> According to the documentation, if we set hive.merge.mapfiles to true, Hive will launch
an additional MR job to merge the small output files at the end of a map-only job when the
average output file size is smaller than hive.merge.smallfiles.avgsize. Similarly, by setting
hive.merge.mapredfiles to true, Hive will merge the output files of a map-reduce job. 
> My expectation is that this is true for all MR queries. However, my observation is that
are only used if ((ctx.getMvTask() != null) && (!ctx.getMvTask().isEmpty())). So,
for a regular SELECT query that doesn't have move tasks, these properties are not used.
> Is my understanding correct and if so, what's the reasoning behind the logic of not supporting
this for regular SELECT queries? It seems to me that this should be supported for regular
SELECT queries as well. One scenario where this hits us hard is when users try to download
the result in HUE, and HUE times out b/c there are thousands of output files. The workaround
is to re-run the query as CTAS, but it's a significant time sink.

This message was sent by Atlassian JIRA

View raw message