1. 程式人生 > 實用技巧 >Hive元資料更新

Hive元資料更新

  如果Hadoop得core-site.xml中的fs.defaultFS配置由於多種原因(叢集遷移、叢集升級、NameNode主機名更改等)需要更改,會導致Hive無法通過元資料找到的資料儲存地址,因此需要對元資料資料庫中的地址更新。

報錯場景:

解決方案:

  1.直接去資料庫中修改。我們知道,Hive的元資料資訊是存放在關係型資料庫中的,我們只要找到存放這些資料的Table,然後用SQL去修改就行了。但是這樣比較麻煩,你還得去登入資料庫,最重要的是這樣還很容易出錯,所以不推薦使用。

  2.使用Hive自帶命令修改(推薦)。Hive自帶了修改元素相關的命令,我們可以直接使用bin/metatool命令去修改。檢視該工具有什麼功能。

bin/metatool -help 
Initializing HiveMetaTool.. usage: metatool -dryRun Perform a dry run of updateLocation changes.When run with the dryRun option updateLocation changes are displayed
but not persisted. dryRun is valid only with the updateLocation option. -executeJDOQL <query-string> execute the given JDOQL query -help print this message -listFSRoot
print the current FS root locations -serdePropKey <serde-prop-key> Specify the key for serde property to be updated. serdePropKey option is valid only with updateLocation
option. -tablePropKey <table-prop-key> Specify the key for table property to be updated. tablePropKey option is valid only with updateLocation option.
-updateLocation <new-loc> <old-loc> Update FS root location in the metastore to new location.Both new-loc and old-loc should be valid URIs with valid host names and
schemes.When run with the dryRun option changes are displayed but are not persisted. When run with the serdepropKey/tablePropKey option updateLocation looks for the
serde-prop-key/table-prop-key that is specified and updates its value if found.

然後進入Mysql資料庫查詢:

在Hive目錄下執行元資料工具更新地址:

# 命令格式如metatool -updateLocation newPath oldPath
./bin/metatool -updateLocation hdfs://hadoop:9000/user/hive/warehouse hdfs://192.168.87.140:9000/user/hive/warehouse

更新完之後,我們可以再看下FS Roots資訊是否修改完成:

./bin/metatool -listFSRoot

已成功修改!