1 Hive基本概念
Hive是一個構建在Hadoop上的資料倉庫框架,最初,Hive是由Facebook開發,后來移交由Apache軟體基金會開發,并作為一個Apache開源專案,
Hive是基于Hadoop的一個資料倉庫工具,可以將結構化的資料檔案映射為一張資料庫表,并提供類SQL查詢功能,
其本質是將SQL轉換為MapReduce的任務進行運算,底層由HDFS來提供資料的存盤,說白了hive可以理解為一個將SQL轉換為MapReduce的任務的工具,甚至更進一步可以說hive就是一個MapReduce的客戶端,

2 Hive的特點與架構圖
- Hive最大的特點是通過類SQL來分析大資料,而避免了寫MapReduce程式來分析資料,這樣使得分析資料更容易,
- 資料是存盤在HDFS上的,Hive本身并不提供資料的存盤功能,它可以使已經存盤的資料結構化,
- Hive是將資料映射成資料庫和一張張的表,庫和表的元資料資訊一般存在關系型資料庫上(比如MySQL),
- 資料存盤方面:它能夠存盤很大的資料集,可以直接訪問存盤在Apache HDFS或其他資料存盤系統(如Apache HBase)中的檔案,
- 資料處理方面:因為Hive陳述句最侄訓生成MapReduce任務去計算,所以不適用于實時計算的場景,它適用于離線分析,
- Hive除了支持MapReduce計算引擎,還支持Spark和Tez這兩種分布式計算引擎;
- 資料的存盤格式有多種,比如資料源是二進制格式,普通文本格式等等;
- hive具有sql資料庫的外表,但應用場景完全不同,hive只適合用來做批量資料統計分析

3 Hive的安裝方式
hive的安裝一共有三種方式:內嵌模式、本地模式、遠程模式
元資料服務(metastore)作用是:客戶端連接metastore服務,metastore再去連接MySQL資料庫來存取元資料,有了metastore服務,就可以有多個客戶端同時連接,而且這些客戶端不需要知道MySQL資料庫的用戶名和密碼,只需要連接metastore 服務即可,
??(1) 內嵌模式
??內嵌模式使用的是內嵌的Derby資料庫來存盤元資料,也不需要額外起Metastore服務,資料庫和Metastore服務都嵌入在主Hive Server行程中,這個是默認的,配置簡單,但是一次只能一個客戶端連接,適用于用來實驗,不適用于生產環境,解壓hive安裝包 bin/hive 啟動即可使用
??缺點:不同路徑啟動hive,每一個hive擁有一套自己的元資料,無法共享,

??(2)本地模式
??本地模式采用外部資料庫來存盤元資料,目前支持的資料庫有:MySQL、Postgres、Oracle、MS SQL Server.在這里我們使用MySQL,本地模式不需要單獨起metastore服務,用的是跟hive在同一個行程里的metastore服務,也就是說當你啟動一個hive 服務,里面默認會幫我們啟動一個metastore服務,hive根據hive.metastore.uris 引數值來判斷,如果為空,則為本地模式,
??缺點:每啟動一次hive服務,都內置啟動了一個metastore,

??(3)遠程模式
??遠程模式下,需要單獨起metastore服務,然后每個客戶端都在組態檔里配置連接到該metastore服務,遠程模式的metastore服務和hive運行在不同的行程里,在生產環境中,建議用遠程模式來配置Hive Metastore,在這種情況下,其他依賴hive的軟體都可以通過Metastore訪問hive,
??遠程模式下需要配置hive.metastore.uris 引數來指定metastore服務運行的機器ip和埠,并且需要單獨手動啟動metastore服務,hiveserver2是Hive啟動了一個server,客戶端可以使用JDBC協議,通過IP+ Port的方式對其進行訪問,達到并發訪問的目的,

4 Hive的安裝
之前文章介紹過按照Hadoop,繼Hadoop后按照Hive,在此處選擇第三臺機器node3作為我們hive的安裝機器,安裝方式使用遠程方式,
準備作業:① 必須按照有Hadoop(可以是單節點也可以是高可用)和MySQL資料庫,可參照我其他兩篇文章,
?????② 在Node3主機上創建目錄(已創建有可以忽略):
mkdir -p /export/server/
mkdir -p /export/data/
mkdir -p /export/software/

準備一個Hive的包,可以去官網下載 http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
(1)上傳壓縮包到/export/software目錄里,并解壓安裝包
# 上傳壓縮包到/export/software目錄里,并解壓安裝包
cd /export/software/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2


(2)解決hadoop、hive之間guava版本差異
#解決hadoop、hive之間guava版本差異
cd /export/server/hive-3.1.2
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

(3) 配置一個MySQL的連接包,這步必須配置,Mysql5.X和Mysql8.X的連接包可能不同,具體可以去官網下載,附上腳本之家的下載教程(https://www.jb51.net/article/190860.htm)
#上傳這個包到此目錄下/export/server/hive-3.1.2/lib
mysql-connector-java-5.1.41-bin.jar

(5)修改hive環境變數檔案 添加Hadoop_HOME
#修改hive環境變數檔案 添加Hadoop_HOME
cd /export/server/hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
#---將以下的配置放到組態檔中,以hadoop-3.1.4和hive-3.1.2為例
HADOOP_HOME=/export/server/hadoop-3.1.4
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib
(6)配置mysql等相關資訊,新增hive-site.xml
#--打開組態檔
vim hive-site.xml
#--將以下配置內容寫入組態檔中,具體的連接埠以自己本機為準,附上備注
<configuration>
<!-- 存盤元資料mysql相關配置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value> jdbc:mysql://node3:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- H2S運行系結host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node3</value>
</property>
<!-- 遠程模式部署metastore 服務地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node3:9083</value>
</property>
<!-- 關閉元資料存盤授權 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- 關閉元資料存盤版本的驗證 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>

(7)初始化metadata(只需要在配置完Hive之后進行一次操作)
cd /export/server/hive-3.1.2
#初始化成功會在mysql中創建74張表
bin/schematool -initSchema -dbType mysql -verbos
(8)系統環境變數配置
#添加環境變數
vim /etc/profile
#將以下環境變數新增到/etc/profile檔案中
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH
#重繪,讓環境變數生效
source /etc/profile
(9)通過后臺運行啟動metastore和hiveserver2 啟動前需要查看下Hadoop是否啟動,Hadoop未啟動會報錯:連接失敗
#查看Hadoop是否啟動
jps
#Hadoop未啟動:沒有DataNode和NodeManage節點代表Hadoop未啟動
#一鍵啟動Hadoop(已啟動則忽略)
start-add.sh
#-----------------Metastore 和 Hiveserver2啟動----
nohup /export/server/hive-3.1.2/bin/hive --service metastore 2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &
#啟動成功會生成日志,進入可以查看是否有問題
vim nohup.out


(10)驗證是否安裝成功
#在Linux中輸入,hive直接回車,
hive
#出現一個終端,在該終端中可以輸入sql命令:
show databases;

5 Hive的互動方式
Hive互動方式有多種,這里以遠程模式的hiveserver2互動為例,需要對Hadoop組態檔進行更新,
#第一步:在NameNode節點上的主機上關閉Hadoop(我的是Node1主機)
stop-all.sh
#第二步:Node1主機上進入到Hadoop組態檔的路徑,然后編輯 core-site.xml檔案
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim core-site.xml
#第三步:在檔案末尾<configuration>內追加配置
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
#第四步:將修改好的core-site.xml檔案分發到node2和node3
scp core-site.xml node2:$PWD
scp core-site.xml node3:$PWD
#第五步:然后重啟Hadoop(stop-all.sh start-all.sh)
start-all.sh
在hive運行的服務器上,確保已經啟動metastore服務和hiveserver2服務,如果沒有啟動,則執行以下陳述句
nohup /export/server/hive-3.1.2/bin/hive --service metastore 2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &
為了方便快捷,直接通過制作腳本進行登錄Hive
#Hive一鍵登錄腳本,安裝expect
yum -y install expect
#新建一個腳本檔案夾,并寫一個腳本
mkdir -p /export/server/script
cd /export/server/script
vim beenline.exp
#腳本的內容如下:
#!/bin/expect
spawn beeline
set timeout 5
expect "beeline>"
send "!connect jdbc:hive2://node3:10000\r"
expect "Enter username for jdbc:hive2://node3:10000:"
send "root\r"
expect "Enter password for jdbc:hive2://node3:10000:"
send "123456\r"
interact
#:wq保存腳本后,需要修改腳本權限
chmod 777 beenline.exp
#最后可以實作一鍵腳本登錄Hive
expect beenline.exp
6 使用IDEA連接hive
使用IntelliJ IDEA 連接


打開node1:9870 看到hadoop中生成了hive的資料表所在位置

具體的hive語法操作自行百度,最后,參考網友的hive架構圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499433.html
標籤:大數據
上一篇:JVM優化之 -Xss -Xms -Xmx -Xmn 引數設定簡介說明
下一篇:Linux的目錄結構
