MSCK 优化
Hive 在其元数据存储中存储每个表的分区列表。但是,当直接向文件系统添加分区或从文件系统中移除分区时,Hive 元数据存储不会意识到这些变化。对于直接添加到文件系统或从文件系统中移除的分区,MSCK 命令
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
Hive 将按如下方式实现此命令:
-
Hive 从元数据存储中检索表的所有分区。然后根据文件系统中不存在的分区路径列表,创建一个要从元数据存储中移除的分区列表。
-
Hive 收集文件系统中存在的分区路径,将其与元数据存储中的分区列表进行比较,然后生成需要添加到元数据存储的分区列表。
-
Hive 使用
ADD
、DROP
或SYNC
模式更新元数据存储。
注意
如果元数据存储中有大量分区,检查文件系统中是否存在分区的步骤需要很长时间才能完成运行,因为必须对每个分区执行文件系统的 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
。