每隔15分钟,我需要将数据插入到存储为orc的不同表中,并聚合这些值。这些插件使用动态分区。每次插入都会在分区中创建一个新文件,这会减慢聚合查询的速度。我在网上搜索了一下,找到了一些关于这个案子的主题。
因此,我在hive-site.xml中添加了以下设置:
hive.merge.mapfiles =true;
hive.merge.mapredfiles =true;
hive.merge.tezfiles = true
hive.merge.smallfiles.avgsize=256000000;
但即使使用这些设置,每个insert也会在每个分区上创建一个新文件,并且不会合并文件。
有人知道我如何解决这个问题吗?
我的集群是一个azurehdinsight集群3.2,配置单元0.14,tez 0.5.2。我的insert查询如下:
INSERT INTO TABLE measures PARTITION(year, month, day)
SELECT area,
device,
date,
val,
year,
month,
day
FROM stagingmeasures
DISTRIBUTE BY year, month, day;
提前谢谢
2条答案
按热度按时间vulvrdjw1#
为目标表创建一个交换表(如下所示),以便将所有小文件合并到一个文件中。删除原始表并将交换表重命名为原始表。
一天做一次。
kiz8lqtg2#
如果您的目标是使用orc格式直接流到hive中,请查看下面的链接以阅读有关HiveStreamingAPI的更多信息
https://cwiki.apache.org/confluence/display/hive/streaming+data+ingest
希望这有帮助。