MSCK 优化 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

MSCK 优化

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

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

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

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

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

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

注意

如果元数据存储中有大量分区,检查文件系统中是否存在分区的步骤需要很长时间才能完成运行,因为必须对每个分区执行文件系统的 exists API 调用。

在 Amazon 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