2017-03-01 61 views
1

我的Hadoop集羣在11:00處爲每個數據運行批處理作業。刪除與分區相關的hdfs文件後,無法聯繫配置單元表分區

作業創建蜂房表分區(來自p_date = 201702,p_domain = 0)和導入RDBMS數據到像ETL蜂房表分區....(蜂房表不是外部表)

但作業失敗,我刪除了一些hdfs文件(分區位置=> p_date = 20170228,p_domain = 0)進行重新處理。

這是我的錯誤,我只是在直線下降分區打字查詢...

與我聯繫掛起當我查詢這種方式「從table_name的選擇*其中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應該停止在您的查詢中使用此分區。

+0

非常感謝。但在您發表評論之前,我使用** unlock ** hive命令解決了我的問題。我認爲我的方式和方式是相似的 –