1 Hive安裝部署
1.1 環境準備
(1)安裝hive的前提是要配置好hadoop集群,啟動hive之前要先啟動hadoop集群。
(2)hive官網地址:http://hive.Apache.org/
(3)hive下載地址:http://archive.apache.org/dist/hive/
(4)我的hive版本是下載的apache-hive-1.2.1-bin.tar.gz
(5)MySQL版本:MySQL-5.5.60-1.el6.x86_64.rpm-bundle.tar
(6)配置yum運用的鏡像文件:centos-7-x86_64-DVD-1708.iso
1.2 Hive 安裝及配置
(1)將apache-hive-1.2.1-bin.tar.gz 上傳到hadoop111的/opt/software 目錄下
(2)解壓apache-hive-1.2.1-bin.tar.gz 到/opt/module/目錄下面
[root@hadoop111 software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
(3)修改 apache-hive-1.2.1-bin.tar.gz 的名稱為 hive
[root@hadoop111 module]# mv apache-hive-1.2.1-bin/ hive
(4)修改/opt/module/hive/conf 目錄下的 hive-env.sh.template 名稱為 hive-env.sh
[root@hadoop111 conf]# mv hive-env.sh.template hive-env.sh
(5)配置 hive-env.sh 文件
(a)配置 HADOOP_HOME 路徑
export HADOOP_HOME=/opt/module/hadoop-2.7.5
(b)配置 HIVE_CONF_DIR 路徑 export HIVE_CONF_DIR=/opt/module/hive/conf
1.3 Hadoop 集群配置
(1)必須啟動 hdfs 和 yarn
啟動hadoop安全分布式集群
(2)在 HDFS 上創建/tmp 和/user/hive/warehouse 兩個目錄并修改它們同組權限可寫
[root@hadoop111 hadoop-2.7.5]# bin/hadoop fs -mkdir /tmp
[root@hadoop111 hadoop-2.7.5]# bin/hadoop fs -mkdir -p /user/hive/warehouse [root@hadoop111 hadoop-2.7.5]# bin/hadoop fs -chmod g+w /tmp
[root@hadoop111 hadoop-2.7.5]# bin/hadoop fs -chmod g+w /user/hive/warehouse
1.4 啟動hive遇到報錯問題
再打開一個客戶端窗口啟動 hive,會產生 JAVA.sql.SQLException 異常。
拋出異常
原因:Metastore 默認存儲在自帶的 derby 數據庫中,推薦使用 MySQL 存儲 Metastore。
在mysql數據庫中查看derby數據庫
2 配置虛擬機的yum源
2.1 yum簡介
我在安裝mysql的過程中遇到了各種依賴性包未被安裝的問題,所以想到可不可以像云計算課程那樣也安裝yum源,能方便迅速的下載軟件包及相關指令,于是就去搜索怎么配置虛擬機的yum源,在連通外網的情況下,也可以直接獲取網址地址下載相關軟件包。
yum的主要功能是更方便的添加/刪除/更新RPM 包,自動解決包的依賴性問題,便于管理大量系統的更新問題。
yum 可以同時配置多個資源庫(Repository),簡潔的配置文件(/etc/yum.conf),自動解決增加或刪除rpm 包時遇到的依賴性問題,保持與RPM 數據庫的一致性。
2.2 配置yum源步驟
(1)用xftp軟件將鏡像文件CentOS-7-x86_64-DVD-1708.iso上傳至/opt/目錄下
(2)在/opt/目錄下創建centos文件夾
[root@hadoop111 ~]# mkdir /opt/centos
(3)將鏡像文件掛載到centos目錄下
[root@hadoop111 ~]# mount -o loop /opt/CentOS-7-x86_64-DVD-1708.iso /opt/centos/
mount: /dev/loop0 寫保護,將以只讀方式掛載
(4)查看centos目錄的內容
[root@hadoop111 ~]# ll /opt/centos
(5)刪除原有的yum源配置文件
[root@hadoop111 ~]# rm -rf /etc/yum.repos.d/*
(6)手工創建yum源配置文件local.repo
[root@hadoop111 ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
enabled=1
gpgcheck=0
(7)確認yum源是否配置成功
[root@hadoop111 ~]# yum list
2.3 檢查虛擬機能否連接外網
隨便輸入百度、谷歌等網址,ping一下看是否ping通
3 安裝MySQL數據庫
3.1 更新mysql版本
(1)下載mysql的rpm文件:mysql57-community-release-el6-8.noarch.rpm,但只需要其中三個包(MySQL-server-5.5.60-1.el6.x86_64.rpm、MySQL-client-5.5.60-1.el6.x86_64.rpm、mysql-connector-java-5.1.27),最后把文件壓縮之后再將不要的包全部刪掉。
(2)安裝rpm包,更新yum源的mysql版本
[root@hadoop111 hive]# rpm -Uvh /opt/software/mysql57-community-release-el6-8.noarch.rpm
(3)查看yum源的mysql
[root@hadoop111 hive]# cd /etc/yum.repos.d
(4)修改mysql-community.repo和mysql-community-source.repo文件
在兩個文件中,將mysql5.7中的enabled改為0,將MySQL5.6中的enabled改為1。這樣yum安裝時就安裝mysql5.6版本了。
(5)yum安裝mysql客戶端
[root@hadoop111 yum.repos.d]# yum -y install mysql-community-server
3.2 mysql設置
3.2.1 啟動mysql
(1)查看mysql狀態:
[root@hadoop111 yum.repos.d]# service mysql status或者systemctl status mysql
SUCCESS! MySQL running (1088)
(2)啟動mysql:
[root@hadoop111 yum.repos.d]# service mysqld start
3.2.2 mysql安全性設置
(1)安裝完成后,默認root用戶是沒有密碼的,有一些匿名用戶,查看用戶可以用以下命令。
用root用戶登錄mysql: [root@hadoop111 yum.repos.d]# mysql -uroot
切換到mysql庫:mysql -> use mysql;
查看user表:mysql -> select host,user from user;
(2)用腳本初始化權限(注:這種初始化方式只適合于MySQL5.6版本)
[root@hadoop111 yum.repos.d]# mysql_secure_installation
提示輸入當前root密碼,當前密碼為空:Enter current password for root (enter for none):
提示是否設置root密碼: Set root password? [Y/n] y
提示是否移除匿名用戶:Remove anonymous users? [Y/n] y
提示是否禁用root遠程登錄:Disallow root login remotely? [Y/n] n
提示是否移除test數據庫:Remove test database and access to it? [Y/n] n
提示是否重新加載權限:Reload privilege tables now? [Y/n] y
(3)再次查看用戶信息
用root和密碼登錄:[root@hadoop111 yum.repos.d]# mysql -uroot -p000000
切換到mysql庫:mysql -> use mysql;
查看用戶信息,已經有了密碼,并且匿名用戶已經被刪除了:
mysql -> select host,user from user;
(4)給root設置所有權限
mysql> grant all privileges on *.* to 'root'@'%' identified by '000000'with grant option;
(5)刷新權限
mysql> flush privileges;
(6)退出
mysql>quit;
4 Hive元數據配置到MySQL
4.1 驅動拷貝
1.在/opt/software/ 目錄下解壓mysql57-community-release-el6-8.noarch.rpm
[root@hadoop111 software]# rpm2cpio mysql57-community-release-el6-8.noarch.rpm | cpio -div
2.將mysql57-community-release-el6-8.noarch重命名為mysql
[root@hadoop111 software]# mv mysql57-community-release-el6-8.noarch mysql
3.拷貝 mysql目錄mysql-connector-java-5.1.27-bin.jar 到hive的lib目錄下
[root@hadoop111 mysql]# cp
/opt/software/mysql/mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/
4.2 配置 Metastore 到 MySQL
1.在/opt/module/hive/conf 目錄下創建一個 hive-site.xml[root@hadoop111 conf]# touch hive-site.xml
[root@hadoop111 conf]# vi hive-site.xml
2.根據官方文檔配置參數,拷貝數據到 hive-site.xml 文件中
根據hive官方文檔提示,編寫hive-site.xml
3.配置完畢后,如果啟動 hive 異常,可以重新啟動虛擬機。(重啟后,別忘了重啟動 hadoop 集群)
4.3 多窗口啟動Hive測試
1、先啟動MySQL
啟動mysql數據庫
2、再次打開多個窗口,分別啟動 hive
分別復制多個窗口,測試啟動hive是否異常
3.啟動 hive 后,回到 MySQL 窗口查看數據庫,顯示增加了 metastore 數據庫
查看metastore數據庫
5 Hive 常見屬性配置
5.1 Hive 數據倉庫位置配置
(1)默認數據倉庫的最原始位置是在 hdfs 上的:/user/hive/warehouse 路徑下。
(2)在倉庫目錄下,沒有對默認的數據庫 default 創建文件夾。如果某張表屬于 default數據庫,直接在數據倉庫目錄下創建一個文件夾。
(3)修改默認數據倉庫原始位置(將 hive-default.xml.template 如下配置信息拷貝到hive-site.xml 文件中)。
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
(4)配置同組用戶有執行權限
bin/hdfs dfs -chmod g+w /user/hive/warehouse
5.2 查詢后信息顯示配置
(1)在 hive-site.xml 文件中添加如下配置信息,就可以實現顯示當前數據庫,以及查詢表的頭信息配置。
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
(2)重新啟動 hive,對比配置前后差異。
(a)配置前:
配置前的hive儲存數據
(b)配置后:
配置后的hive儲存數據
5.3 Hive運行日志信息配置
1、Hive 的 log 默認存放在/tmp/root/hive.log 目錄下(當前用戶名下)
2、修改 hive 的 log 存放日志到/opt/module/hive/logs
(1)修改/opt/module/hive/conf/hive-log4j.properties.template 文件名稱為hive-log4j.properties
[root@hadoop111 conf]# pwd
/opt/module/hive/conf
[root@hadoop111 conf]# mv hive-log4j.properties.template hive-log4j.properties
(2)在 hive-log4j.properties 文件中修改 log 存放位置
hive.log.dir=/opt/module/hive/logs
注:一旦hive的運行程序報錯或拋出異常,就可以快速查找日志信息,就其根源尋找問題。
6 HiveJDBC訪問
6.1 HiveServer2定義
HiveServer2是一個能使客戶端針對hive執行查詢的一種服務,與HiverServer1比較,它能夠支持多個客戶端的并發請求和授權的;
HiveCLI 和 hive –e的方式比較單一,HS2允許遠程客戶端使用多種語言諸如Java,Python等向Hive提交請求,然后取回結果。
HS2對于TCP 模式使用ThreadPoolServer,對于HTTP模式使用JettyServer.
ThreadPoolServer為每一個TCP連接分配一個工作者線程,每一個線程總是和一個連接關聯,即使該連接是空閑的,所以這兒有個潛在的性能問題:如果有很多連接,將會導致大量的線程。以后可能會換成ThreadedSelectorServer對于HTTP模式,在客戶端和服務器之間需要一個代理,主要是負載均衡或者其他原因,比如HAProxy。
6.2 啟動 hiveserver2 服務
hiveserver2啟動
啟動這個服務,需要卡住一段時間,起初我還以為是網絡原因不好或者是配置出錯,結果上網查問題,是由于進程已經在后臺運行,所以只需要在復制一個虛擬機窗口就可以。
6.3 啟動beeline
啟動beeline
6.3 訪問hive的web頁面
啟動hive的web頁面
查看網址
7 小結
在安裝hive的過程中遇到了很多問題,主要的錯誤和解決辦法如下:
1、 mysql不能正確安裝,原因是沒有相關依賴包或者某路徑下沒有相關插件,所以考慮搭建yum源,采用yum源在連接外網的情況下安裝mysql。
2、 連接不上hiveserver2,在bin/hiveserver2啟動時等待了很長時間,一直沒響應,所以百度了一下,原因是后臺已經在執行路徑運行了,只需要用Xshell復制一個窗口hadoop111執行bin/beeline就可以連接到beeline了。
3、 拒絕訪問hive的jdbc:即beeline> !connect jdbc:hive2://192.168.200.111:10000這里失敗,沒有在/opt/module/hadoop-2.7.5/etc/hadoop/core-site.xml設置超級用戶,添加如下配置即可.
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
4、 報錯:jdbc.HiveConnection: Failed to connect to 192.168.200.111:10000 Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.200.111:10000/default: java.net.ConnectException: Connection refused (state=08S01,code=0)
(1)至少你連接是成功的,不然不會出現讓你驗證username和password的問題。
(2)第二個,你的鏈接有問題。有可能是你現在連接的并不是hive2,而是啟動的服務hiveserver。這個和hiveserver2有很大的版本區別,具體可以百度。
(3)當連接的是hive2,但還是拒絕的時候,可能問題出在你配置上面,如下:
<property>
<name>hive.server2.transport.mode</name>
<value>binary</value>
<description> Expects one of [binary, http]. Transport mode of HiveServer2. </description>
</property>
切記,當你這里設置為http的時候,此時服務器只提供端口10001的服務,即HTTP方式訪問。 這時候10000端口是不開啟的!
我就是在這個地方卡了好幾天。因此你要用java通過jdbc訪問,一定要選擇binary。






