2017-03-01 8 views
1

私のHadoopクラスタは、11:00のすべてのデータに対してバッチジョブを処理します。パーティションに関連するhdfsファイルの削除後に、ハイブテーブルパーティションにアクセスできない

ジョブが.... ETLのようなハイブテーブルパーティションにハイブ表パーティション(例。p_date = 201702、p_domain = 0)およびインポートRDBMSデータを作成する(ハイブ表が外部表でない)

しかしジョブが失敗し、再処理のためにいくつかのhdfsファイル(パーティションの場所=> p_date = 20170228、p_domain = 0)を削除しました。

それは...私ビーラインのドロップパーティションのためだけタイピングクエリ、

私のミスであると私は、この方法は、「p_date = 20170228、p_domain = 0 TABLE_NAMEから*を選択し、」照会するとき、私はハングに連絡しかし、 "select * from table_name where p_date = 20170228、p_domain = 6"は成功です。

私は、エラー・ログとコンソールメッセージが

どのように私はこの問題を解決することができますが表示されていません見つけることができませんか?

英語の私の不足を理解していただければ幸いです。

答えて

1

ハイブテーブルでパーティションを削除しないでください。

ALTER TABLE DROP IFは、PARTITION(partitioncolumn = 'someValueの')をEXISTS TABLE_NAME;:これを行うための特別なコマンドがあります

ファイルをHDFSから削除するだけでは不十分です。メタストアからデータを消去する必要があります。このためには、リレーショナルデータベースに接続し、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; 

このハイブは、このパーティションの使用をクエリで停止する必要があります。

+0

ありがとうございました。しかし、あなたのコメントの前に、** unlock ** hiveコマンドを使って私の問題を解決します。私の道と道は似ていると思う –

関連する問題