@
Hive 官網 https://hive.apache.org/
Hive 官網Wiki檔案 https://cwiki.apache.org/confluence/display/Hive/
Hive GitHub原始碼地址 https://github.com/apache/hive
Apache Hive™資料倉儲軟體使用SQL對分散式儲存中的大型資料集進行讀寫和管理,結構可以對映到已儲存的資料上,也提供命令列工具和JDBC驅動連線使用者到Hive。目前最新版本為3.1.3
Hive由Facebook開源用於解決海量結構化紀錄檔的資料統計,基於Hadoop的一個資料倉儲工具,可以將結構化的資料檔案對映成一張表,並且提供類SQL的查詢功能,這套Hive SQL簡稱HQL。Hive僅僅是一個工具,本身不儲存資料只提供一種管理方式,同時也不涉及分散式概念;Hive不是為線上事務處理(OLTP)工作負載而設計的,它最適合用於對資料倉儲進行統計分析。
Hive本質就是MapReduce,將類SQL(HQL)轉換成MapReduce程式,減少編寫MapReduce的複雜度,MapReduce對使用者來說雖然靈活,但需要使用者自己實現功能介面,不像Spark高層級應用提供各種運算元操作。hive支援了三種底層計算引擎包括mr、tez、spark,預設計算引擎mr,使用者可以指定具體使用哪個底層計算引擎(set hive.execution.engine=mr/tez/spark),當前前提得先完成Spark整合或安裝tez。
Hive資料儲存沒有單一的「Hive格式」。Hive內建了逗號和製表符分隔值(CSV/TSV)文字檔案、Apache Parquet™、Apache ORC™和其他格式的聯結器。使用者可以為Hive擴充套件其他格式的聯結器。
Hive支援檔案格式和壓縮:RCFile、Avro、ORC、Parquet、Compression、 LZO。
Hive的元件包括HCatalog和WebHCat
下圖包含了Hive的主要元件及其與Hadoop的互動。Hive的主要元件有:
編譯器對hql語句進⾏詞法、語法、語意的編譯(需要跟後設資料關聯),編譯完成後會⽣成⼀個執⾏計劃。hive上就是編譯成mapreduce的job
將執⾏計劃進⾏優化,減少不必要的列、使⽤分割區、使⽤索引等,優化job。
Hive的安裝方式或者說是MetaStore安裝 分為三種部署模式:內嵌模式、本地模式以及遠端模式。Hive自動監測是否有Hadoop的環境變數。
# 下載hive最新版本3.1.3
wget --no-check-certificate https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
# 解壓
tar -xvf apache-hive-3.1.3-bin.tar.gz
# 進入目錄
cd apache-hive-3.1.3-bin
預設情況下,MetaStore 服務和 Hive 服務執行在同一個 JVM 中,包含一個內嵌的以本地磁碟作為儲存的 Derby 資料庫範例。使用內嵌的 MetaStore 是 Hive 入門最簡單的方法。但是每次只有一個內嵌的 Derby 資料庫可以存取某個磁碟上的資料庫檔案,這就意味著一次只能為每個 MetaStore 開啟一個 Hive 對談。如果試著啟動第二個對談,在它試圖連線 MetaStore 時,會得到錯誤資訊。因此它並不是一個實際的解決方案,並不適合在生產環境使用,常用於測試。
# 設定環境變數
vi /etc/profile
export HIVE_HOME=/home/commons/apache-hive-3.1.3-bin
export PATH=$HIVE_HOME/bin:$PATH
# 生效環境變數
source /etc/profile
# 設定hive-env環境變數
cp conf/hive-env.sh.template conf/hive-env.sh
vi conf/hive-env.sh
export HADOOP_HOME=/home/commons/hadoop
export HIVE_CONF_DIR=/home/commons/apache-hive-3.1.3-bin/conf
export HIVE_AUX_JARS_PATH=/home/commons/apache-hive-3.1.3-bin/lib
# 複製hive-default.xml
cp conf/hive-default.xml.template conf/hive-site.xml
# 替換{system:java.io.tmpdir}
vi conf/hive-site.xml
# 在vi裡替換,一共替換4處地方,4 substitutions on 4 lines
:%s#${system:java.io.tmpdir}#/home/commons/apache-hive-3.1.3-bin/iotmp#g
# 在vi裡替換,一共替換3處地方,3 substitutions on 3 lines
:%s#${system:user.name}#root#g
# 初始化derby後設資料
schematool -initSchema -dbType derby
# 找到3215行的位置,將description整行內容刪除儲存
vi conf/hive-site.xml
重新執行初始化後顯示完成
初始化完後會在執行初始化指令碼當前路徑生成metastore_db的目錄,hive內嵌模式啟動就是讀當前路徑下這個目錄,這也意味著在其他目錄執行hive就沒法共用內嵌Derby後設資料資訊。
如果要支援多對談(以及多租戶),需要使用一個獨立的資料庫。這種設定方式成為本地設定,因為 MetaStore 服務仍然和 Hive 服務執行在同一個程序中,但連線的卻是另一個程序中執行的資料庫,在同一臺機器上或者遠端機器上。對於本地模式來說使用者端和伺服器端在同一個節點上,啟動hive後自動啟動後設資料服務並連線。
在本地模式下不需要設定 hive.metastore.uris,預設為空表示是本地模式。如果選擇 MySQL 作為 MetaStore 儲存資料庫,需要提前將 MySQL 的驅動包拷貝到 $HIVE_HOME/lib目錄下。JDBC 連線驅動類視情況決定選擇 com.mysql.cj.jdbc.Driver 還是 com.mysql.jdbc.Driver。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.50.95:3308/hive_meta?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.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>
然後執行初始化操作,初始化成功後檢視hive_meta資料庫自動建立且有相關表
show databases;後顯示資料有default預設資料庫了
將hive中的相關程序比如hiveserver2或者metastore這樣的程序單獨開啟,使用使用者端工具或者命令進行遠端連線這樣的服務。即遠端模式。使用者端可以在任何機器上,只要連線到這個server,就可以操作,使用者端可以不需要密碼。
修改hadoop的core-site.xml
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
# 啟動hiveserver2
hive --service hiveserver2 &
檢視程序和上面執行hive可執行檔案的程序都是org.apache.hadoop.util.RunJar
# 將hive目錄傳送其他機器上
scp -r ../apache-hive-3.1.3-bin hadoop1:/home/commons
# 修改hive-site.xml內容
vi hive-site.xml
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop2</value>
<description>Bind host on which to run the HiveServer2 Thrift service.</description>
</property>
# 啟動beeline使用者端
bin/beeline
# 連線jdbc,使用者名稱和密碼就是你啟動hiveserver2機器使用者名稱密碼
!connect jdbc:hive2://hadoop2:10000
# 啟動metastore
hive --service metastore &
啟動後檢視程序可以看到比剛才增多一個RunJar程序
修改hive-site.xml內容
vi hive-site.xml <property> <name>hive.metastore.uris</name> <value>thrift://hadoop2:9083</value> <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description> </property>
# 執行hive就可以連線到遠端9083的後設資料服務bin/hive
**本人部落格網站 **IT小神 www.itxiaoshen.com