[msck修复大表需要很长时间

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

我每天都将数据摄取到HDFS中。从数据到HDFS,我生成按日期和另一列划分的Hive表。一天有130G数据。生成数据后,我运行msck repair。现在,每个msck的任务都超过2个小时。在我看来,msck将扫描整个表数据(我们大约有200天的数据),然后更新元数据。我的问题是:有没有办法让msck只扫描最后一天的数据,然后更新元数据以加快整个过程?顺便说一下,没有小文件问题,我已经在msck之前合并了小文件。

hive hdfs bigtable hive-partitions
1个回答
0
投票

使用此配置创建外部表或进行修复/恢复分区时:

set hive.stats.autogather=true;

Hive扫描表位置中的每个文件以获取统计信息,这可能花费太多时间。

解决方案是在创建/更改表/恢复分区之前将其关闭

set hive.stats.autogather=false; 

查看这些相关票证:HIVE-18743HIVE-19489, HIVE-17478

如果需要统计信息,则可以只使用]收集新分区的统计信息。

ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)]  
  COMPUTE STATISTICS 

在此处查看详细信息:ANALYZE TABLE

此外,如果您知道应该添加哪些分区,请使用ALTER TABLE ADD PARTITION-您可以在单个命令中添加许多分区。

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