【发布时间】:2015-04-27 15:12:38
【问题描述】:
我有一个在 hive 中创建的表 test。它由idate 分区,并且经常需要插入分区。这可以将文件留在只有几行的 hdfs 上。
hadoop fs -ls /db/test/idate=1989-04-01
Found 3 items
-rwxrwxrwx 3 deployer supergroup 710 2015-04-26 11:33 /db/test/idate=1989-04-01/000000_0
-rwxrwxrwx 3 deployer supergroup 710 2015-04-26 11:33 /db/test/idate=1989-04-01/000001_0
-rwxrwxrwx 3 deployer supergroup 710 2015-04-26 11:33 /db/test/idate=1989-04-01/000002_0
我正在尝试编写一个简单的脚本来组合这些文件,以避免在我的分区上有很多小文件:
insert overwrite table test partition (idate)
select * from test
where idate = '1989-04-01'
distribute by idate
这行得通,它使用旧文件中的所有行创建新文件。问题是当我在更大的分区上运行这个脚本时,输出仍然是一个文件:
hadoop fs -ls /db/test/idate=2015-04-25
Found 1 items
-rwxrwxrwx 3 deployer supergroup 1400739967 2015-04-27 10:53 /db/test/idate=2015-04-25/000001_0
此文件大小超过 1 GB,但块大小设置为 128 MB:
hive> set dfs.blocksize;
dfs.blocksize=134217728
我可以手动设置减速器的数量以保持块的大小,但这不应该自动拆分吗?为什么 Hive 创建的文件大于允许的块大小?
注意这些是压缩的 rcfiles,所以我不能把它们放在一起。
【问题讨论】:
标签: hadoop hive hdfs partitioning