最近有個(gè)關(guān)于hive啟動(dòng)后mysql沒(méi)有hive表的問(wèn)題一直困擾著我。我嘗試了很多種方法都沒(méi)有解決,后來(lái)找到了一個(gè)解決方案,現(xiàn)在和大家分享一下。
首先,我們需要確定問(wèn)題的產(chǎn)生原因。經(jīng)過(guò)查詢(xún),我發(fā)現(xiàn)這個(gè)問(wèn)題是因?yàn)閔ive的元數(shù)據(jù)默認(rèn)是存儲(chǔ)在derby中的,而我最初創(chuàng)建表的時(shí)候使用了mysql數(shù)據(jù)庫(kù),導(dǎo)致元數(shù)據(jù)與表的信息不一致。因此,每次啟動(dòng)hive時(shí),它會(huì)找不到mysql中的表。
解決方案很簡(jiǎn)單,只需要手動(dòng)將hive的元數(shù)據(jù)遷移到mysql中即可。具體步驟如下:
1. 停止hive服務(wù)
hive --service hiveserver2 stop
2. 將hive的元數(shù)據(jù)導(dǎo)出為SQL腳本
schematool -dbType derby -generateSQL -schemaVersion 1.2 -scriptsDirectory /opt/hive/schema-derby/
3. 在mysql中創(chuàng)建hive元數(shù)據(jù)存儲(chǔ)庫(kù)
mysql -u root -p
create database hive_metastore;
grant all privileges on hive_metastore.* to 'hive'@'%' identified by 'hive';
4. 將hive元數(shù)據(jù)導(dǎo)入mysql中
schematool -dbType mysql -initSchema
5. 重啟hive服務(wù)
hive --service hiveserver2 start
執(zhí)行以上步驟后,再次啟動(dòng)hive就會(huì)發(fā)現(xiàn)表已經(jīng)能夠正常顯示了。
總之,這個(gè)問(wèn)題的解決方法就是將hive的元數(shù)據(jù)遷移到mysql中,這樣就能夠與之前創(chuàng)建的表進(jìn)行匹配了。希望這篇文章能夠幫助到遇到同樣問(wèn)題的讀者。