簡體   English   中英

當從HDFS手動刪除分區數據時,如何在Hive中更新分區元數據

[英]How to update partition metadata in Hive , when partition data is manualy deleted from HDFS

自動更新Hive分區表的元數據的方法是什么?

如果將新分區數據添加到HDFS(沒有alter table add partition命令執行)。 然后我們可以通過執行命令'msck repair'來同步元數據。

如果從HDFS中刪除了大量分區數據(沒有執行alter table drop partition commad執行),該怎么辦?

同步Hive metatdata的方法是什么?

編輯 :從Hive 3.0.0開始 MSCK現在可以使用以下語法發現新分區或刪除丟失的分區(或兩者):

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]

這是在HIVE-17824中實施的


正如HakkiBuyukcengiz正確陳述的那樣 ,如果HDFS上的相應文件夾被手動刪除, MSCK REPAIR不會刪除分區,只有在創建新文件夾時才會添加分區。

從官方文檔中提取:

換句話說,它將添加HDFS上存在但不在Metastore中的任何分區到Metastore。

如果在HDFS上手動刪除多個分區文件夾並且我想快速刷新分區,這就是我通常在external表存在時所做的事情:

  • 刪除表( DROP TABLE table_name )(刪除外部表不會刪除底層分區文件)
  • 重新創建表( CREATE EXTERNAL TABLE table_name ...
  • 修復它( MSCK REPAIR TABLE table_name

根據分區數量,這可能需要很長時間。 另一個解決方案是對每個已刪除的分區文件夾使用ALTER TABLE DROP PARTITION (...) ,但如果刪除了多個分區,這可能會很繁瑣。

嘗試使用

MSCK REPAIR TABLE <tablename>;

確保將表設置為external,刪除所有分區,然后運行表修復:

alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE')
alter table mytable_name drop if exists partition (`mypart_name` <> 'null');
msck repair table mytable_name;


如果msck修復拋出錯誤,則從終端運行配置單元:
hive --hiveconf hive.msck.path.validation=ignore
或者set hive.msck.path.validation=ignore;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM