Hive bucketing产生的文件比预期多,为什么?

时间:2017-08-07 22:15:16

标签: hadoop hive hiveql

我有一个分区和群集的配置单元表(使用配置单元1.2):

start /B %~dp0jre\bin\java.exe -jar %~dp0myJar.jar

我将数据插入其中:

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

我希望它为每个分区生成100个文件。 相反,它产生了更多:

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;

请帮助我理解为什么会发生这种情况以及如何避免这种情况。

2 个答案:

答案 0 :(得分:1)

可能与你的Hive版本有关。

https://issues.apache.org/jira/browse/HIVE-10880

答案 1 :(得分:0)

似乎由于@lake在Hive 1.2中描述的错误,我需要使用一种语法来明确设置reduce任务的数量:

SET mapred.reduce.tasks = 100;

然后使用DISTRIBUTE BYCLUSTER BY明确分发。