2017-07-05 20 views
1

摂取プロセスに問題があり、Hiveのテーブルにパーティションが追加されましたが、HDFSのパスは実際には存在しませんでした。この問題は修正されましたが、まだこれらの不良パーティションがあります。 Tezを使用してこれらのテーブルをクエリすると、FileNotFound例外が発生し、存在しないHDFSの場所を指しています。私たちがTezの代わりにMRを使用すると、クエリが機能します(これは非常に混乱しますが)が遅すぎます。メタストア内のパーティションはHDFSに存在しません

このプローブを持つすべてのパーティションをリストする方法はありますか? MSCK REPAIRは、データがHDFSに存在するがHiveにはパーティションが存在しないという反対の問題を処理しているようだ。

EDIT:詳細ここ は、ファイルが見つからない例外の出力です:

java.io.FileNotFoundException: File hdfs://<server>/db/tables/2016/03/14/mytable does not exist.

私はshow partitions <db.mytable>を実行した場合、私はdt=2016-03-14のための1つを含む、すべてのパーティションを、取得します。

show table extended like '<db.mytable>' partition(dt='2016-03-14'は、同じ場所: location:hdfs://server/db/tables/2016/03/14/mytableを返します。

+0

別のパーティションの場所はどのように見えますか? –

+0

他のパーティションは 'location:hdfs:// server/db/tables/2017/06/07/mytable'とほとんど同じです。唯一の違いは、実際に存在することです。 – Andrew

+0

パスの1つ(metastore/hdfs)に白い文字が含まれていないか確認してください。 –

答えて

0

ちょっとスクリプティング/手作業で、指定したリストに基づいてそれらをドロップすることができますので、(Partitions not in metastore:を参照)MSCK REPAIR TABLEが不足しているディレクトリを指すパーティションをドロップしませんが、それはこれらのパーティションをリストしているようです。

hive> create table mytable (i int) partitioned by (p int); 
OK 
Time taken: 0.539 seconds 

hive> !mkdir mytable/p=1; 
hive> !mkdir mytable/p=2; 
hive> !mkdir mytable/p=3; 

hive> msck repair table mytable; 
OK 
Partitions not in metastore: mytable:p=1 mytable:p=2 mytable:p=3 
Repair: Added partition to metastore mytable:p=1 
Repair: Added partition to metastore mytable:p=2 
Repair: Added partition to metastore mytable:p=3 
Time taken: 0.918 seconds, Fetched: 4 row(s) 

hive> show partitions mytable; 
OK 
p=1 
p=2 
p=3 
Time taken: 0.331 seconds, Fetched: 3 row(s) 

hive> !rmdir mytable/p=1; 
hive> !rmdir mytable/p=2; 
hive> !rmdir mytable/p=3; 

hive> msck repair table mytable; 
OK 
Partitions missing from filesystem: mytable:p=1 mytable:p=2 mytable:p=3 
Time taken: 0.425 seconds, Fetched: 1 row(s) 

hive> show partitions mytable; 
OK 
p=1 
p=2 
p=3 
Time taken: 0.56 seconds, Fetched: 3 row(s) 
+0

'msck repair table db.mytable'は' No rows affected'を返します。元の投稿に追加情報を追加しました。 – Andrew

+0

あなたのHiveバージョンは何ですか? –

+0

Apache Hive(バージョン1.2.1000.2.6.0.3-8) – Andrew

0

MSCK REPAIR TABLE <tablename>この機能を提供し、私もこれと同じ問題に直面し、私たちが知っているように、私はこのためのソリューション、

を発見していない「MSCKの修理は、」コマンドのディレクトリに基づいてパーティションを追加し、だから、最初のドロップすべてのパーティションコマンド上記

hive>ALTER TABLE mytable drop if exists partitions(p<>''); 

すべてのパーティション、

を削除し、その後、それは意志C msck repairコマンドを使用します。テーブルの場所に存在するディレクトリからパーティションを再作成します。

hive>msck repair table mytable 
関連する問題