2017-08-07 5 views
0

私はパーティションを持っているし、ハイブテーブルをクラスタ化(ハイブ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 

は、私はこれが起こって、どのように私はそれを避けることができるかもしれない理由を理解するのに役立ちます。

+0

テーブルの形式は何ですか? – hlagos

+0

ORC、スナッピング圧縮 – zemekeneng

答えて

0

ためハイブ1.2に@lakeによって記述バグのため、私は明示的に削減するタスクの数を設定構文を使用する必要があるようだ:

明示的

SET mapred.reduce.tasks = 100;

そして、 DISTRIBUTE BYまたはCLUSTER BYで配布してください。

関連する問題