当前位置:   article > 正文

Hive常用命令之MSCK REPAIR TABLE命令概述

msck repair table

对于MSCK REPAIR TABLE命令,小编在工作中初见时,只有简单的理解——“刷新分区”。细究其原理便不得而知了。现在来将学习的内容记录一下。

首先,Hive能检测到的分区信息,存储在哪里?怎么新建分区才会存储在这个可(被Hive)检测位置上?怎么新建分区不会存储在这个可(被Hive)检测的位置上?MASK REAPRE TABLE有什么作用?

Hive能检测到的分区信息,存储在哪里?
分区同database、table等一样,是Hive的元数据信息之一,存储在Derby、MySQL等数据库中。

Hive怎么获取元数据信息(包括分区)?
Hive客户端连接metastore服务,metastrore再去连接MySQL获取元数据信息。(备注:有了metastore,多个客户端可以同时连接,而不需要知道MySQL的用户名和密码,只需要连接MySQL服务即可。)

怎么新建分区,分区信息才会存储到MySQL中?
插入数据之前,使用alter table xxx add partition()创建分区;或者插入数据时,使用insert into table xxx partition() value()创建分区,这些操作都会在MySQL中记录下新的分区信息。

怎么新创建分区不会存储在MySQL中?
Hive的数据实际存储在HDFS中,以多层目录的形式存储。
若我们直接使用hdfs -put向HDFS中创建目录,上传数据,如下:

hdfs dfs -mkdir -p /user/hive/warehouse/test.db/repair_test/par=partition_2/
hdfs dfs -put -f test.txt /user/hive/warehouse/test.db/repair_test/par=partition_2/

或者通过其他形式,直接向Hive表在HDFS中的存储位置创建分区,建立数据。比如服务端DB通过kafka直接将数据落地到HDFS。这两种情况都不会在MYSQL存储的元数据信息中添加新分区信息。
新的元数据信息添加到了HDFS中,没有添加到MYSQL中,这时就需要使用MASK REPAIRE TABLE “刷新分区”了。

MASK REPAIR TABLE有什么作用?
MASK(全称metastore consistency check,Hive表分区连贯性检查),运行MASK REPAIR TABLE 后,Hive回去检测这个表在HDFS上的文件,把没有写入metastore的分区信息写入到metastore。

上面讲的是在HDFS中添加分区,MASK REPAIR TABLE刷新后,能将新分区信息添加到metastore中。若是直接从HDFS中删除分区呢?使用MASK REPAIR TABLE后能将metastore中过期的分区信息删除掉吗?
答案是不行的。
只能在Hive客户端中通过alter table drop partition(…)删除metastore中的分区信息。

备注:在一些新版本的Hive中(比如Fix Version/s: 3.0.0, 2.4.0, 3.1.0 ),MASK REPAIR TABLE 命令能删除掉metastore中的过期元数据信息。


————————————————
版权声明:本文为CSDN博主「张之海」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZZh1301051836/article/details/106310647

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/429639?site
推荐阅读
相关标签
  

闽ICP备14008679号