删除与分区相关的hdfs文件后无法联系hive表分区

Posted

技术标签:

【中文标题】删除与分区相关的hdfs文件后无法联系hive表分区【英文标题】:Can not contact a hive table partition, after delete hdfs file related to partition 【发布时间】:2017-03-01 10:12:58 【问题描述】:

我的 Hadoop 集群在 11:00 对每个数据进行批处理作业。

作业创建 hive 表分区(例如 p_date=201702,p_domain=0)并将 rdbms 数据导入到 hive 表分区,如 ETL....(hive 表不是外部表)

但是作业失败了,我删除了一些 hdfs 文件(分区位置 => p_date=20170228,p_domain=0)进行重新处理。

这是我的错误,我只是在直线上输入查询放置分区...

当我以这种方式查询“select * from table_name where p_date=20170228,p_domain=0”时,我联系了一个挂起,但是“select * from table_name where p_date=20170228,p_domain=6”是成功的。

我找不到错误日志并且没有出现控制台消息

我该如何解决这个问题?

我希望你能理解我缺乏英语。

【问题讨论】:

【参考方案1】:

您不应该以这种方式删除 Hive 表中的分区。有一个特殊的命令可以做到这一点:

ALTER TABLE table_name DROP IF EXISTS PARTITION(partitioncolumn= 'somevalue');

从 HDFS 中删除文件是不够的。您需要从 Metastore 中清除数据。为此,您需要连接到关系数据库并从 MetaStore 数据库中的分区相关表中删除数据。

mysql

mysql> use hive;

mysql> SELECT PART_ID PARTITIONS WHERE PART_NAME like '%p_date=20170228,p_domain=0%'

+---------+-------------+------------------+--------------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME          | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------------+-------+--------+
|       7 |  1487237959 |                0 | partition name     |   336 |    329 |
+---------+-------------+------------------+--------------------+-------+--------+


mysql> DELETE FROM PARTITIONS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_KEY_VALS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_PARAMS WHERE PART_ID=7;

在这个 Hive 之后应该停止在你的查询中使用这个分区。

【讨论】:

非常感谢。但在您发表评论之前,我使用 unlock hive 命令解决了我的问题。我认为我的方式和你的方式是相似的

以上是关于删除与分区相关的hdfs文件后无法联系hive表分区的主要内容,如果未能解决你的问题,请参考以下文章

hive外部表分区

从 hdfs 中删除文件是不是会删除相应的 hive 外部表分区?

从 HDFS 中删除分区目录,它会反映在 hive 表中吗?

Spark读取HDFS数据分区参考

hive中怎样删除分区

打怪升级之小白的大数据之旅(六十六)<Hive旅程第七站:Hive的分区表与分桶表>