一、MySQL的安裝
Hive的數據,是存在HDFS里的。此外,hive有哪些數據庫,每個數據庫有哪些表,這樣的信息稱之為hive的元數據信息。
元數據信息不存在HDFS,而是存在關系型數據庫里,hive默認用的是derby數據庫來存儲。即hive工作時,除了要依賴Hadoop,還要依賴關系型數據庫。
注意:雖然我們能通過HDFS查看到hive有哪些數據庫,有哪些表,以及表里的數據,但是,這不是元數據信息。HDFS最主要的是存儲hive的數據信息。
之前遇到的問題:當退出后,切換到不同的目錄來進入hive,發現庫和表沒有了,是因為,第一次從bin目錄進入hive,會在bin目錄下創建一個metastore.db目錄,在這個目錄下,創建一個derby.log文件來存儲
元數據信息。這個元數據信息是基於bin目錄來創建的。而切換到其他目錄進入hive時,查詢時不是基於bin目錄來查詢的,所有查不到元數據信息,導致查不到。這個問題是derby數據庫本身的問題,所以,我們不能用derby數據庫,此外,用derby數據庫,也不支持並發,比如一個人在操作hive,如果此時有其他人想用hive,用不了。所以我們選擇用mysql數據庫。目前hive支持derby和mysql兩種數據庫。
Linux下mysql的安裝過程:Linux下的MySQL安裝
二、Hive的mysql配置步驟
①刪除HDFS中的/usr/hive
執行:hadoop fs -rmr /user/hive(需要啟動hadoop)
②將mysql驅動包上傳至hive的安裝目錄的lib目錄下
我這里采用rz命令來上傳:mysql-connector-java-5.1.38-bin.jar
③在hive/conf添加配置文件,名字為:hive-site.xml
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoopalone:3306/hive?createDatabaseIfNotExist=true</value> //mysql的url </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> //mysql的用戶名 <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> //mysql的密碼 <value>root</value> </property> </configuration>
如圖所示,添加如下配置
④進入hive ,進入bin目錄,執行:sh hive
如果出現:
Access denied for user 'root'@'hadoop01' (using password: YES)這個錯誤,指的是當前用戶操作mysql數據庫的權限不夠。
⑤進入到mysql數據庫,進行權限分配
執行:grant all privileges on *.* to 'root'@'hadoopalone' identified by 'root' with grant option;
grant all on *.* to 'root'@'%' identified by 'root';
然后執行:flush privileges;(注意分號)
⑥手動創建Hive數據庫
如果不事先在mysql里創建hive數據庫,在進入hive時,mysql會自動創建hive數據庫。但是注意,因為我們之前配置過mysql的字符集為utf-8,所以這個自動創建的hive數據庫的字符集是utf-8的。
但是hive要求存儲元數據的字符集必須是iso8859-1。如果不是的話,hive會在創建表的時候報錯(先是卡一會,然后報錯)。
進入mysql執行:create database hive character set latin1;
⑦以上步驟都做完后,再次進入mysql的hive數據,發現有如下表:
⑧通過navicat連接mysql數據庫
⑨可以通過DBS 、TBLS、COLUMNS_V2這三張表來查看元數據信息。
DBS 存放的數據庫的元數據信息
TBLS存放的tables表信息
COLUMNS表存放的是列字段信息
此外,可以通過查看SDS表來查詢HDFS里的位置信息
至此,Hive配置mysql大功告成!如果有什么問題,大家一起留言討論。