我的 Hadoop 集群在 11:00 为每个数据工作批处理作业。
该作业创建 hive 表分区(例如 p_date=201702,p_domain=0)并将 rdbms 数据导入到像 ETL 一样的 hive 表分区....(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”是成功的。
我找不到错误日志并且没有出现控制台消息
我怎么解决这个问题?
我希望你理解我缺乏英语。
您不应该以这种方式删除 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 应停止在查询中使用此分区。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句