MSCK优化 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

MSCK优化

Hive 在其元数据存储中存储每个表的分区列表。但是,当直接向文件系统添加分区或从文件系统中移除分区时,Hive 元数据存储不会意识到这些变化。该MSCK命令更新直接添加到文件系统或从文件系统中删除的分区的 Hive 元数据仓中的分区元数据。此命令的语法是:

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

Hive 将按如下方式实现此命令:

  1. Hive 从元数据存储中检索表的所有分区。然后根据文件系统中不存在的分区路径列表,创建一个要从元数据存储中移除的分区列表。

  2. Hive 收集文件系统中存在的分区路径,将其与元数据存储中的分区列表进行比较,然后生成需要添加到元数据存储的分区列表。

  3. Hive 使用 ADDDROPSYNC 模式更新元数据存储。

注意

当元存储中有许多分区时,检查文件系统中是否不存在分区的步骤需要很长时间才能运行,因为必须对每个分区进行文件系统的existsAPI调用。

在亚马逊 EMR 6.5.0 中,Hive 引入了一个名为的标志。hive.emr.optimize.msck.fs.check启用此标志后,Hive 将从上述步骤 2 中生成的文件系统分区路径列表中检查是否存在分区,而不是进行文件系统API调用。在 Amazon EMR 6.8.0 中,Hive 默认启用了此优化,因此无需设置标志。hive.emr.optimize.msck.fs.check