hive0.14在tez上:每次插入一个文件,即使使用hive.merge激活

t2a7ltrp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(527)

每隔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;

提前谢谢

vulvrdjw

vulvrdjw1#

为目标表创建一个交换表(如下所示),以便将所有小文件合并到一个文件中。删除原始表并将交换表重命名为原始表。
一天做一次。

CREATE TABLE swap_measures SELECT * FROM measures;
DROP TABLE measures;
ALTER TABLE swap_measures RENAME TO measures;
kiz8lqtg

kiz8lqtg2#

如果您的目标是使用orc格式直接流到hive中,请查看下面的链接以阅读有关HiveStreamingAPI的更多信息
https://cwiki.apache.org/confluence/display/hive/streaming+data+ingest
希望这有帮助。

相关问题