我每天都会将数据摄取到 HDFS 中。从数据到 HDFS,我生成按日期和另一列分区的 Hive 表。一天有130G数据。生成数据后,我运行msck repair
. 现在每个 msck 任务超过 2 小时。在我看来,msck 会扫描整个表数据(我们有大约 200 天的数据),然后更新元数据。我的问题是:有没有办法让 msck 只扫描最后一天的数据,然后更新元数据以加快整个过程?顺便说一句,没有小文件问题,我已经在 msck 之前合并了小文件。
问问题
810 次
1 回答
0
当您使用此配置创建外部表或进行修复/恢复分区时:
set hive.stats.autogather=true;
Hive 扫描表位置中的每个文件以获取统计信息,这可能会花费太多时间。
解决方案是在创建/更改表/恢复分区之前将其关闭
set hive.stats.autogather=false;
查看这些相关票证:HIVE-18743、HIVE-19489、 HIVE-17478
如果您需要统计信息,您可以在必要时仅收集新分区的统计信息,使用
ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)]
COMPUTE STATISTICS
在此处查看详细信息:分析表
此外,如果您知道应该添加哪些分区,请使用ALTER TABLE ADD PARTITION - 您可以在单个命令中添加许多分区。
于 2020-04-29T11:53:03.960 回答