删除与分区相关的 hdfs 文件后,无法联系配置单元 table 分区
Can not contact a hive table partition, after delete hdfs file related to partition
我的 Hadoop 集群为 11:00 处的每个数据运行批处理作业。
作业创建 hive table 分区(例如 p_date=201702,p_domain=0)并像 ETL 一样将 rdbms 数据导入到 hive table 分区。 ...(配置单元 table 不是外部 table)
但是作业失败了,我删除了一些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" 是成功的。
我找不到错误日志,也没有出现控制台消息
我该如何解决这个问题?
我希望你理解我的英语不足。
您不应该以这种方式删除 Hive table 中的分区。有一个特殊的命令可以做到这一点:
ALTER TABLE table_name 如果存在分区则删除 (partitioncolumn= 'somevalue');
从 HDFS 中删除文件是不够的。您需要清除 Metastore 中的数据。为此,您需要连接到关系数据库并从 MetaStore 数据库中的分区相关 table 中删除数据。
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 应停止在您的查询中使用此分区。
我的 Hadoop 集群为 11:00 处的每个数据运行批处理作业。
作业创建 hive table 分区(例如 p_date=201702,p_domain=0)并像 ETL 一样将 rdbms 数据导入到 hive table 分区。 ...(配置单元 table 不是外部 table)
但是作业失败了,我删除了一些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" 是成功的。
我找不到错误日志,也没有出现控制台消息
我该如何解决这个问题?
我希望你理解我的英语不足。
您不应该以这种方式删除 Hive table 中的分区。有一个特殊的命令可以做到这一点:
ALTER TABLE table_name 如果存在分区则删除 (partitioncolumn= 'somevalue');
从 HDFS 中删除文件是不够的。您需要清除 Metastore 中的数据。为此,您需要连接到关系数据库并从 MetaStore 数据库中的分区相关 table 中删除数据。
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 应停止在您的查询中使用此分区。