Tez 上的 Hive 0.14:每个插入一个文件,即使 hive.merge。活性
Hive 0.14 on Tez : one file per insert, even with hive.merge. activated
每隔 15 分钟,我需要将数据插入存储为 ORC 的不同表中并聚合值。那些 INSERT 使用动态分区。
每个 INSERT 都会在分区中创建一个新文件,这会减慢我的聚合查询速度。我在网上搜索,发现了一些关于这个案例的主题,比如 this one.
所以我在配置单元上添加了-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;
提前致谢
如果您的目标是使用 ORC 格式直接流式传输到 Hive,请查看下面的 link 以阅读有关 Hive Streaming 的更多信息 API
https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest
希望对您有所帮助。
为您的目标 table 创建交换 table(如下所示),以便所有小文件将合并为一个文件。
删除原始 table 并将交换 table 重命名为原始 table.
一天做一次。
CREATE TABLE swap_measures SELECT * FROM measures;
DROP TABLE measures;
ALTER TABLE swap_measures RENAME TO measures;
每隔 15 分钟,我需要将数据插入存储为 ORC 的不同表中并聚合值。那些 INSERT 使用动态分区。 每个 INSERT 都会在分区中创建一个新文件,这会减慢我的聚合查询速度。我在网上搜索,发现了一些关于这个案例的主题,比如 this one.
所以我在配置单元上添加了-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;
提前致谢
如果您的目标是使用 ORC 格式直接流式传输到 Hive,请查看下面的 link 以阅读有关 Hive Streaming 的更多信息 API
https://cwiki.apache.org/confluence/display/Hive/Streaming+Data+Ingest
希望对您有所帮助。
为您的目标 table 创建交换 table(如下所示),以便所有小文件将合并为一个文件。 删除原始 table 并将交换 table 重命名为原始 table.
一天做一次。
CREATE TABLE swap_measures SELECT * FROM measures;
DROP TABLE measures;
ALTER TABLE swap_measures RENAME TO measures;