Hive安裝部署


HDFS => 海量數據的存儲

MapReduce => 海量數據的分析和處理

YARN => 集群資源的管理和作業調度

Hive => 將SQL轉換為MapReduce任務的工具

Hive部署規划:

安裝前提:3台虛擬機,安裝了Hadoop

安裝軟件:Hive(3.1.2) + MySQL (5.7.36)

備注:Hive的元數據默認存儲在自帶的 derby 數據庫中,生產中多采用MySQL。

derby:java語言開發占用資源少,單進程,單用戶。僅僅適用於個人的測試。

image

MySQL安裝在哪台機,建議Hive就安裝在哪台機,原則就是讓Hive距離元數據近一點。

安裝包規划:

# hive安裝包
apache-hive-3.1.2-bin.tar.gz
# 下載地址:
http://archive.apache.org/dist/hive/

# MySQL安裝包
mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
# 下載地址:
https://dev.mysql.com/downloads/mysql/

# MySQL的JDBC驅動程序
mysql-connector-java-5.1.46.jar
# 下載地址:
https://dev.mysql.com/downloads/connector/j/

# 整體的安裝步驟:
1、安裝MySQL
2、安裝配置Hive
3、Hive添加常用配置

MySQL安裝

Hive中使用MySQL存儲元數據,我們這里使用MySQL的版本 5.7.36。安裝步驟:

1、環境准備(刪除有沖突的依賴包、安裝必須的依賴包)
2、安裝MySQL
3、修改root口令(找到系統給定的隨機口令、修改口令)
4、在數據庫中創建hive用戶

1、刪除MariaDB

centos7.6自帶的 MariaDB(MariaDB是MySQL的一個分支),與要安裝的MySQL有沖突,需要刪除。

# 查詢是否安裝了mariadb
rpm -aq | grep mariadb

# 刪除mariadb。-e 刪除指定的套件;--nodeps 不驗證套件的相互關聯性
rpm -e --nodeps mariadb-libs

clipboard

2、安裝依賴

yum install perl -y
yum install net-tools -y

3、下載MySQL安裝包

我們這里直接下載rpm包進行安裝。大家也可以使用其他方式安裝。

關於使用二進制包安裝mysql的,可以參考我另一篇文章:https://www.cnblogs.com/doublexi/p/8761027.html

# 從mysql官網下載rpm-bundle類型的包
cd /data/apps/shell/software/
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar

4、rpm安裝MySQL

# 解壓tar包
tar xf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
# ls查看發現解壓后,有如下的rpm包
# ll
total 1066148
-rw-r--r-- 1 root root  545863680 Sep  8 08:40 mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
-rw-r--r-- 1 7155 31415  26664808 Sep  8 08:34 mysql-community-client-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415    317808 Sep  8 08:34 mysql-community-common-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415   4118740 Sep  8 08:34 mysql-community-devel-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415  47760636 Sep  8 08:34 mysql-community-embedded-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415  23316608 Sep  8 08:34 mysql-community-embedded-compat-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 132191192 Sep  8 08:34 mysql-community-embedded-devel-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415   2473272 Sep  8 08:34 mysql-community-libs-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415   1263988 Sep  8 08:34 mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 182267476 Sep  8 08:34 mysql-community-server-5.7.36-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 125479900 Sep  8 08:35 mysql-community-test-5.7.36-1.el7.x86_64.rpm

clipboard

rpm安裝

# 依次運行以下命令安裝
rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm

5、啟動數據庫

systemctl start mysqld
# 查看mysql進程
ps -ef|grep mysql

clipboard

6、查找root密碼

grep password /var/log/mysqld.log

clipboard

7、修改 root 口令

# 進入MySQL,使用前面查詢到的口令
mysql -u root -p

# 設置口令強度;將root口令設置為12345678;刷新
set global validate_password_policy=0;
set password for 'root'@'localhost' =password('12345678');
flush privileges;

clipboard

validate_password_policy 密碼策略(默認是1),可配置的值有以下:

  • 0 or LOW 僅需需符合密碼長度(由參數validate_password_length【默認為8】指定)
  • 1 or MEDIUM 滿足LOW策略,同時需滿足至少有1個數字,小寫字母,大寫字母和特殊字符
  • 2 or STRONG 滿足MEDIUM策略,同時密碼不能存在字典文件(dictionary file)中

備注:個人開發環境,出於方便的目的設比較簡單的密碼;生產環境一定要設復雜密碼!

8、創建 hive 用戶

-- 創建用戶設置口令、授權、刷新
CREATE USER 'hive'@'%' IDENTIFIED BY '12345678';
GRANT ALL ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;

Hive安裝

安裝步驟:
1、下載、上傳、解壓縮
2、修改環境變量
3、修改hive配置
4、拷貝JDBC的驅動程序
5、初始化元數據庫

1、下載Hive軟件,並解壓縮

cd /data/apps/shell/software
# 下載
wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
# 解壓
tar xf apache-hive-3.1.2-bin.tar.gz
mv apache-hive-3.1.2-bin /data/apps/hive-3.1.2
cd /data/apps/hive-3.1.2

2、添加環境變量

vim /etc/profile 

##HIVE_HOME
export HIVE_HOME=/data/apps/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

source使立即生效

source /etc/profile

3、修改 Hive 配置

cd $HIVE_HOME/conf 
vi hive-site.xml 

增加以下內容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- hive元數據的存儲位置 -->
<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://dev-spark-slave-172:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>
        <description>JDBC connect string 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>hive</value>
        <description>username to use against metastore database</description>
</property>
<!-- 連接數據庫的口令 -->
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>12345678</value>
        <description>password to use against metastore database</description>
</property>
</configuration>

備注:

  • 注意jdbc的連接串,如果沒有 useSSL=false 會有大量警告
  • 在xml文件中 &amp; 表示 &

4、拷貝 MySQL JDBC 驅動程序

將 mysql-connector-java-5.1.46.jar 拷貝到 $HIVE_HOME/lib

cd /data/apps/shell/software
wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip
# 解壓
unzip mysql-connector-java-5.1.46.zip
cd mysql-connector-java-5.1.46
# 將 mysql-connector-java-5.1.46.jar 拷貝到 $HIVE_HOME/lib
cp mysql-connector-java-5.1.46.jar $HIVE_HOME/lib/

5、初始化元數據庫

cd $HIVE_HOME
schematool -dbType mysql -initSchema

注意:這里可能會遇到這個問題:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

clipboard

原因:

hadoop和hive的兩個guava.jar版本不一致

兩個位置分別位於下面兩個目錄:

- /data/apps/hive-3.1.2/lib/

- /data/apps/hadoop-3.2.2/share/hadoop/common/lib/

解決辦法:

刪除低版本的那個,將高版本的復制到低版本目錄下.

查看hive的guava版本:

ls $HIVE_HOME/lib

hive里的為guava-19.0.jar

clipboard

查看hadoop里的guava版本:

ls $HADOOP_HOME/share/hadoop/common/lib/

hadoop里的是guava-27.0-jre.jar

clipboard

把hive中的guava刪掉,然后把hadoop里的guava拷貝到hive中

rm -f $$HIVE_HOME/lib/guava-19.0.jar
mv $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $$HIVE_HOME/lib/

再重新執行初始化:

schematool -dbType mysql -initSchema

初始化成功,如下圖:

clipboard

6、啟動Hive,執行命令

# 啟動hive服務之前,請先啟動hdfs、yarn的服務
[root@dev-spark-slave-172 ~]$ hive
hive> show databases;

clipboard

至此,hive單節點安裝完成,可以在命令行使用hive了。

Hive 屬性配置

可在 hive-site.xml 中增加以下常用配置,方便使用。

數據存儲位置

<property>
<!-- 數據默認的存儲位置(HDFS) -->
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
</property>


顯示當前庫

<property>
<!-- 在命令行中,顯示當前操作的數據庫 -->
        <name>hive.cli.print.current.db</name>
        <value>true</value>
        <description>Whether to include the current database in the Hive prompt.</description>
</property>


顯示表頭屬性

<property>
<!-- 在命令行中,顯示數據的表頭 -->
        <name>hive.cli.print.header</name>
        <value>true</value>
</property>


本地模式

<property>
<!-- 操作小規模數據時,使用本地模式,提高效率 -->
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
        <description>Let Hive determine whether to run in local mode automatically</description>
</property>

備注:當 Hive 的輸入數據量非常小時,Hive 通過本地模式在單台機器上處理所有的任務。對於小數據集,執行時間會明顯被縮短。當一個job滿足如下條件才能真正使用本地模式:

  • job的輸入數據量必須小於參數:hive.exec.mode.local.auto.inputbytes.max (默認128MB)
  • job的map數必須小於參數:hive.exec.mode.local.auto.tasks.max (默認4)
  • job的reduce數必須為0或者1


Hive的日志文件

Hive的log默認存放在 /tmp/root 目錄下(root為當前用戶名);這個位置可以修改。

24行

cd /data/apps/hive-3.1.2/conf
mv hive-log4j2.properties.template hive-log4j2.properties
vi $HIVE_HOME/conf/hive-log4j2.properties

# 24行注釋,並添加以下內容:
property.hive.log.dir = /data/apps/hive-3.1.2/logs

clipboard

也可以不修改,但是要知道位置。


Metastore元數據服務

Metastore即元數據服務,是Hive用來管理庫表元數據的一個服務。

Metadata即元數據。元數據包含用Hive創建的database、table、表的字段等元信息。元數據存儲在關系型數據庫中。如hive內置的Derby、第三方如MySQL等。有了它上層的服務不用再跟裸的文件數據打交道,而是可以基於結構化的庫表信息構建計算框架。


metastore有三種配置方式

1、內嵌模式(默認模式)

內嵌模式使用的是內嵌的Derby數據庫來存儲元數據,也不需要額外起Metastore服務。數據庫和Metastore服務都嵌入在主Hive Server進程中。這個是默認的,配置簡單,但是一次只能一個客戶端連接,適用於用來實驗,不適用於生產環境。

clipboard

優點:配置簡單,解壓hive安裝包 bin/hive 啟動即可使用;

缺點:不同路徑啟動hive,每一個hive擁有一套自己的元數據,無法共享。


2、本地模式(我們上面安裝的模式)

本地模式采用外部數據庫來存儲元數據,目前支持的數據庫有:MySQL、Postgres、Oracle、MS SQL Server。我們上面采用的是MySQL。

本地模式不需要單獨起metastore服務,用的是跟Hive在同一個進程里的metastore服務。也就是說當啟動一個hive 服務時,其內部會啟動一個metastore服務。Hive根據 hive.metastore.uris 參數值來判斷,如果為空,則為本地模式。

clipboard

缺點:每啟動一次hive服務,都內置啟動了一個metastore;會在hive-site.xml中暴露數據庫的連接信息;

優點:配置較簡單,本地模式下hive的配置中指定mysql的相關信息即可。


3、遠程模式

遠程模式下,需要單獨起metastore服務,然后每個客戶端都在配置文件里配置連接到該metastore服務。遠程模式的metastore服務和hive運行在不同的進程里。

在生產環境中,建議用遠程模式來配置Hive Metastore。

clipboard

在這種模式下,其他依賴Hive的軟件都可以通過Metastore訪問Hive。此時需要配置 hive.metastore.uris 參數來指定 metastore 服務運行的機器ip和端口,並且需要單獨手動啟動metastore服務。metastore服務可以配置多個節點上,避免單節點故障導致整個集群的hive client不可用。同時hive client配置多個metastore地址,會自動選擇可用節點。


metastore遠程模式配置 (可選)

配置規划:

image

這個規划,可以根據自己的需要來分配。你可以三台機器全部安裝metastore服務,也可以就安裝一台,client安裝在哪里,也可以根據自己的需要來定。不必跟我這里完全一致。

配置步驟:

1、將dev-spark-slave-172 的 hive 安裝文件拷貝到 dev-spark-master-206、dev-spark-slave-171

[root@dev-spark-slave-172 apps]# rsync-script hive-3.1.2/

在另外兩台服務器上,需要配置環境變量:

# vim /etc/profile
##HIVE_HOME
export HIVE_HOME=/data/apps/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

加載環境變量,

source /etc/profile

確保三台機器都設置了環境變量,並生效了。

2、在dev-spark-master-206、dev-spark-slave-172上分別啟動 metastore 服務

# 啟動 metastore 服務
nohup hive --service metastore &

# 查詢9083端口(metastore服務占用的端口)
lsof -i:9083

# 安裝lsof
yum install lsof

3、修改dev-spark-slave-171 上hive-site.xml。刪除配置文件中:MySQL的配置、連接數據庫的用戶名、口令等信息;增加連接metastore的配置:

<!-- hive metastore 服務地址 -->
<property>
        <name>hive.metastore.uris</name>
        <value>thrift://dev-spark-master-206:9083,thrift://dev-spark-slave-172:9083</value>
</property>
<property>
        <name>hive.metastore.client.socket.timeout</name>
        <value>3600</value>
</property>
<property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
</property>

如下是dev-spark-slave-171,即client上的hive-site.xml的配置

clipboard

4、啟動hive client

在dev-spark-slave-171上啟動hive。此時client端無需實例化hive的metastore,啟動速度會加快。


5、高可用測試。關閉已連接的metastore服務,發現hive連到另一個節點的服務上,仍然能夠正常使用。


HiveServer2部署

上面訪問hive,都是在服務器本地運行hive命令啟動一個client來訪問的形式,這種方式類似在linux上運行一個mysql -uroot -p的方式,它需要我們登陸服務器。

我們使用hive,在很多場景都是通過Hue或者jdbc、odbc等方式去遠程連接訪問的,所以我們還需要安裝hiveserver2服務。

HiveServer2是一個服務端接口,使遠程客戶端可以執行對Hive的查詢並返回結果。目前基於Thrift RPC的實現是HiveServer的改進版本,並支持多客戶端並發和身份驗證,啟動hiveServer2服務后,就可以使用jdbc、odbc、thrift 的方式連接。

clipboard

HiveServer2作用:

  • 為Hive提供了一種允許客戶端遠程訪問的服務
  • 基於thrift協議,支持跨平台,跨編程語言對Hive訪問
  • 允許遠程訪問Hive

配置規划:

image

這里我們將hiveserver2安裝在第三台機器,dev-spark-slave-172上面。你可以根據自己的需求,安裝在三台機器的任意一台都可以。


配置步驟:

1、修改hive-site.xml (可選)

在dev-spark-slave-172上修改hive-site.xml文件,增加hiveserver2的配置,其實也可以不配置,使用默認的參數即可。

# vim hive-site.xml
<!-- 這是hiveserver2,修改服務端口,默認是10000 (可以不配置)-->
<!--
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>
-->
<!-- 修改hiveserver2綁定的主機 (可以不配置) -->
<!--
<property>
	<name>hive.server2.thrift.bind.host</name>
	<value>192.168.90.172</value>
</property>
-->

如果需要配置hiveserver2的HA高可用模式,還需要在這里增加zookeeper的配置,這里暫時不配置。

2、修改hadoop集群上的 core-site.xml,增加以下內容:

# vim /data/apps/hadoop-3.2.2/etc/hadoop/core-site.xml 

<!-- HiveServer2 連不上10000;hadoop為安裝用戶 -->
<!-- root用戶可以代理所有主機上的所有用戶 -->
<property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
</property>
<property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>
<property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
</property>
<property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
</property>

如果你當前登錄linux,使用的不是root或者hadoop用戶,則增加兩行配置,或者將上面的hadoop用戶替換為你當前登錄的用戶。

這里的用戶是后面要啟動hiveserver2的用戶。


3、修改hadoop集群上的 hdfs-site.xml,增加以下內容:

# vim /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml

<!-- HiveServer2 連不上10000;啟用 webhdfs 服務 -->
<property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
</property>

4、將這兩個文件同步到其他兩台服務器

rsync-script /data/apps/hadoop-3.2.2/etc/hadoop/core-site.xml 
rsync-script /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml

在dev-spark-master-206上重啟hdfs服務

stop-dfs.sh
start-dfs.sh

5、啟動dev-spark-slave-172上的 HiveServer2 服務

# 啟動 hiveserver2 服務
nohup hiveserver2 &

# 檢查 hiveserver2 端口
lsof -i:10000

# 從2.0開始,HiveServer2提供了WebUI
# 還可以使用瀏覽器檢查hiveserver2的啟動情況。http://dev-spark-slave-172:10002/

注意:

如果發現hiveserver2啟動日志中有如下報錯:

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

2021-12-02T10:51:31,638  WARN [main] server.HiveServer2: Error starting HiveServer2 on attempt 1, will retry in 60000ms
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74) ~[hive-exec-3.1.2.jar:3.1.2]
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.initTriggers(TezSessionPoolManager.java:207) ~[hive-exec-3.1.2.jar:3.1.2]
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.startPool(TezSessionPoolManager.java:114) ~[hive-exec-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.initAndStartTezSessionPoolManager(HiveServer2.java:839) ~[hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.startOrReconnectTezSessions(HiveServer2.java:822) ~[hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:745) ~[hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.startHiveServer2(HiveServer2.java:1037) [hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.access$1600(HiveServer2.java:140) [hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2$StartOptionExecutor.execute(HiveServer2.java:1305) [hive-service-3.1.2.jar:3.1.2]
        at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:1149) [hive-service-3.1.2.jar:3.1.2]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_162]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_162]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_162]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_162]
        at org.apache.hadoop.util.RunJar.run(RunJar.java:323) [hadoop-common-3.2.2.jar:?]
        at org.apache.hadoop.util.RunJar.main(RunJar.java:236) [hadoop-common-3.2.2.jar:?]
Caused by: java.lang.ClassNotFoundException: org.apache.tez.dag.api.TezConfiguration
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_162]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_162]
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[?:1.8.0_162]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_162]
        ... 16 more
 
        

clipboard

按提示顯示,沒有集成Tez。而Hive默認使用的引擎是MR,其配置文件hive-site.xml中的hive.execution.engine屬性值為mr,而不是tez。

該報錯是一個WARN,60000ms后會自動重試啟動(一般重試后會啟動成功),通過查看網絡端口:netstat -nltp,可以發現自定義的端口是生效的

clipboard

可以處理,也可以選擇忽略不處理。

如果需要處理,可以修改hive-site.xml,添加以下參數:

<!-- hiveserver2的高可用參數,開啟此參數可以提高hiveserver2的啟動速度 -->
<property>
    <name>hive.server2.active.passive.ha.enable</name>
    <value>true</value>
</property>

重啟hive server2,問題解決,不會報錯。


6、查看hiveserver2 ui界面

瀏覽器訪問:http://dev-spark-slave-172:10002/

clipboard

連接Hive

安裝好Hiveserver2之后,到這里,你要連接Hive就有多種方式選擇了。

你可以使用默認的hive命令行工具,可以使用beeline命令行工具,也可以使用HUE、dbeaver等圖形化界面工具,也可以使用JDBC、ODBC等api工具去連接。

1、使用hive (命令行工具)

在安裝有hive的任意機器,直接輸入hive命令,即可打開,訪問hive

hive
show databases;

clipboard


2、使用Beeline客戶端(命令行工具)

Beeline是從 Hive 0.11版本引入的,是 Hive 新的命令行客戶端工具。Beeline相比hive命令行工具,格式更加沒觀,命令操作支持也更好。

Hive客戶端工具后續將使用Beeline 替代 Hive 命令行工具 ,並且后續版本也會廢棄掉 Hive 客戶端工具。

2.1、啟動beeline

在dev-spark-slave-171上啟動beeline客戶端:(其實任意一台機器都行)

# beeline

# 連接hiveserver2服務,需要輸入用戶名密碼,用戶使用root,密碼為空直接回車
!connect jdbc:hive2://dev-spark-slave-172:10000
show databases;
use default;
show tables;

# 退出
!quit

clipboard

退出命令要加!

clipboard

2.2、禁用beeline的多余info輸出

如上所示,每次輸入hive命令,都會顯示很多的INFO信息,非常影響我們查看輸出結果,怎么禁用掉這些輸出呢?

a) 在使用beeline時加入以下設置即可--hiveconf hive.server2.logging.operation.level=NONE

b) 或者在hive-site.xml中加入如下配置也可以禁用在beeline中顯示額外信息

在hiveserver2服務所在機器,編輯hive-site.xml

在dev-spark-slave-172上,編輯hive-site.xml

<!-- 將hive-server2的INFO輸出信息禁用-->
<property>
    <name>hive.server2.logging.operation.enabled</name>
    <value>false</value>
</property>

重啟hive-server2

殺掉進程,重新啟動

kill -9 Hiveserver2進程id
nohup hiveserver2 &

再次使用beeline,連接上hiveserver2,查看,是不是簡潔很多了。

clipboard


3、使用DBeaver圖形化界面工具

上述都是通過命令行去操作hive的,對用戶使用不大友好。

我們還可以通過一些圖形化界面工具去連接hive。類似工具有HUE、Zeppelin、DBeaver

HUE對大數據組件hdfs、yarn、spark、hbase等的支持都是非常好的,它是安裝在服務器端的。

這里介紹一個安裝在我們windows本地的一個圖形化界面工具DBeaver。

下載地址為:https://dbeaver.io/download/

clipboard

它提供了windows、Mac OS、linux多平台的終端。

這里我們下載windows的exe安裝包,安裝好之后。打開,新建連接

可以看到,它支持這么多數據庫,如果想要連接下面列表之外的數據庫,添加驅動就可以了。

這里我們選擇hive,點擊下一步

clipboard

輸入hiveserver2的地址與用戶,第一次沒有設置密碼,默認為空,點擊完成

clipboard

如下,當前就已經連接上了。因為現在還沒有創建任何數據庫表,所以里面內容為空。

clipboard

4、創建測試表

准備數據文件student.txt

vim student.txt

1,zhangsan,18
2,lisi,20
3,wangwu,28
4,zhaoliu,30

啟動hive客戶端:

hive

創建test數據庫

create database if not exists test;

創建student表,默認創建的是內部表

use test;
-- 創建表
DROP TABLE IF EXISTS `test.student`;
CREATE TABLE test.student(
id int
,name string
,age int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

查看student表結構

desc test.student;

加載數據:

load data local inpath '/root/student.txt' into table test.student;

查詢表:

select * from test.student;

clipboard


5、使用jdbc連接表

首先加載maven依賴包

<dependencies>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>3.1.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish</groupId>
                <artifactId>javax.el</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-runner</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

這里把javax.el與jetty-runner排除了,否則maven導入的時候,會報錯:

Could not find artifact org.glassfish:javax.el:pom:3.0.1-b06-SNAPSHOT in apache.snapshots (https://repository.apache.org/snapshots)

新建HiveDemo類,代碼如下:

import java.sql.*;

/**
 * @author DOUBLEXI
 * @date 2021/12/2 15:06
 * @description
 */
public class HiveDemo {
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://dev-spark-slave-172:10000/test";
    private static String user = "root";
    private static String password = "";

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 注冊驅動、獲取連接
        Class.forName(driverName);
        Connection conn = DriverManager.getConnection(url,user,password);
        Statement statement = conn.createStatement();

        // 查詢test.student
        String sql = "select * from test.student";
        ResultSet resultSet = statement.executeQuery(sql);

        // 打印查詢結果
        while (resultSet.next()) {
            System.out.println("id: " + resultSet.getInt(1)
                    + " name:" + resultSet.getString(2)
                    + " age:" + resultSet.getInt(3));
        }

    }
}

運行程序:

clipboard

可以看到,已經正常連接上hiveserver2,並查詢出結果值了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM