在 HDFS 中用压缩文件替换小文件时如何避免中断活动 Hive/Presto 查询?

How do you avoid breaking active Hive/Presto queries while substituting compacted files for small files in HDFS?

我们有 100 多个 HDFS 分区,我们每天每小时都会写入这些分区。分区是每天进行的,以便直接加载到 Hive 中,数据以 Parquet 格式写入。

我们 运行 遇到的问题是,因为我们希望尽快获得可查询的数据,所以每小时写入会产生大量小文件。

合并代码有很多例子,例如;我的问题是 在 moving/substituting 新压缩的小文件 时如何避免破坏人们的主动查询?

Metastore 对每个分区都有一个文件系统位置。此位置通常基于 table 和分区:

hdfs://namenode/data/web/request_logs/ds=2018-05-03

但是,位置可以是完全任意的,因此您可以利用它来实现快照隔离或版本控制。当您压缩分区中的文件时,将新文件写入新位置:

hdfs://namenode/data/web/request_logs/v2_ds=2018-05-03

压缩完成后,更新元存储中的分区位置以指向新位置。最后,在没有查询使用它之后的某个时间清理旧位置。