一、安裝hive前提條件
hive運(yùn)行在hadoop集群上,所以先要確保你的hadoop集群已經(jīng)安裝完畢并且可正常啟動(dòng)運(yùn)行。如果沒安裝好hadoop集群的可以參考我的這篇文章:Hadoop學(xué)習(xí)(一)入門與集群搭建。接著還需要安裝mysql,因?yàn)閔ive的元數(shù)據(jù)是存儲(chǔ)在mysql的,不過mysql我們可以只在集群的主節(jié)點(diǎn)機(jī)器安裝一個(gè)就好,需要安裝mysql服務(wù)端和客戶端。
二、CentOS7安裝Mariadb數(shù)據(jù)庫(其實(shí)就是mysql的分支版本)
在linux中可以借助yum庫來進(jìn)行下載mysql,執(zhí)行命令yum install -y mysql
,之后就會(huì)自動(dòng)下載了。
service mysqld start
命令啟動(dòng)mysql,但會(huì)發(fā)覺報(bào)如下錯(cuò),未能啟動(dòng)mysqld.service:未找到單元。解決完上面的問題后,我們?cè)賮磔斎?code>systemctl start mariadb.service命令開啟服務(wù),期間還報(bào)錯(cuò)過另一個(gè)問題,如下圖:
journalctl -xe
命令去查找報(bào)錯(cuò)原因,如下圖:/etc/my.cnf
文件,設(shè)置了默認(rèn)編碼為utf8,也不知道為什么就會(huì)影響到啟動(dòng)服務(wù),所以就再改回去恢復(fù)默認(rèn)配置了,去掉默認(rèn)編碼設(shè)置。之后再重新輸入systemctl start mariadb.service
命令,服務(wù)就啟動(dòng)了。我們可以輸入systemctl status mariadb.service
命令查看當(dāng)前mariadb服務(wù)狀態(tài),如圖所示,顯示active(running)開啟。systemctl enable mariadb.service
命令即可。接著輸入
mysqladmin -u root password 你想設(shè)置的mysql密碼(例:123456)
命令,創(chuàng)建一個(gè)輸入root用戶的密碼,之后就用這個(gè)密碼連接mariadb數(shù)據(jù)庫,輸入mysql -u root -p 123456
命令測(cè)試是否能連通,如圖所示就安裝mariadb成功了。 三、在mariadb中創(chuàng)建hive用戶和hive元數(shù)據(jù)庫
#1、用root用戶登錄mysql
mysql -u root -p 回車后輸入root用戶密碼登錄
#2、創(chuàng)建hive用戶
insert into mysql.user("Host","User","Password") values("localhost","hive",passwprd("hive"));
#3、創(chuàng)建hive數(shù)據(jù)庫
create database hive;
#4、授權(quán),使用戶可以遠(yuǎn)程連接
grant all on hive.* to hive@'%' identified by 'hive';
#5、授權(quán),使用戶可以本地連接
grant all on hive.* to hive@'localhost' identified by 'hive';
#6、刷新授權(quán)表
flush privileges;
經(jīng)過以上步驟就創(chuàng)建好了hive用戶和hive元數(shù)據(jù)庫,我們嘗試登錄一下,先exit退出root用戶登錄,之后重新輸入mysql -u hive -p
回車后輸入hive用戶密碼登錄,如下圖所示就成功。
/etc
目錄下修改my.cnf
文件,在[mysqld]標(biāo)簽下添加如下配置
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
再去/etc/my.cnf.d
目錄下修改client.cnf
文件,在[client]標(biāo)簽下添加如下配置
default-character-set=utf8
然后再去/etc/my.cnf.d
目錄下修改mysql-clients.cnf
文件,在[mysql]標(biāo)簽下添加如下配置
default-character-set=utf8
全部配置完成后,輸入systemctl restart mariadb
命令重啟mariadb,之后進(jìn)入mariadb數(shù)據(jù)庫查看字符集,至此,mariadb就安裝配置完了。
PS:在分布式集群上安裝hive+mysql,mysql可以不用每臺(tái)機(jī)器都安裝,只在主機(jī)器節(jié)點(diǎn)上安裝即可,hive可以每臺(tái)機(jī)器安裝,mysql作為hive的元數(shù)據(jù)庫,hadoop集群能訪問到就好,配置都訪問主機(jī)器的mysql作為元數(shù)據(jù)信息存儲(chǔ)的地方即可。
四、安裝并配置hive
- 1、把下載好的hive安裝包上傳到linux集群上,之后解壓到指定路徑下,再復(fù)制下conf下的兩個(gè)template配置文件,命令為
hive-env.sh
和hive-site.xml
- 2、配置
hive-env.sh
文件,加上java和hadoop安裝路徑
JAVA_HOME=/usr/java/jdk1.8.0_60
HADOOP_HOME=/usr/hadoop-2.6.4
export HIVE_CONF_DIR=/usr/hive-2.3.7/conf
- 3、配置
hive-site.xml
文件,修改主機(jī)器節(jié)點(diǎn)的mysql數(shù)據(jù)庫用戶名和密碼,這個(gè)文件的參數(shù)實(shí)在是太多,只能在vim編輯器中使用/**
來查找匹配關(guān)鍵字,找到后把對(duì)應(yīng)value改成適應(yīng)自己的就好。
<!--所連接的mysql實(shí)例,分布式集群的話我這里是設(shè)置集群內(nèi)的機(jī)器都用master上的mysql-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<!--mysql數(shù)據(jù)庫驅(qū)動(dòng)-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBCmetastore</description>
</property>
<!--mysql數(shù)據(jù)庫用戶名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastoredatabase</description>
</property>
<!--mysql數(shù)據(jù)庫密碼-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive用戶的密碼</value>
<description>password to use against metastoredatabase</description>
</property>
<!--元數(shù)據(jù)mysql遠(yuǎn)程模式配置-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
- 4、把hive安裝路徑也加入環(huán)境變量,這樣帶來的好處是每次啟動(dòng)hive客戶端不用總是到hive的bin目錄下啟動(dòng),只需要在
/etc/profile
文件配置上hive的目錄,并給Path解析即可,如下圖,保存后執(zhí)行source /etc/profile
命令刷新環(huán)境配置生效。
image.png - 5、上傳JDBC驅(qū)動(dòng)包到hive的lib目錄下即可
image.png - 6、在HDFS創(chuàng)建目錄,要先啟動(dòng)hadoop,然后創(chuàng)建目錄并賦予權(quán)限
hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -chmod -R g+w,o+w /tmp
hadoop fs -chmod -R g+w,o+w /hive
- 7、初始化數(shù)據(jù)庫,輸入
schematool -dbType mysql -initSchema
命令,然而報(bào)如下錯(cuò),hive初始化SQL Error code:1045錯(cuò)誤
image.pngupdate user set Password = password('root用戶密碼')
- 8、解決完以上所有問題,完成了以上所有步驟,就輸入
hive
命令進(jìn)入hive客戶端,再輸入show tables
語句顯示所有數(shù)據(jù)表,但是如果報(bào)錯(cuò)FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的話,就是hivemetastore服務(wù)沒啟動(dòng)。
先去hive-site.xml
文件中修改datanucleus.schema.autoCreateAll
參數(shù)值為true
,默認(rèn)是false。
然后再輸入hive --service metastore &
命令啟動(dòng)hivemetastore服務(wù)就好。 -
9、再次輸入hive進(jìn)入hive客戶端,然后輸入show tables 或者 show functions 測(cè)試hive是否正常安裝配置使用,如下圖所示: image.png
五、hive在多臺(tái)機(jī)器下安裝
hive可以在集群內(nèi)的多臺(tái)機(jī)器安裝,當(dāng)經(jīng)過上面步驟安裝完一臺(tái)機(jī)器的hive后,我們可以使用scp命令遠(yuǎn)程拷貝到集群內(nèi)的不同機(jī)器,master機(jī)器cd切換到/usr目錄下,之后具體命令及操作步驟如下:
scp -r /usr/hive-2.3.7 slave1:/usr //基于ssh方式遠(yuǎn)程拷貝到slave1機(jī)器
scp -r /usr/hive-2.3.7 slave2:/usr //基于ssh方式遠(yuǎn)程拷貝到slave2機(jī)器
scp -r /usr/hive-2.3.7 slave3:/usr //基于ssh方式遠(yuǎn)程拷貝到slave3機(jī)器
#之后跟master機(jī)器一樣配置環(huán)境變量vi /etc/profile,再source /etc/profile 使環(huán)境變量配置生效
參考文章鏈接
1、hadoop分布式集群安裝配置hive+mysql
2、hive初始化SQL Error code :1045錯(cuò)誤解決方法
3、centOS7環(huán)境下在hadoop集群安裝hive
4、hive啟動(dòng)報(bào)錯(cuò) java.net.URISyntaxException: Relative path in absolute URI: system:java.io.tmpdir7D/$%7B 解決方案