在将压缩文件替换为HDFS中的小文件时,如何避免破坏活动的Hive / Presto查询?

时间:2018-08-30 15:58:20

标签: apache-spark hadoop hive hdfs presto

我们每天要写入100个HDFS分区。每天都要进行分区,以便直接将其加载到Hive中,并且数据以Parquet格式写入。

我们遇到的问题是,因为我们希望尽快获取可查询的数据,所以每小时写入的结果很多。

有很多示例,例如How to combine small parquet files to one large parquet file?用于组合代码。我的问题是在将新压缩的文件替换为较小的文件时,如何避免破坏人们的活跃查询

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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