[Hadoop]數(shù)倉工具Hive的安裝部署
??作者:喜歡水星記
??系列:Hadoop高可用集群
??收藏:本文記錄我搭建過程供大家學(xué)習(xí)和自己之后復(fù)習(xí),如果對(duì)您有用,希望能點(diǎn)贊收藏加關(guān)注
Hive的簡介
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。
最初,Hive是由Facebook開發(fā),后來由Apache軟件基金會(huì)開發(fā),并作為進(jìn)一步將它作為名義下Apache Hive為一個(gè)開源項(xiàng)目。
Hive 建立在Hadoop 基礎(chǔ)之上,Hive 與 Hadoop 緊密集成,其設(shè)計(jì)可快速對(duì) PB 級(jí)數(shù)據(jù)進(jìn)行操作。
Hive的意義就是在業(yè)務(wù)分析中將用戶容易編寫、會(huì)寫的Sql語言轉(zhuǎn)換為復(fù)雜難寫的MapReduce程序,從而大大降低了Hadoop學(xué)習(xí)的門檻,讓更多的用戶可以利用Hadoop進(jìn)行數(shù)據(jù)挖掘分析。
Hive的優(yōu)點(diǎn)
-
Hive 所采用的數(shù)據(jù)可通過批處理快速處理 PB 級(jí)數(shù)據(jù)。
-
Hive 提供非程序員可以使用的熟悉的類似于 SQL 的界面。
-
Hive 可根據(jù)使用者的需求被輕松分發(fā)與擴(kuò)展。
-
Hive支持標(biāo)準(zhǔn)的SQL語法,免去了用戶編寫MapReduce程序的過程,大大減少了公司的開發(fā)成本
-
Hive的出現(xiàn)可以讓那些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規(guī)模數(shù)據(jù)集上很方便地利用SQL 語言查詢、匯總、分析數(shù)據(jù)
Hive的架構(gòu)
架構(gòu)圖
Hadoop 和 MapReduce 是 Hive 架構(gòu)的根基
Hive的體系結(jié)構(gòu)可以分為以下幾部分:
- 用戶接口主要有三個(gè):CLI,JDBC/ODBC和 Web UI。
- ①其中,最常用的是CLI,即Shell命令行;
- ②JDBC/ODBC Client是Hive的Java客戶端,與使用傳統(tǒng)數(shù)據(jù)庫JDBC的方式類似,用戶需要連接至Hive Server;
- ③Web UI是通過瀏覽器訪問。
- Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中,如mysql、derby。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
- 解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS中,并在隨后有MapReduce調(diào)用執(zhí)行。
- Hive的數(shù)據(jù)存儲(chǔ)在HDFS中,大部分的查詢、計(jì)算由MapReduce完成。
安裝Hive
Hive搭建環(huán)境
- Centos7的操作系統(tǒng)
- 已安裝完JDK
- 已搭建Hadoop
- 已搭建MySQL數(shù)據(jù)庫平臺(tái)
如果沒有安裝可以查看我上一篇文章:
Hadoop海量數(shù)據(jù)存儲(chǔ)與計(jì)算高可用集群部署
==注意:==初學(xué)者最好在完成我上一篇Hadoop集群搭建之后再安裝Hive
軟件版本選用
選用Hive的2.1.1版本,軟件包名apache-hive-2.1.1-bin.tar.gz
Hive工具使用JDBC方式連接MySQL數(shù)據(jù)庫,需要用到MySQL數(shù)據(jù)庫連接工具軟件,選用該軟件的5.1.42版本,軟件包名mysql-connector-java-5.1.42-bin.jar
軟件下載:
提取鏈接
提取碼:0768
Hive工具安裝配置
Hive的安裝過程只需要在Cluster-01主機(jī)的admin用戶下進(jìn)行
在Cluster-01上:
su - admin # 進(jìn)入admin用戶
mkdir setups # 將本次實(shí)驗(yàn)所需要的軟件包上傳至該目錄,之前已經(jīng)上傳 我這里就不上傳了
mkdir hive #創(chuàng)建用于存放Hive相關(guān)文件的目錄
cd ~/hive
mkdir tmp
tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz
[root@Cluster-01 ~]# su - admin # 進(jìn)入admin用戶
Last login: Mon May 1 22:42:23 CST 2023 on pts/0
[admin@Cluster-01 ~]$ mkdir hive # 創(chuàng)建用于存放Hive相關(guān)文件的目錄
[admin@Cluster-01 ~]$ cd hive/
[admin@Cluster-01 hive]$ mkdir tmp # 創(chuàng)建Hive的本地臨時(shí)文件目錄"tmp"
[admin@Cluster-01 hive]$ tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz
[admin@Cluster-01 hive]$ ls
apache-hive-2.1.1-bin tmp
配置Hive相關(guān)的環(huán)境變量
vi ~/.bash_profile
對(duì)配置文件進(jìn)行修改,在文件末尾添加以下內(nèi)容:
#hive environment
HIVE_HOME=/home/admin/hive/apache-hive-2.1.1-bin
PATH=$HIVE_HOME/bin:$PATH
export HIVE_HOME PATH
刷新環(huán)境變量,使其立即生效
source ~/.bash_profile
驗(yàn)證環(huán)境變量是否配置成功
echo $HIVE_HOME
echo $PATH
出現(xiàn)hive則表明環(huán)境變量配置成功
修改Hive相關(guān)配置文件
進(jìn)入Hive的配置文件目錄
cd ~/hive/apache-hive-2.1.1-bin/conf
Hive的配置文件默認(rèn)都被命名為了模板文件,需要對(duì)其進(jìn)行拷貝重命名之后才能使用:
cp hive-env.sh.template hive-env.sh
cp hive-log4j2.properties.template hive-log4j2.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp hive-default.xml.template hive-site.xml
對(duì)配置文件進(jìn)行修改,找到相關(guān)配置項(xiàng)并對(duì)其值進(jìn)行修改(本個(gè)文件一共有3處修改的)
vi hive-env.sh
找到配置項(xiàng)“HADOOP_HOME”,該項(xiàng)用于指定Hadoop所在的路徑,將其值改為以下內(nèi)容:
HADOOP_HOME=/home/admin/hadoop/hadoop-2.7.3
找到配置項(xiàng)“HIVE_CONF_DIR”,該項(xiàng)用于指定Hive的配置文件所在的路徑,將其值改為以下內(nèi)容:
export HIVE_CONF_DIR=/home/admin/hive/apache-hive-2.1.1-bin/conf
找到配置項(xiàng)“HIVE_AUX_JARS_PATH”,該項(xiàng)用于指定Hive的lib文件所在的路徑,將其值改為以下內(nèi)容:
export HIVE_AUX_JARS_PATH=/home/admin/hive/apache-hive-2.1.1-bin/lib
啟動(dòng)相關(guān)進(jìn)程
在五臺(tái)主機(jī)的admin用戶下執(zhí)行:
zkServer.sh status #查看zookeeper的狀態(tài)
zkServer.sh start #啟動(dòng)zookeeper,如果zookeeper已經(jīng)啟動(dòng)則不需要執(zhí)行本條命令
在Cluster-01的admin用戶下執(zhí)行
start-all.sh
在Cluster-02的admin用戶下執(zhí)行
yarn-daemon.sh start resourcemanager
在HDFS中創(chuàng)建Hive相關(guān)目錄并賦權(quán)
本項(xiàng)操作僅在Cluster-01的admin用戶下進(jìn)行
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/log
hadoop fs -chmod 777 /user/hive/tmp
hadoop fs -chmod 777 /user/hive/warehouse
hadoop fs -chmod 777 /user/hive/log
[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/tmp #在HDFS中分別創(chuàng)建Hive的臨時(shí)文件目錄tmp
[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/warehouse #在HDFS中分別創(chuàng)建Hive的數(shù)據(jù)存儲(chǔ)目錄“warehouse”
[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/log #在HDFS中分別創(chuàng)建Hive的日志文件目錄“l(fā)og”
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/tmp # 賦權(quán)
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/warehouse
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/log
[admin@Cluster-01 conf]$ hadoop fs -ls /user/hive # 查看剛剛創(chuàng)建的目錄
Found 3 items
drwxrwxrwx - admin supergroup 0 2023-05-08 21:32 /user/hive/log
drwxrwxrwx - admin supergroup 0 2023-05-08 21:32 /user/hive/tmp
drwxrwxrwx - admin supergroup 0 2023-05-08 21:32 /user/hive/warehouse
修改相關(guān)配置文件
vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
找到下列標(biāo)簽“”所標(biāo)識(shí)的屬性項(xiàng)名稱所在位置,修改其標(biāo)簽“”所標(biāo)識(shí)的屬性值部分的內(nèi)容:
第一處:
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
修改為::
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
(只修改了<value>標(biāo)簽里面的值)
第二處:
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
修改為::
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
注意:這里有的人可能不需要修改
第三處:
<property>
<name>hive.querylog.location</name>
<value>${system:java.io.tmpdir}/${system:user.name}</value>
<description>Location of Hive run time structured log file</description>
修改為:::
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
<description>Location of Hive run time structured log file</description>
(只修改了<value>標(biāo)簽里面的值)
小技巧:該文檔內(nèi)容較多,可以在編輯器內(nèi)使用命令“/關(guān)鍵字”直接進(jìn)行搜索,使用快捷鍵“n”可以切換到下一個(gè)關(guān)鍵字的所在位置。
創(chuàng)建hive元數(shù)據(jù)數(shù)據(jù)庫
本項(xiàng)的所有操作步驟使用五臺(tái)主機(jī)的用戶root進(jìn)行,5臺(tái)都要操作
在MySQL數(shù)據(jù)庫SQL服務(wù)節(jié)點(diǎn)Cluster-04中創(chuàng)建一個(gè)數(shù)據(jù)庫“hive”用于存放Hive的元數(shù)據(jù),該數(shù)據(jù)庫的用戶名和密碼均為“hive”,數(shù)據(jù)庫名、用戶名、密碼均可以自行設(shè)定,但需要與Hive配置文件中的內(nèi)容相對(duì)應(yīng),連接MySQL數(shù)據(jù)庫:
啟動(dòng)MySQL:
將五臺(tái)主機(jī)切換到root用戶
su - root (五臺(tái)都要執(zhí)行)
在Cluster-01執(zhí)行:
ndb_mgmd -f /usr/local/mysql/etc/config.ini
在Cluster-02,03 執(zhí)行:
ndbd
在Cluster-04,05執(zhí)行:
service mysql start
執(zhí)行完后查看連接狀態(tài):
ndb_mgm -e show
進(jìn)入控制臺(tái)
在Cluster-04的root用戶下執(zhí)行:
mysql -hCluster-04 -uroot -pmysqlabc
在控制臺(tái)執(zhí)行以下命令進(jìn)行數(shù)據(jù)庫的創(chuàng)建:
CREATE DATABASE hive;
USE hive;
CREATE USER ‘hive’@‘%’ IDENTIFIED BY ‘hive’;
GRANT ALL ON hive.* TO ‘hive’@‘%’;
FLUSH PRIVILEGES;
show databases;
quit;
mysql> CREATE DATABASE hive; # 創(chuàng)建數(shù)據(jù)庫hive
Query OK, 1 row affected (0.05 sec)
mysql> USE hive; # 切換到新創(chuàng)建的hive數(shù)據(jù)庫
Database changed
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive'; # 創(chuàng)建數(shù)據(jù)庫用戶hive
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON hive.* TO 'hive'@'%'; # 設(shè)置hive數(shù)據(jù)庫的訪問權(quán)限,hive用戶擁有所有操作權(quán)限并支持遠(yuǎn)程訪問
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES; # 刷新數(shù)據(jù)庫權(quán)限信息
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; # 顯示數(shù)據(jù)庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
| ndbinfo |
| performance_schema |
| sys |
| test |
+--------------------+
7 rows in set (0.00 sec)
mysql> quit; # 退出數(shù)據(jù)庫控制臺(tái)
Bye
添加MySQL連接的相關(guān)配置信息
本項(xiàng)僅在Cluster-01的admin用戶下進(jìn)行
vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
找到下列標(biāo)簽“”所標(biāo)識(shí)的屬性項(xiàng)名稱所在位置,修改其標(biāo)簽“”所標(biāo)識(shí)的屬性值部分的內(nèi)容:
將:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
<description>
修改為:::
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://Cluster-04:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value>
<description>
只需要修改<value>標(biāo)簽里面的內(nèi)容即可
將
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
修改為:
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
將:
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>APP</value>
<description>Username to use against metastore database</description>
</property>
修改為:
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
將:
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mine</value>
<description>password to use against metastore database</description>
</property>
修改為:
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
將MySQL的數(shù)據(jù)庫連接工具包添加到Hive的“lib”目錄下
cp -v ~/setups/mysql-connector-java-5.1.42-bin.jar ~/hive/apache-hive-2.1.1-bin/lib
添加MySQL連接的相關(guān)配置信息
vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml
在編輯器中使用快捷鍵“:”進(jìn)入到編輯器的命令模式,也稱為末行模式,然后使用命令
%s#${system:java.io.tmpdir}#/home/admin/hive/tmp#g
%s#${system:user.name}#${user.name}#g
Hive初始化
在Cluster-01的admin用戶下進(jìn)行
schematool -initSchema -dbType mysql
刪除hive中$HIVE_HOME/lib下面的log4j-slf4j-impl-2.4.1.jar包
cd $HIVE_HOME/lib
rm -rf log4j-slf4j-impl-2.4.1.jar
為了防止與Hadoop中的jar包slf4j-log4j12-1.7.10.jar沖突
Hive工具啟動(dòng)和驗(yàn)證
本項(xiàng)步驟只在中Cluster-01主機(jī)admin用戶上進(jìn)行操作即可
進(jìn)入hive控制臺(tái)
hive
查看數(shù)據(jù)庫
show databases;
退出
quit;文章來源地址http://www.zghlxwxcb.cn/news/detail-752361.html
簡單練習(xí)
在Cluster-01的admin用戶下
基本命令
show databases; # 顯示數(shù)據(jù)庫信息
create database test; # 創(chuàng)建一個(gè)名為test的數(shù)據(jù)庫
use test; # 使用剛剛創(chuàng)建的test庫
show tables; # 顯示當(dāng)前的表
進(jìn)入hive控制臺(tái)
hive
創(chuàng)建表及加載數(shù)據(jù)
create table student1 (
id int comment 'id of student1',
name string comment 'name of student1',
age int comment 'age of student1',
gender string comment 'sex of student1',
addr string
)
comment 'this is a demo'
row format delimited fields terminated by '\t';
查看表
desc student1;
在任意一臺(tái)主機(jī)的root用戶下,我這里使用Cluster-04的root進(jìn)入MySQL
mysql -hCluster-04 -uroot -pmysqlabc
(注意:mysqlabc 是我自己設(shè)置的密碼)
進(jìn)入mysql控制臺(tái)之后,調(diào)用hive的庫
use hive;
查看剛剛創(chuàng)建的表信息
select * from TBLS;
退出控制臺(tái)文章來源:http://www.zghlxwxcb.cn/news/detail-752361.html
quit;
到了這里,關(guān)于[Hadoop高可用集群]數(shù)倉工具之Hive的安裝部署(超級(jí)詳細(xì),適用于初學(xué)者)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!