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

问题描述 投票:0回答:1

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

我们遇到的问题是,因为我们希望尽可能快地查询数据,所以每小时写入会产生许多小文件。

有很多例子,例如How to combine small parquet files to one large parquet file?用于组合代码;我的问题是,如何在新压缩的文件中移动/替换小的文件时,如何避免破坏人们的活动查询?

apache-spark hadoop hive hdfs presto
1个回答
1
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.