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



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

我们遇到的问题是,由于我们希望尽快获得可查询的数据,因此每小时写入会导致大量小文件。

有很多例子,例如如何将小的镶木地板文件合并到一个大的镶木地板文件? 用于组合代码; 我的问题是,在移动/替换新压缩的文件时,您如何避免破坏人们的活动查询

元存储的每个分区都有一个文件系统位置。此位置通常基于表和分区:

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

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

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

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

最新更新