![](/img/trans.png)
[英]How merge files in Hive partitioned and bucketed files into one big file?
[英]Hive 0.14 on Tez : one file per insert, even with hive.merge. activated
每隔15分钟,我需要将数据插入存储为ORC的不同表中并汇总值。 那些INSERT使用动态分区。 每个INSERT都会在分区中创建一个新文件,这会减慢聚合查询的速度。 我在网上搜索,发现了与此案有关的一些主题。
所以我在hive-site.xml上添加了这些设置:
hive.merge.mapfiles =true;
hive.merge.mapredfiles =true;
hive.merge.tezfiles = true
hive.merge.smallfiles.avgsize=256000000;
但是即使有这些设置,每个插入也会在每个分区上创建一个新文件,并且文件不会合并。
有人对我如何解决此问题有想法吗?
我的群集是Azure HDInsight群集3.2,具有Hive 0.14,Tez 0.5.2。 我的插入查询是这样的:
INSERT INTO TABLE measures PARTITION(year, month, day)
SELECT area,
device,
date,
val,
year,
month,
day
FROM stagingmeasures
DISTRIBUTE BY year, month, day;
提前致谢
为目标表创建一个交换表(如下所示),以便将所有小文件合并为一个文件。 删除原始表,然后将交换表重命名为原始表。
每天执行一次。
CREATE TABLE swap_measures SELECT * FROM measures;
DROP TABLE measures;
ALTER TABLE swap_measures RENAME TO measures;
如果您的目标是使用ORC格式直接流式传输到Hive,请查看下面的链接以了解有关Hive流式API的更多信息
https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.