我有一个分区和群集的配置单元表(使用配置单元1.2):
hive> describe formatted myClusteredTable;
# col_name data_type
utc_timestamp timestamp
...
clusteredId bigint
# Partition Information
# col_name data_type
datePartition string
# Detailed Table Information
Num Buckets: 100
Bucket Columns: [clusteredId]
Sort Columns: [Order(col:clusteredId, order:1), Order(col:utc_timestamp, order:1)]
Storage Desc Params:
serialization.format 1
我把数据像这样插入其中:
SET hive.enforce.bucketing=true;
SET hive.enforce.sorting=true;
INSERT OVERWRITE TABLE myClusteredTable PARTITION (datePartition)
SELECT ...
utcTimestamp,
clusteredId,
datePartition
FROM (
... subquery ...
) subquery
SORT BY datePartition, clusteredId, utcTimestamp;
我希望它为每个分区生成100个文件。相反,它产生了更多:
$ find /path/to/partition/dt=2017-01-01 -type f | wc -l
1425
$ find /path/to/partition/dt=2017-01-02 -type f | wc -l
1419
$ find /path/to/partition/dt=2017-01-03 -type f | wc -l
1427
请帮助我理解为什么会发生这种情况,以及我如何避免它。
2条答案
按热度按时间xxhby3vn1#
似乎由于hive1.2中@lake描述的bug,我需要使用一种语法来显式设置reduce任务的数量:
SET mapred.reduce.tasks = 100;
然后显式分发DISTRIBUTE BY
或者CLUSTER BY
.gg58donl2#
可能和你的Hive版本有关。
https://issues.apache.org/jira/browse/hive-10880