Tez上的Hive 0.14:每个插入一个文件,即使使用hive.merge也是如此。活性

时间:2015-09-14 13:15:26

标签: azure hadoop hive hdinsight

每隔15分钟,我需要将数据插入存储为ORC的不同表中并聚合这些值。那些INSERT使用动态分区。 每个INSERT在分区中创建一个新文件,这会减慢我的聚合查询。我在网上搜索,发现了一些关于此案例的主题,如this one.

所以我在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;

提前致谢

2 个答案:

答案 0 :(得分:2)

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

一天做一次。

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

答案 1 :(得分:0)

如果您的目标是使用ORC格式直接流入Hive,请查看以下链接以了解有关Hive Streaming API的更多信息

https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest

希望这有帮助。