如果不小心误删了hive某一个分区表怎么办?
网上有一个命令恢复法
msck repair table tablename
但是这个命令是将关于分区的元信息添加到hive metastore中,简单来说是将任何存在于hdfs上但不存在于metastore的分区恢复
但如果hdfs上也删了呢?
那只能另辟蹊径,步骤如下
一、需要知道删除前hive表在hdfs上的location,通过如下命令
desc formatted tablename
二、找到hdfs的回收站trash(此处需要开启了回收站功能的hdfs才有)
需要去hdfs目录上找到回收站里你需要的文件,此处我在网上查了资料发现,每个环境的回收站的目录都不一样,所以我得截图只能说具备一点点参考价值(我也找了很久才找着)
三、找到这个文件,那么工作已经完成了99%,只需要将你需要的这个文件copy或者mv到原始的路径下(就是第一步的路径)
hadoop fs -cp 回收站路径/表名/分区名 /原始路径/分区名
四、数据虽然已经到了原始路径,但是hive表里的数据还没有恢复,那怎么办呢?
如果从头看到尾的话,应该可以秒答这个问题,就是文章开头提到的命令修复
msck repair table tablename
修复完就会出现如图提示,然后用命令查询一下你回收的分区是否真的恢复
show partitions tablename
到这一步,数据恢复就完成了,但是如果hdfs没开回收站机制的话
我也不知道咋办了。。。。。。
好文链接
发表评论